我有一个使用 Ubuntu 实例拍摄的原始磁盘映像dd
。总磁盘大小为300 GB, 但只有5.5 GB用过的。
有没有办法将原始 dd 图像的大小调整为20 GB,保留所有 5.5 GB 的数据,只截断空块?
答案1
只需使用virt-sparsify
。
在正常使用中,它会写入一个临时文件,然后重写原始文件,但有漏洞。
如果磁盘空间不足,它甚至可以选择就地减少文件大小,而无需写入临时副本,-i
尽管这可能无法释放所有可能的空间。
答案2
在较新的版本中dd
,您可以用来conv=sparse
从一开始就创建稀疏的图像文件。
需要注意的一点是,如果磁盘块被一个已被删除的文件占用,那么仅仅因为磁盘块“未使用”并不意味着它实际上充满了零。有一个名为的工具zerofree
可以获取(未挂载的)文件系统并用零填充所有未使用的块,这使得后续的稀疏化工作得更好。
答案3
如果将其设为稀疏文件,文件元数据仍将为 300 GB,但实际使用的空间将更接近 5.5。例如使用 GNU cp --sparse=always
也可以看看:如何将 Linux 磁盘映像转换为稀疏文件?
如果您还想减少文件的逻辑大小,则需要减少文件系统、LVM 以及根据磁盘大小所拥有的其他内容。
安装大图像、创建所需大小的新图像并将文件复制到其中可能会更简单。