Xen:Xen OpensourceからXen Cloud PlatformへのLVMベースのシステム移行

Xen:Xen OpensourceからXen Cloud PlatformへのLVMベースのシステム移行

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を取得しました。

おすすめ記事