将 0 写入磁盘,现有文件除外

write 0 to disk except existing files

我有一个 ext4 磁盘分区。我想要 "dd" 它的图像。为了提高图像的压缩率,我想将 0 写入文件系统或 GPT/MBR 无法识别的所有位。这可能吗?如何实现?

是的,如果你不坚持100%完美的解决方案,也很容易:

第 1 步:磁盘映像上未使用 space

  • 运行 fdisk -l on the image 查找关于space on the image,即未分配给分区
  • 使用dd/dev/zero复制到这些部分
  • 在典型的图像上,这可能太少了,跳过这一步是很合理的

第 2 步:文件系统中未使用 space

  • 之前 fdisk -l 的输出为您提供了足够的信息来找到 losetup 一个循环设备到每个承载文件系统的分区的大小偏移量
  • 对于映像中的每个文件系统,将此循环设备挂载到临时挂载点
  • 现在 运行 dd if=/dev/zero of=/your/mountpoint/zero.fill bs=1M oflag=sync 直到 "no space left on device" 停止。对于没有稀疏文件的文件系统,您可以删除 oflag=sync
  • 执行 rm -f /your/mountpoint/zero.fill 删除此文件

这将为您留下一张已归零的图像

  • 大部分 space 一个分区没有使用
  • 大部分 space 分配给一个文件系统,但没有使用

我认为这不是实现您想要的方法。相反,您可以随后压缩文件。更好的是,您可以缩小分区,然后将其添加,并在将其添加回驱动器时调整其大小。 Gparted 是最简单的工具,在编写 manually.To 脚本时,使用 parted、tune2fs 和 e2fsck 工具。