使用 dd 创建 exFAT USB 驱动器的压缩映像

使用 dd 创建 exFAT USB 驱动器的压缩映像

我的系统运行的是 Ubuntu 22.04.3 LTS。我将 USB 驱动器插入该系统。该 USB 驱动器 (/dev/sdb) 包含 Ubuntu 安装,主要位于 ext4 分区 (/dev/sdb3)。该安装占用了大约 25GB 的驱动器空间。

卸载 /dev/sdb3 后,我sudo zerofree -v /dev/sdb3将该 USB 驱动器上的可用空间清零。然后我使用以下命令创建压缩图像:

sudo dd if=/dev/sdb bs=16M conv=sync,noerror | pv | sudo pigz -c > /media/TargetDrive/UbuntuImage.dd.gz

这看起来很有效。生成的 .gz 文件仅重 12GB。

现在,我删除该 USB 驱动器 (/dev/sdb),并将其替换为包含以下内容的 USB 驱动器:由美exFAT安装。

当我使用 GParted 查找有关此 /dev/sdb 驱动器的信息时,我收到警告 - “无法读取此文件系统的内容!” - 以及exfatprogsexfat 文件系统支持所需的指示。我安装exfatprogs并重新启动 GParted。这消除了该警告。

此 YUMI exFAT 安装在 USB 驱动器上填充了 43GB。我了解这一点zerofree以及微软的sdelete -z E:不会对 exFAT 进行零填充,所以我遵循建议这似乎建议如下:

sudo mount -o rw /dev/sdbX /mnt
sudo dd if=/dev/zero of=/mnt/zero_file bs=32M
sudo sync
sudo rm /mnt/zero_file
sudo umount /dev/sdbX

这些命令适当地生成然后删除一个 Zero_file,其大小似乎填充了空白空间。 (我看到但没有尝试这种替代方案,这对我来说不太清楚:cat > /dev/sdbX/zeros < /dev/zero ; sync ; rm /dev/sdbX/zeros。)

然后我基本上运行dd上面显示的命令。这一次,ddpigz没有达到可比的压缩效果。 43GB exFAT 安装保存在 42GB 的映像文件中。

当然,exFAT 驱动器的内容是由 Windows 生成的。但使用 Windows 驱动器映像软件的经验表明我应该期待大幅压缩。

我的问题:是否可以dd改进该命令,以便为该 exFAT 驱动器提供更好的压缩效果?

注意:我似乎使用 NTFS USB 驱动器获得了同样较差的压缩,但没有记录这种情况下的每个步骤。

答案1

(这不适合评论,所以在这里尝试。)

很好的问题。不幸的是,我不确定 - 这个过程几乎正是我要做的。你没有说你的“零”文件有多大。如果它真的很小,则驱动器上没有任何可用空间。另一种选择是这些磁盘以某种方式自动加密,在这种情况下不会写入任何实际的零。

由于您提到了分区,另一个选择是您要写入的分区很小,并且有大量可用空间您无法访问,但在对整个设备进行映像时会捕获这些可用空间。如果是这种情况,您要么需要创建一个新的文件系统,使用驱动器上可以写入零的其余空间,要么向整个设备写入零(例如,/dev/sdb但要小心!)你把YUMI/等等。其顶部的图像。

对于这条评论:

cat > /dev/sdbX/zeros < /dev/zero ; sync ; rm /dev/sdbX/zeros

那是行不通的。/dev/sdb是整个设备;/dev/sdbX是设备上的一个分区;/dev/sdb/whatever不存在。分区(或者完整设备)需要一个已安装的文件系统才能保存名为zeros.除此之外,该命令是相同的,就cat /dev/zero > /path/to/zeros好像您更清楚一样。

如果您想要更好的压缩,我还建议在您的管道中使用bzip2或。xz这些都是广泛支持的压缩格式。 YUMI 安装映像可能已经在磁盘映像中,该映像在启动时未压缩,因此您通过映像获得的额外压缩非常少。

编辑添加zstd似乎是当前首选的压缩算法。它具有出色的速度/大小权衡,如果时间不紧的话,它还具有一些最高的压缩比。更多信息请参见此处:

相关内容