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

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

我的 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

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

# zerofree -v /dev/sdb
zerofree: failed to open filesystem /dev/sdb

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

答案1

我没有找到如何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与这个问题无关,但是对于虚拟盒磁盘压缩,执行上述命令后使用命令:

VBoxManage modifyhd --compact /path/to/my/disks/disk1.vdi

答案2

在运行 Zerofree 之前,您很可能需要将文件系统挂载为只读。 Zerofree 手册页解释了如何执行此操作。

必须卸载文件系统或以只读方式安装文件系统,zerofree 才能工作。如果文件系统安装为可写,它将退出并显示错误消息。要以只读方式重新挂载根文件系统,您可以首先切换到单用户运行级别 (telinit 1),然后使用 mount -o remount,ro filesystem。

答案3

似乎最初的问题是让 VDI/QCOW2/RAW 文件访问,如果主机是 Linux,则不需要“telinit 1”;)

这是我的“从头开始”bash 备份方案的一部分,在 RAW 文件上使用 Zerofree 进程。

脚本在 Lubuntu 22.04 LTS 下没问题,我在我的虚拟机上在这里写这些东西;)

  pathe=/media/sebastian/VM
  nname=lubuntu.raw
  if [ -f /media/$USER/$hd/$nname ]; then
   sudo apt install zerofree
  fi 
  res1=`sudo losetup -fP --show $pathe/$nname`
  echo DEBUG: Now RAW file is on $res1 .
  losetup -l
  ls -l ${res1}*
  res2=${res1#/dev/*}
  sudo zerofree -v /dev/${res2}
  for i in {0..5}
  do
   sudo zerofree -v /dev/${res2}p${i}
  done

答案4

只需在 Linux 主机/来宾上使用此开源项目中的 Live CD(此 Live CD 内置有 Zerofree 实用程序;另请阅读网站上的说明):

https://sourceforge.net/projects/live-cd-with-zerofree-utility/

这也将有助于减小导出的虚拟机设备(即 .ova 文件)的大小。

正如其他人提到的,运行 Zerofree 后,使用紧凑选项来减小 vdi 文件大小。

PS 此 Live CD 的 32 位版本(i686 架构)可从以下位置获取:https://sourceforge.net/projects/live-cd-with-zerofree-32-bit/

对于非常旧的架构,请尝试这张 Live CD:https://sourceforge.net/projects/live-cd-with-zerofree-x86/

相关内容