背景:到目前为止,我已经配置了如下虚拟机:
创建模板/黄金虚拟机:
- 创建具有原始 200GB 磁盘的新 CentOS 6.6 VM(1 个 .xml 文件、1 个 .img 文件)
- LVM 分区包括:/boot、swap 和 / 分区(大部分空间在 / 中)
- 安装所需的软件包
上述操作将导致虚拟机如下:
200GB /var/lib/libvirt/images/mytemplate.img
为了制作上面的来宾图像,我做了以下工作:
- dd if=mytemplate.img of=myguest.img iflag=direct oflag=direct(与 cp 相比,复制速度更快)
- 使用 guestfish 修改 /etc/sysconfig/network、/etc/sysconfig/network-scripts/ifcfg-eth0
- uuidgen 和 MAC 地址生成器脚本生成这些 ID
- 静态 IP 地址从可用池中提取
上述工作很好:我们有一个.xml文件和一个.img文件,可以轻松地在我们的数据场中移动。
问题:问题是上述操作是厚配置。这些图像的大小为 200GB,尽管图像的大部分可能是未使用的磁盘空间。我希望对这些图像进行薄配置,并设置最大增长大小,以便更快地在网络上移动图像。我们需要以下命令自由度 /在客户虚拟机内部尽可能显示客户文件系统的最大大小。
此外,我们希望考虑使用 qcow2 而不是 raw 作为图像文件,以便可以拍摄快照。
问题:如何创建如上所述的 LVM 分区的精简配置 KVM 映像?我可以virt-稀疏化现有的 mytemplate.img 文件,并仍允许图像增长到最大尺寸,并使 / 文件系统具有我想要的行为?请随意提供替代方案以供考虑。
答案1
- 是的,
virt-sparsify
这就是你需要的。 - 要克隆虚拟机,你可以使用
virt-clone
- 正确复制磁盘映像
qemu-img convert
是更好的方法。
为了真正节省磁盘空间,您可以制作黄金映像,然后使用 创建它的一些快照qemu-img
,并基于这些快照创建虚拟机。这样,基本数据将保留在基本映像中,而虚拟机将位于非常小的映像上,这些映像仅包含实际虚拟机和黄金映像之间的差异。当然,缺点是性能,因此选择权在您手中,是牺牲空间还是牺牲性能。
答案2
替换为:
dd if=mytemplate.img of=myguest.img iflag=direct oflag=direct (vs cp for better copying speed)
和:
cp --sparse=always mytemplate.img mynewguest.img
假设您的文件尾部稀疏,则文件会小得多。如果文件没有变小,请挂载模板映像:
kpartx -va mytemplate.img
mount /dev/mapper/loop#p# /mnt/target
dd if=/dev/zero of=/mnt/target/zeroes #let it fill the entire drive.
rm -f /mnt/target/zeroes
umount /mnt/target
kpartx -vd mytemplate.img
然后重做 cp 命令(不要忘记 sparse always 部分)。