どんな種類の共有ストレージも使用せずに、2つのKVMホスト間でVMを移動する正しい方法は何ですか
ディスクファイルとXMLダンプをソースKVMマシンから宛先KVMマシンにコピーするだけで十分ですか?その場合、宛先にvmをインポートするにはどのコマンドを実行する必要がありますか?
OSは、Dom0とDomUの両方でUbuntuです。
前もって感謝します
どんな種類の共有ストレージも使用せずに、2つのKVMホスト間でVMを移動する正しい方法は何ですか
ディスクファイルとXMLダンプをソースKVMマシンから宛先KVMマシンにコピーするだけで十分ですか?その場合、宛先にvmをインポートするにはどのコマンドを実行する必要がありますか?
OSは、Dom0とDomUの両方でUbuntuです。
前もって感謝します
回答:
/var/lib/libvirt/images
srcホスト上のVMのディスクを宛先ホスト上の同じディレクトリにコピーしますvirsh dumpxml VMNAME > domxml.xml
、このxmlを宛先ホストにコピーしますvirsh define domxml.xml
VMを起動します。
virsh net-dumpxml > netxml.xml
およびvirsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME
)/dev/mapper/vgname-lvname
そこにパスを残すことができます
まだコメントできないので、この補遺をこの方法でdyasnyの回答に投稿する必要があります。
保持するスナップショットがVMにある場合、VM virsh snapshot-dumpxml $dom $name > file.xml
のスナップショットリスト内の各スナップショットについて、ソース上のスナップショットxmlファイルをダンプする必要がありますvirsh snapshot-list --name $dom
。
次に、宛先でvirsh snapshot-create --redefine $dom file.xml
スナップショットの移行を完了するために使用します。
どのスナップショットが現在のものかを気にする場合は、ソース:
virsh snapshot-current --name $dom
とデスティネーションでさらに行います:
virsh snapshot-current $dom $name
次にvirsh snapshot-delete --metadata $dom $name
、各スナップショットに使用して、ソース上のxmlファイルを削除するか、または/var/lib/libvirt/qemu/snapshots/$guestname
ソース:
はい、XMLファイルと仮想ディスクイメージをコピーするだけで十分ですが、これは明らかに「ライブ」移行を排除します。この手順の間、VMを停止する必要があります。
宛先にコピーしたらlibvirtd
、新しいXMLファイルを認識するために再ロードまたは再起動する必要があります。
virsh
。ファイルを直接コピーしてリロードするだけですlibvirtd
。
これらの手順は、LVMが提供するディスクを使用するVMに適用され、Pythonが各ホスト上にあることを前提としています
https://gist.github.com/rcoup/1338263からblocksync.pyスクリプトをダウンロードし、ソースホストと宛先ホストの両方を/ home / userフォルダーに配置します。
また、両方のマシンで「root」に「sudo」アクセスする必要があります。
または、ルートとしてすべてを実行できますが、sshキーが少なくともターゲットマシンへのルートアクセスを許可している場合のみです。**この場合、コマンドラインからユーザー名を削除します。
ssh user@chewie.domainname.com.au
sudo virsh --all
sudo virsh dumpxml larry> larry.xml
ダンプされた定義を新しいマシン(「ターゲット」ホスト)にコピーします。例:
scp -p larry.xml 10.10.10.38:larry.xml宛先dom0サーバー名に内部IPを変更できます
scp -p larry.xml user@10.10.10.38:larry.xml
キーが原因でcat larry.xmlをコピーしてコピーできない場合は、他のマシンにsshしてファイルを作成して貼り付けることができます。
を使用してVMのディスクのサイズと名前を検索します
sudo lvs-ユニットB。
LV VG Attr LSize Pool Origin Data%Meta%Move Log Cpy%Sync Convert lv_root vg1 -wi-ao ---- 53687091200B lv_swap vg1 -wi-ao ---- 17179869184B vm_vsrv1 vg1 -wi-ao ---- 193273528320B vm_vsrv10 vg1 -wi-ao ---- 64424509440B vm_vsrv11 vg1 -wi-ao ---- 161061273600B vm_vsrv12 vg1 -wi-ao ---- 204010946560B vm_vsrv2 vg1 -wi-ao ---- 140110725120B vm_vsrv3 vg1 -wi-ao ---- 128849018880B vm_larry vg1 -wi-ao ---- 69793218560B vm_vsrv5 vg1 -wi-ao ---- 257698037760B vm_vsrv6 vg1 -wi-ao ---- 64424509440B vm_vsrv7 vg1 -wi-ao ---- 161061273600B vm_vsrv8 vg1 -wi-ao ---- 64424509440B vm_vsrv9 vg1 -wi-ao ---- 214748364800B
ls -l / dev / vg1 / vm_larryです:lrwxrwxrwx。1ルートルート8 Jan 31 13:57 / dev / vg1 / vm_larry-> ../dm-11
ssh user@darth.domainname.com.au
ボリューム定義ファイルを作成します。例:
vi larry.domainname.com.au-vol.xmlまたは
nano larry.domainname.com.au-vol.xml次の行を使用します。注-元のVMからバイト単位でサイズを取得し、以下のスクリプトに入れる必要があります。ソースマシン上のサイズのコマンドはsudo lvs --units Bでした
<volume type='block'>
<name>larry.domainname.com.au</name>
<capacity unit='bytes'>69793218560</capacity>
<allocation unit='bytes'>69793218560</allocation>
<target>
<path>/dev/centos/larry.domainname.com.au</path>
<permissions>
<mode>0600</mode>
<owner>0</owner>
<group>6</group>
<label>system_u:object_r:fixed_disk_device_t:s0</label>
</permissions>
</target>
</volume>
注:この定義は、VMラリー用の69793218560バイトディスク用です。実際のVMの必要に応じて変更します。
注:パスの名前と最後の部分は一致する必要があり、新しいディスク名として使用されます。
を使用して、定義から新しいディスクを作成します
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
それは、larry.domainname.com.au-vol.xmlから作成されたVol larry.domainname.com.auと言います。
ディスクデバイスファイルにアクセスできるようにします。
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
コピーされたxml定義を編集します。例:
vi larry.xml
ファイルでディスク定義を見つけ(「source dev = "を検索)、デバイスを作成したデバイスに置き換えます(ls / dev / centos /でvmを表示できます)。例:/ dev / drbd4-> / dev / centos / larry.domainname.com.au
**インターフェイススタンザで「br1」への参照を見つけて「br0」に変更します。たとえば、ソースブリッジを変更しているので、行は次のようになります。
ソースホストにログインします。たとえば
ssh user@chewie.domainname.com.au
ベストプラクティスは、最終同期を実行する前にソースホスト上のVMをシャットダウンすることですが、実行する必要はありません。(virshシャットダウンNameOfMachine)
ソースホストにまだない場合は、https: //gist.github.com/rcoup/1338263からblocksync.pyスクリプトをダウンロードします
ユーザー名がユーザーの場合(たとえば)、blocksync.pyスクリプトを両方のマシンにコピーして/ home / userとchown user:userとchmod 755スクリプトにコピーします。
scp -p blocksync.py user@10.10.10.38:blocksync.py
sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
注:最初のデバイス名は、「lvs」コマンドで決定されたソースホスト用です。これは[[chewie]]ソースホストからのものです。
注:これにより、ターゲットディスクの内容が破壊されます。/dev/mapper/centos-larry.domainname.com.auが正しいことを確認してください!
注:同期には長い時間がかかります-ギガバイトあたり約100秒、つまり、60ギガバイトのディスクでは90分です。
ただし、VMの使用中に同期を実行できます。後続の同期は最大25パーセント高速化できます
スクリプトは、使用しているパラメーターを出力します(廃止されたモジュールに関するメッセージが表示される場合がありますが、これでかまいません)。次に、使用しているsshコマンドを表示して実行します(これを行うと、許可されたスタッフのみのメッセージが表示されます)。同期中、コピーされたブロックの現在の合計とその平均速度が表示されます。最後に、かかった秒数とともに完了メッセージを出力します。
CTRL Cで同期をキャンセルし、後でコマンドを再実行して後で再起動できます
ssh user@darth.domainname.com.au
virsh define larry.xml
sudo virsh startラリー
sudo virsh autostartラリー
注:新しい環境に合わせてVMの詳細を変更する必要がある場合があります。
いくつかの古いKVMサーバーでこの問題に遭遇しましたが、それが起こると本当に面倒で、インストールされているVMのいずれかで問題を引き起こす可能性があります。私の場合、ディスクスペースがゆっくりと使い果たされるため、VMの1つを定期的にリセット状態にしました。以下の手順は、KVM / Distroバージョンに多少影響を受けます。私の場合、CentOS 7.5があります
CentOS Linux release 7.5.1804 (Core) and Qemu-KVM version 1.5.3
デフォルトでは、KVMイメージは/ var / lib / libvirt / images /にあります
virshリストを使用するには、VMの名前を見つける必要があります
virsh list
Id Name State
----------------------------------------------------
12 VM-Name paused
VMを停止しますvirsh stop VM-Name
私にとっては、移動するのではなく、最初にファイルをコピーします。qcowファイルを新しい場所にコピーします
cp /var/lib/libvirt/images/VM-Name.qcow2 /home/VMImages/
VM xmlファイルを編集して、新しい「ソースファイル」の場所を参照しますvirsh edit VM-Name
このファイルを「ソースファイル」に変更します
libvirtdサービスを再起動します
service libvirtd restart
その後、VMを再起動すると、準備完了です。
virsh start VM-Name