如何使LVM分区的KVM映像能够以最大增长大小进行精简configuration?

背景 :到目前为止,我一直在configuration虚拟机如下:

创build模板/黄金虚拟机:

  • 用原始的200GB磁盘(1个.xml文件,1个.img文件)创build新的CentOS 6.6 VM
  • LVM分区:/ boot,swap和/ partitions(/中的大部分空间)
  • 安装所需的包

上面的结果在一个虚拟机如:

200GB /var/lib/libvirt/images/mytemplate.img

为了从上面产生客人的图像,我做了:

  • dd if = mytemplate.img = myguest.img iflag = direct oflag = direct (vs cp为更好的复制速度)
  • 使用guestfish修改/ etc / sysconfig / network,/ etc / sysconfig / network-scripts / ifcfg-eth0
    • uuidgen和一个MAC地址生成器脚本生成这些id
    • 静态IP地址从可用池中提取

上面的工作很好:我们有一个.xml文件和一个.img文件,可以很容易地在我们的数据场中移动。

问题 :问题是以上是密集configuration。 图像大小为200GB,尽pipe大部分图像可能是未使用的磁盘空间。 我希望将这些精简configuration的最大增长大小更快地移动到networking上。 我们希望guest虚拟机中的df /等命令尽可能地显示guest虚拟机文件系统的最大大小。

另外,我们希望考虑qcow2而不是原始的图像文件,以便拍摄快照。

问题 :如何创build如上所述的LVM分区的精简configuration的KVM映像? 我可以virt-sparsify现有的mytemplate.img文件,并仍然允许图像增长到最大的大小,并有/文件系统有我想要的行为? 请随时提供替代考虑。

  1. 是的, virt-sparsify是你需要的。
  2. 克隆虚拟机,可以使用virt-clone
  3. 要正确地复制磁盘映像, qemu-img convert是更好的方法。

为了真正节省磁盘空间,您可以创build黄金映像,然后使用qemu-img为其创build快照,并将虚拟机基于这些快照。 这样,基础数据将保留在基础映像中,虚拟机将在非常小的映像上,只包含实际虚拟机和黄金映像之间的差异。 不利的一面在于表演,所以select是你的,不论是牺牲空间还是表演。

replace这个:

 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命令(不要忘记总是稀疏的部分)。