如何在整个磁盘上使用 zerofree?

Ole*_*ndr 3 partition ext4 mount disk partition-table

我的 VirtualBox 文件系统如下所示:

# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       29799396 5467616  22795012  20% /
devtmpfs         1929980       0   1929980   0% /dev
tmpfs            1940308      12   1940296   1% /dev/shm
tmpfs            1940308    8712   1931596   1% /run
tmpfs            1940308       0   1940308   0% /sys/fs/cgroup
/dev/sdb        31441920 1124928  30316992   4% /srv/node/d1
/dev/sdc        31441920   49612  31392308   1% /srv/node/d2
/dev/sdd        31441920   34252  31407668   1% /srv/node/d3
/dev/sda1         999320  253564    676944  28% /boot
tmpfs             388064       0    388064   0% /run/user/0
Run Code Online (Sandbox Code Playgroud)

磁盘/dev/sdb/dev/sdc/dev/sdd是VDI数据磁盘。我从它们中删除了一些数据(不是全部),然后想用它zerofree来压缩它们。看起来我不能zerofree在这些磁盘上使用。这是一个执行:

# zerofree -v /dev/sdb
zerofree: failed to open filesystem /dev/sdb
Run Code Online (Sandbox Code Playgroud)

是否可以在此类磁盘上使用 zerofree?如果没有,是否有任何替代解决方案?我需要将现有数据保留在这些磁盘上,但使用zerofree(或其他任何方式)用零填充已删除的数据。

Ole*_*ndr 5

我没有找到有关如何zerofree在此类磁盘上使用的答案,但我找到了一个运行良好的替代解决方案。

  1. 将您的磁盘安装在某处(在我的情况下,3 个磁盘安装到以下位置:/srv/node/d1/srv/node/d2/srv/node/d3)。
  2. 输入安装磁盘的目录 ( cd /srv/node/d1)。
  3. 执行命令: dd if=/dev/zero of=zerofillfile bs=1M
  4. 删除创建的文件: rm -f zerofillfile
  5. 对所有磁盘执行上述操作。

PS与本题无关,但对于virtual box磁盘压缩,执行上述命令后使用命令:

VBoxManage modifyhd --compact /path/to/my/disks/disk1.vdi
Run Code Online (Sandbox Code Playgroud)