适用环境: * PVE 或 LXC 宿主环境 * 安装分区方案为 **LVM(Logical Volume Manager)+ XFS 文件系统** * 输出 qcow2 模板文件 --- ## **1. 创建 qcow2 磁盘** ```bash qemu-img create -f qcow2 /var/lib/libvirt/images/RockyLinux9-Template.qcow2 20G ``` > qcow2 支持稀疏分配,不会一次性占满空间。 --- ## **2. virt-install 安装 Rocky Linux 9** ```bash virt-install \ --name=RockyLinux9-Template \ --ram=4096 \ --vcpus=2 \ --disk path=/var/lib/libvirt/images/RockyLinux9-Template.qcow2,format=qcow2,bus=virtio \ --os-variant=rocky9 \ --network network=default,model=virtio \ --graphics vnc \ --location=http://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/ \ --extra-args="inst.ks=http://<你的kickstart> console=ttyS0" ``` ### **Kickstart 或手动分区要求:** * 分区使用 **LVM**,例如: * `pv` → `vg_rocky` → `lv_root` (挂载 `/`) + `lv_swap` * 根分区使用 **XFS**(默认) --- ## **3. 安装完成后必须 clean shutdown** **不要 virsh destroy!** 在虚拟机内执行: ```bash sync poweroff ``` 保证 LVM+XFS 日志完全写盘。 --- ## **4. 清理模板(virt-sysprep)** ```bash virt-sysprep -a /var/lib/libvirt/images/RockyLinux9-Template.qcow2 \ --enable bash-history,logfiles,net-hostname,net-hwaddr,ssh-userdir,customize ``` 会清理: * 主机名 * 网卡 MAC * SSH host keys * 历史日志 --- ## **5. 检查 LVM + XFS 一致性** 这里是关键! 因为我们是 LVM + XFS,必须先激活 VG,然后对 LV 做 `xfs_repair`。 ### **进入 virt-rescue** ```bash virt-rescue -a /var/lib/libvirt/images/RockyLinux9-Template.qcow2 ``` 系统会给一个 shell,按步骤执行: ### **5.1 激活 VG** ```bash lvm vgscan lvm vgchange -ay ``` > 比如卷组名是 `rl` 或 `rocky_vg`,你会看到 `/dev/mapper/rl-root` 这样的 LV。 ### **5.2 修复 XFS** ```bash xfs_repair -v /dev/mapper/<VG名>-root ``` 如果日志损坏无法恢复: ```bash xfs_repair -L /dev/mapper/<VG名>-root ``` > `-L` 会丢弃未写入日志数据,但能修复文件系统。 ### **5.3 检查其他 LV** 如果 `/home`、`/var` 等单独挂载并使用 XFS,也需要逐个修复: ```bash xfs_repair -v /dev/mapper/<VG名>-home ``` 修复完后 `exit` 退出 virt-rescue。 --- ## **6. 压缩并优化 qcow2 模板** ```bash qemu-img convert -O qcow2 -c \ /var/lib/libvirt/images/RockyLinux9-Template.qcow2 \ /var/lib/libvirt/images/RockyLinux9-Template-clean.qcow2 ``` --- ## **7. 克隆或分发模板** 克隆: ```bash virt-clone --original RockyLinux9-Template --name RockyLinux9-VM1 --file /var/lib/libvirt/images/RockyLinux9-VM1.qcow2 ``` --- ## **8. LVM + XFS 镜像打包注意事项** 1. **绝对不要 destroy 强制关机**,要 `poweroff`。 2. 如果必须强制关机或快照,打包前用 `virt-rescue` 跑一次: ```bash lvm vgscan lvm vgchange -ay xfs_repair -v /dev/mapper/<VG名>-root ``` 3. 如果需要快速打包,可以在虚拟机内部先冻结文件系统: ```bash xfs_freeze -f / sync xfs_freeze -u / ``` 然后再 virsh suspend 或 qemu-img convert。 --- ## **关键总结** * LVM + XFS 模板镜像比直接分区更容易出问题,因为需要先激活 VG 再修复 XFS。 * 模板打包前必须经过: 1. **clean shutdown** 2. **virt-sysprep 清理** 3. **virt-rescue 激活 LVM + xfs\_repair** 这样做可以彻底避免第二次启动报错 `Structure needs cleaning`。 |