是否可以调整 qemu/libvirt 映像的大小,同时保持虚拟大小,并且不丢失数据?我解释得更好:
当您创建虚拟磁盘时
qemu-img create -f qcow2 debian-GEN.qcow2 60G
虚拟机看到60G的磁盘,但是使用的空间是虚拟机已经使用过的空间(此例子是在安装了一些软件之后)
qemu-img info debian-GEN.qcow2
image: debian-GEN.qcow2
file format: qcow2
virtual size: 60 GiB (64424509440 bytes)
disk size: 3.1 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: debian-GEN.qcow2
protocol type: file
file length: 4.61 GiB (4948164608 bytes)
disk size: 3.1 GiB
现在问题来了。假设我写入了 20GB 的额外数据,磁盘大小变为 23GB(3.1+20),假设我删除了 20GB 的数据(使用 rm -fr 甚至 shred),磁盘大小仍然是 23GB!我的问题是:有没有办法从虚拟磁盘中删除 20GB 未使用的数据?那么镜像返回 3.1GB(但虚拟机仍然看到 60GB 空间)?
在现有图像中将空间标记为空闲:
在虚拟机中运行
fstrim
(最好)qemu-img info
(比较前后),但只能在虚拟机未运行时进行。或者(如果由于某种原因这不起作用)用零填充虚拟机中现有的可用空间(不一定是全部,只要足以覆盖大部分已写入的内容即可):
关闭虚拟机
从现有 qcow2 文件创建新的 qcow2 文件。只有实际使用的空间才会写入新文件: