qcow2文件, 会越来越大,实际虚拟机并没有这用这么大的空间,当然*好的方式是SSD硬盘的trim协议, 让虚拟机系统,通知kvm那些文件可以释放空间,
但是目前看来,kvm,qemu并没有计划支持trim协议, *个变通, 比较费劲的方式就是利用raw格式的文件稀疏,来解决这个问题。
**, 在虚拟机系统里面对剩余空间,如果有多个分区, 每个分区要单独操作,全部写0,然后关机:
kvm:/# dd if=/dev/zero of=/home/zero.dat ; sync ; rm /home/zero.dat
在宿主机检查kvm进程退出后,
把影像文件转换成raw格式:
host:/# qemu-img convert -f qcow2 -O raw /home/kvm.img /home/kvm.raw
然后用稀疏复制, 把kvm.ram内部的0全部释放:
cp --sparse=always /home/kvm.raw /home/kvm1.raw
看*下效果:
host:/# du -s /home/*.raw
10485760 /home/kvm.raw
5196240 /home/kvm1.raw
把raw转化回qcow2格式, 或者直接使用raw格式也行,当然qcow2有增量镜像功能,raw没有, raw速度会比qcow2略快, 而且raw可以直接用-o loop,offset=xxx在宿主机加载。
qemu-img convert -f raw -O qcow2 kvm1.raw kvm1.qcow