VMware虚拟磁盘瘦身:压缩Linux文件系统的vmdk文件

背景

众所周知,VMware Workstation使用的vmdk虚拟磁盘的文件体积会随着使用越来越大。即使删除了虚拟磁盘里的文件,vmdk本体的体积也不会缩小。笔者的虚拟磁盘安装了CentOS7,实际只使用了14G,但vmdk文件达到了26G,这实在是一种浪费。

VMware在虚拟机设置中内置了磁盘压缩功能。该功能对装有Windows系统的虚拟磁盘效果往往立竿见影,但对Linux文件系统的磁盘似乎水土不服,压缩后和压缩前几乎没什么区别。

原因及解决

执行磁盘压缩时,VMware的compact工具会扫描全零区块,连续全零区块会被判定为可压缩空间

在Windows(NTFS)中,当文件被删除时,系统会主动向底层存储(包括虚拟磁盘)发送TRIM指令。VMware Tools能实时接收这些指令,标记空闲区块为”可回收”。而Linux(ext4/xfs等)文件系统默认不自动发送TRIM指令,需要用以下命令为不使用的区块手动填充0:

cat /dev/zero > zero.fill
# 一段时间后会显示“写入错误,系统无空间可用”。此乃正常现象。
rm -f zero.fill

手动写0后再执行磁盘压缩,可以看到vmdk文件体积变小。笔者的vmdk文件从26G缩小到了14G,基本和实际使用情况一致。

Leave a Reply

发表回复