Ubunt1904 virt-sysprep Bug

假设有虚拟机 dns-01, vg Name 为 dns01 克隆到 dns-02,新的 vg Name 为 dns02

由于 virt-sysprep 的 bug,导致 vgid 修改后, grub.cfg 文件指定的 lvmid 没有修改,克隆后的虚拟机启动失败,进入 grub rescue mode.
解决的办法是 直接用 virt-clone 后(实际上只是克隆了卷文件,修改了 Mac地址),不要运行 virt-sysprep 直接手工启动虚拟机,初始化虚拟机内的配置: /etc/hostname, /etc/hosts, /etc/netplan/01-*.yaml ,而磁盘的 vg name 实际上无需修改。


下面是一个复杂一点的版本, 用 vol-clone 的办法来做。
# virsh vol-clone dns-01.qcow2 dns-02.qcow2 vmpool
# virsh dumpxml dns-01 >/var/tmp/dns.xml
# vim /var/tmp/dns.xml 修改 domainname 为 dns-02 去掉 UUID 相关的行, 去掉 Mac 地址,修改 disk 的卷文件名为 dns-02.qcow2
# virsh define /var/tmp/dns.xml (会自动生成新的 Mac 地址)
# virsh start dns-02 (如果 dns-01 是静态分配 IP 的,在克隆卷之前最好修改为动态)
# virsh console dns-02

这个 virt-sysprep 的 Bug 是因为 /boot/grub/grub.cfg 文件里有
set root=’lvmid/d8R9S7-C47Z-UHx1-4tRd-qXcX-sFV1-rC4uG4/x4MwoL-7yfO-03da-e72d-Y0DQ-hBil-vXGplk’
这样的行,格式是 lvmid/vg-UUID/lv-UUID
因为 virt-sysprep 后 vg 的 UUID 修改了,但是 grub.cfg 没有修改导致的。

hostnamectl status 命令还会有一个 machine ID 的概念, 重新生成的办法是
# rm /etc/machine-id && systemd-machine-id-setup

作者: 甬洁网络

--移动互联网&物联网技术提供商