Xenオープンソースホストで実行されている複数のLVMベースの仮想マシンがあります。私たちの場合、「LVMベース」とは、ルートパーティション用のLVMボリュームが1つあり、スワップパーティション用の別のボリュームがあることを意味します。 VMのカーネルとinitrdはXenホスト上のファイルで、これらのボリュームの外部にあります。これらの仮想マシンは、Debian xen-toolsファミリの一部であるxen-create-imageを使用して作成されます。
私たちはこれらのVMをXCPホストに移行しようとしており、これを実行するスクリプトを見つけました(http://www.xen.org/files/xva/xva.py)。ただし、このスクリプトは構成ファイルにリストされているディスクが「仮想ディスク」であると想定しています。つまり、独自のパーティションテーブルと他のエントリがあります。明らかにそうではなく、うまくいきません。
何をするように勧めたいですか?自宅で作る方法はありますか?最後に、古いVMの大容量tarファイルで新しいVMを上書きしてVMを移行する必要があるかもしれませんが、これが最後の手段であることを願っています。
私はkpartxとは反対の方法を使って、このスクリプトで予想されるものと同じディスクを作成できると思いました。つまり、仮想ディスクを各パーティションのデバイスに分割するのではなく、複数のパーティション(または私たちの場合はLVMボリューム)にまとめて仮想ディスクに分割します。ディスク。しかし、私はそのようなことを知らない。
よろしくお願いします!
ベストアンサー1
これが私たちがそれを行った方法です:
仮想マシンの名前が「anansi」であるとしましょう。 (私は現在Neil Gaimanの本を読んでいます。どんな本なのか推測してみましょう:-))。これは、2つのLVMボリューム/dev/vg0/anansi-root(ルートファイルシステム、5 GB)および/dev/vg0/anansi-swap(512 MB)にインストールされます。
まず、仮想ハードディスク用の新しいLVMボリュームを作成します。
lvcreate -n anansiVHD -L 6GB vg0
次に、cfdiskを使用してここに2つのパーティションを作成します。
cfdisk /dev/vg0/anansiVHD
次に、kpartx を使用して仮想ディスク内のパーティションを表示します。
kpartx -av /dev/vg0/anansiVHD
私たちはそれらをフォーマットしました(この場合、元の仮想マシンが持っていたext3を使用しました)。 LVMは新しいデバイスについて知らないため、/ dev / vg0に新しいデバイスが表示されません。次のようにアクセスするには、/dev/mapper/whatever を使用する必要があります。
mkfs.ext3 /dev/mapper/vg0-anansiVHD1
mkswap /dev/mapper/vg0-anansiVHD2
その後、ルートパーティションをマウントします。
mkdir /tmp/anansiVHD_root
mount /dev/mapper/vg0-anansiVHD1 /tmp/anansiVHD_root
移行したいVMが実行されている間は、スナップショットを使用してその内容をコピーします。
lvcreate -s -n anansi-snap -L 2G /dev/vg0/anansi-root
mkdir /tmp/anansi-snap
mount /dev/vg0/anansi-snap /tmp/anansi-snap
cd /tmp/anansi-snap
tar c . | (cd /tmp/anansiVHD_root ; tar xv)
私達は次をきれいにします:
umount /tmp/anansiVHD_root
umount /tmp/anansi-snap
lvremove -f /dev/vg0/anansi-snap
kpartx -d /dev/vg0/anansiVHD
仮想ディスクへの変更を反映するには、仮想マシンの構成ファイル(「anansi.cfg」)を変更する必要がありました。これは、次の行を変更することを意味します。
disk = [ 'phy:/dev/vg0/anansi-root,xvda1,w', 'phy:/dev/vg0/anansi-swap,xvda2,w' ]
これに関して:
disk = [ 'phy:/dev/vg0/anansiVHD,xvda,w' ]
次に、以前にリンクされたスクリプトを使用してマシンを移行します。
xva.py -c anansi.cfg -s <the IP of our XCP host> --username=root --password=<root password>
その後、スクリプトの指示に従って、VMをXCPホストに起動するために使用されるカーネルとinitrdをコピーする必要があります。最後のステップは、XCPホストにSSH経由で接続し、そのVMのブートローダを変更することです。そうでない場合、XCPはpygrubを使用しようとします。これには仮想ハードディスク内にカーネルとinitrdが必要なため、機能しません。
だから私たちはこうしました:
xe vm-param-set PV-bootloader="" uuid=0ab93325-bdb3-e5c9-e7ab-2173b612b02c
「xe vm-list」から新しい仮想マシンのuuidを取得しました。