cara mengganti nama VM menggunakan libvirt + KVM


24

Bagaimana saya bisa mengganti nama VM di KVM + libvirt?

Saya ingin mengubah nama di 'inventaris' serta mengubah nama penyimpanan dll.


3
setelah saya menanyakan pertanyaan ini, orang-orang baik di proyek libvirt telah menambahkan perintah 'virsh edit my-vm-name'.
— Arthur Ulfeldt

Jawaban:


18

menjalankan

virsh dumpxml name_of_vm > name_of_vm.xml

Batalkan vm lama untuk mencegah kesalahan karena duplikat UUID.

virsh undefine name-of-vm

Edit file xml lalu impor.

virsh define name_of_vm.xml

Tentu saja Anda harus berhenti dan memulai vm agar perubahan diterapkan

virsh destroy name_of_vm
virsh start name_of_vm

5
perlu menambahkan satu langkah: (sebelum mendefinisikan vm dengan nama baru) "virsh undefine name-of-vm" jika tidak, ia mengeluh tentang duplikat UUID.
— Arthur Ulfeldt

1
saya juga harus mengganti nama file hd.img dan mengedit baris dalam file xml
— Arthur Ulfeldt

Urutan yang benar ada di jawaban lain. Anda tidak harus mengganti nama img jika tidak menggunakan mesin lama.
— Nux

1
Jawaban ini sekarang kedaluwarsa. Lihat jawaban saya di bawah ini. tldr; virsh sekarang memiliki domrename.
— reedstrm


13

virshdiimplementasikan domrenamedalam rilis 1.2.19: 02 Sep 2015. Jadi praktik terbaik saat ini adalah:

 virsh domrename oldname newname

Seperti yang Anda harapkan, domain harus dihentikan, tetapi juga tidak dapat memiliki snapshot.


+1 - Anda bisa virsh edit newnamedan mengubah jalur file dan mv oldname newnamemengganti nama direktori jika Anda ingin semuanya cocok.
— Dijeda sampai pemberitahuan lebih lanjut.

dengan kata lain, Anda juga harus 1) mengganti nama /var/lib/libvirt/images/oldname.qcow2 di /var/lib/libvirt/images/newname.qcow2; dan 2) edit /etc/libvirt/qemu/newname.xml untuk mengatur balise file sumber yang benar <source file = '/ var / lib / libvirt / images / newname.qcow2'
— MaxiReglisse

tetapi hanya jika Anda memerlukan nama file untuk mencocokkan nama domain (yang saya akui, mudah) - ini menghindari siklus penghancuran / pembuatan, meskipun masih membutuhkan penghentian (dan tidak ada snapshot)
— reedstrm

5

Untuk mengubah banyak mesin, Anda dapat menggunakan ini:

virsh shutdown old-name

Tunggu di atas untuk menyelesaikan dan menjalankan:

virsh dumpxml old-name > old-name.xml
virsh undefine old-name

Tunggu di atas untuk menyelesaikan dan menjalankan:

sed -i 's/<name>old-name<\/name>/<name>new-name<\/name>/g' old-name.xml
virsh define old-name.xml

Jalankan ini satu per satu untuk setiap mesin. Anda dapat menggunakan RegExp ini jika Anda memiliki daftar yang berisi old-name new-name:

([^\r\n]+?)[ \t]+([^\r\n]+)
virsh shutdown $1\n#WAIT!\nvirsh dumpxml $1 > $1.xml\nvirsh undefine $1\n\#WAIT!\nsed -i 's/<name>$1<\\/name>/<name>$2<\\/name>/g' $1.xml\nvirsh define $1.xml\n

0

Saya melakukannya sedikit berbeda dan mungkin metode yang tidak direkomendasikan (tidak yakin).

virsh destroy old-vm virsh edit old-vm

Dalam perubahan XML

  1. nama domain old-vm ke new-vm
  2. ubah char / digit di UUID simpan dan keluar.

virsh list --all

1 old-vm shut-off

2 shut-off new-vm

Sekarang batalkan vm-lama

virsh undefine old-vm

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.