ฉันจะเปลี่ยนชื่อ VM บน KVM + libvirt ได้อย่างไร
ฉันต้องการเปลี่ยนชื่อใน 'สินค้าคงคลัง' รวมถึงเปลี่ยนชื่อของที่เก็บข้อมูลเป็นต้น
ฉันจะเปลี่ยนชื่อ VM บน KVM + libvirt ได้อย่างไร
ฉันต้องการเปลี่ยนชื่อใน 'สินค้าคงคลัง' รวมถึงเปลี่ยนชื่อของที่เก็บข้อมูลเป็นต้น
คำตอบ:
วิ่ง
virsh dumpxml name_of_vm > name_of_vm.xml
ยกเลิกการกำหนด vm เก่าเพื่อป้องกันข้อผิดพลาดเนื่องจาก UUID ซ้ำกัน
virsh undefine name-of-vm
แก้ไขไฟล์ xml จากนั้นนำเข้า
virsh define name_of_vm.xml
แน่นอนคุณจะต้องหยุดและเริ่ม vm เพื่อให้การเปลี่ยนแปลงมีผล
virsh destroy name_of_vm
virsh start name_of_vm
virsh dumpxml myvm > foo.xml
<edit foo.xml, change the name, move storage>
virsh undefine myvm
virsh define foo.xml
ที่มา: https://www.redhat.com/archives/libvirt-users/2010-October/msg00072.html
virsh
ดำเนินการdomrename
ในรุ่น 1.2.19: 02 ก.ย. 2015 ดังนั้นแนวปฏิบัติที่ดีที่สุดในปัจจุบันจึงเป็นเพียง
virsh domrename oldname newname
อย่างที่คุณคาดไว้โดเมนต้องหยุดทำงาน แต่จะต้องไม่มีสแนปชอตใด ๆ
virsh edit newname
และเปลี่ยนเส้นทางของไฟล์และmv oldname newname
เปลี่ยนชื่อไดเรกทอรีหากคุณต้องการให้ทุกอย่างตรงกัน
หากต้องการเปลี่ยนเครื่องจักรจำนวนมากคุณสามารถใช้สิ่งนี้:
virsh shutdown old-name
รอข้างบนเพื่อเสร็จสิ้นและเรียกใช้:
virsh dumpxml old-name > old-name.xml
virsh undefine old-name
รอข้างบนเพื่อเสร็จสิ้นและเรียกใช้:
sed -i 's/<name>old-name<\/name>/<name>new-name<\/name>/g' old-name.xml
virsh define old-name.xml
เรียกใช้หนึ่งต่อหนึ่งสำหรับแต่ละเครื่อง คุณสามารถใช้ RegExp นี้หากคุณมีรายการที่มี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
ฉันทำมันแตกต่างกันเล็กน้อยและอาจเป็นวิธีที่ไม่แนะนำ (ไม่แน่ใจ)
virsh destroy old-vm
virsh edit old-vm
ในการเปลี่ยนแปลง XML
virsh list --all
1 old-vm shut-off
2 vm ใหม่ปิด
ตอนนี้ยกเลิกการกำหนดค่า vm เก่า
virsh undefine old-vm