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.

Arthur Ulfeldt
sumber
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
topdog
sumber
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.

reedstrm
sumber
+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
Nux
sumber
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

Jay
sumber