我的 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
在此类磁盘上使用的答案,但我找到了一个效果很好的替代解决方案。
- 将磁盘安装到某个位置(在我的例子中,3 个磁盘安装到以下位置:
/srv/node/d1
,/srv/node/d2
,/srv/node/d3
)。 - 输入磁盘安装目录 (
cd /srv/node/d1
)。 - 执行命令:
dd if=/dev/zero of=zerofillfile bs=1M
- 删除创建的文件:
rm -f zerofillfile
- 对所有磁盘进行上述操作。
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/