VM 2つの間を移動する正しい方法は何ですかKVMホスト種類の共有ストレージを使用せずに
ディスクファイルとXMLダンプをソースからコピーしますかKVMマシンから宛先に1つで十分ですか?そうである場合、宛先にvmをインポートするためにどのコマンドを実行する必要がありますか?
OSは、Dom0とDomUの両方でUbuntuです。
前もって感謝します
/var/lib/libvirt/images
から宛先ホストの同じディレクトリにコピーしますvirsh dumpxml VMNAME > domxml.xml
を実行し、このxmlを宛先ホストにコピーしますvirsh define domxml.xml
を実行しますvMを起動します。
VMがカスタム定義ネットワークに接続されている場合は、宛先ホストのxmlからそれらを編集するか、同様に再定義する必要があります
virsh net-dumpxml NETNAME > netxml.xml
virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME
)私はまだコメントできないので、このように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ファイルを認識する必要があります。
これらの手順は、VM LVM提供のディスクを使用する場合に適用され、Pythonが各ホスト上にあると想定しています。
https://Gist.github.com/rcoup/133826 からblocksync.pyスクリプトをダウンロードし、ソースホストと宛先ホストの両方を/ home/userフォルダーに配置します。
また、両方のマシンで「ルート」への「Sudo」アクセスが必要です。
または、すべてをrootとして実行することもできますが、sshキーで少なくともターゲットマシンへのrootアクセスが許可されている場合のみです。 **この場合、コマンドラインからユーザー名を削除します。
ssh [email protected]
Sudo virsh --all
Sudo virsh dumpxml larry> larry.xml
ダンプした定義を新しいマシン(「ターゲット」ホスト)にコピーします。例:
scp -p larry.xml 10.10.10.38:larry.xml内部IPを宛先のdom0サーバー名に変更できます**注:ターゲットのIPアドレスを使用することをお勧めします。例:
scp -p larry.xml [email protected]:larry.xml
キーが原因でコピーできない場合は、猫のlarry.xmlをコピーしてコピーします。次に、他のマシンにsshしてファイルを作成し、貼り付けます。
を使用してVMのディスクのサイズと名前を見つけます
Sudo lvs-ユニットB。
LV VG属性LSizeプールオリジンデータ%メタ%移動ログCpy%Sync変換 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_larryis:lrwxrwxrwx。 1ルートルート8 Jan 31 13:57/dev/vg1/vm_larry-> ../dm-11
ssh [email protected]
ボリューム定義ファイルを作成します。例:
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 larryの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ホイール/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 [email protected]
ベストプラクティスは、最終的な同期を行う前にソースホストでVMをシャットダウンすることですが、実行する必要はありません。(virsh shutdown NameOfMachine)
ソースホストにまだない場合は、 https://Gist.github.com/rcoup/133826 からblocksync.pyスクリプトをダウンロードします
たとえば、ユーザー名がユーザーの場合、blocksync.pyスクリプトを両方のマシンの/ home/userにコピーし、chown user:userとchmod 755をスクリプトにコピーします。
scp -p blocksync.py [email protected]:blocksync.py
Sudo -E python blocksync.py/dev/vg1/vm_larry [email protected] /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 [email protected]
virshはlarry.xmlを定義します
須藤virshスタートラリー
Sudo virsh autostartラリー
注:新しい環境に合わせて、VMの詳細を変更する必要がある場合があります。
私はいくつかの古いKVM=サーバーでこの問題に遭遇しましたが、それが発生すると本当に面倒であり、インストールされているVMのいずれかで問題を引き起こす可能性があります。私の場合、それは定期的に1つをプッシュしましたディスクスペースが使い尽くされたため、VMをリセット状態にしました。以下の手順は、KVM/Distroバージョンに多少影響を受けます。私の場合、CentOS 7.5を使用しています。
CentOS Linux release 7.5.1804 (Core) and Qemu-KVM version 1.5.3
デフォルトではKVMイメージは/ var/lib/libvirt/images /の場所にあります
VMの名前を見つける必要があります。これにはvirshリストを使用します
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