使用 `dd` 命令创建的驱动器映像的 GZip

使用 `dd` 命令创建的驱动器映像的 GZip

我昨天使用 GZip 创建了一个驱动器映像。

我打开了名为固态硬盘镜像看到一个图标,它是一个 3.9 GiB 的包,是的,它的大小是 3.9 GB,图像名称为固态硬盘镜像

我觉得这不对,图像创建成功了吗?

是的,驱动器上存在数据和操作系统。

我应该用cat其他方法吗?但我用了,它一直说没关系。

使用是否| zip是更好的选择?

**编辑**

使用的命令是:

mark@zotac:~$ sudo -l
Enter password:<entered password to get in to root>
root@zotac:~# dd if=/dev/sda | gzip -c > "/media/mark/Seagate External Drive/ssd.img.gz

终端花了将近 10 个小时来构建图像,这本身就让我感到可疑,为什么在将文件复制到我想要的文件夹时要记录这些内容,大约 40GiB 需要 45 分钟...

源驱动器/dev/sda没有安装分区。

**编辑**

只是为了澄清一下,如果修复出现问题,我正在尝试制作驱动器的映像以便稍后备份,驱动器本身需要是驱动器上的文件,因为目标驱动器分区使用了几乎所有的驱动器,如果不格式化就无法调整分区大小,而且我不会丢失 1.4TB 的数据。

所以这dd if=/dev/sda of=/<target>不是我需要的,我需要的是一个驱动器的映像,如果修复出错,我可以将映像恢复到驱动器。

那么我该使用哪个命令,dd 还是 cat?为什么| zip使用 cat 时一直告诉我它与此无关,但使用时却没有错误或警告dd

答案1

如果磁盘快满了,压缩镜像就毫无意义了;这会花很长时间而没有实际效果。而且恢复也会慢得多。

dd逐字节复制物理分区或磁盘。它的工作原理是从输入读取 N 个字节并将其写入输出,然后重复。N 默认为 512字节

要物理复制磁盘/分区,请使用

dd bs=10M if=/dev/sda of=/path/to/dest/image.img 

这将一次读取 10Mbytes 的块。如果您有足够的 RAM,您也可以增加该数字。文件的大小将与使用的磁盘/分区的大小完全相同(但有时它可以占用较少的磁盘 --- 可以dd创建稀疏文件)。

你可以在另一个终端中检查进度

ls -lh /path/to/dest/image.img 

它将为您提供图像文件的大小(或多或少 --- 实际上它将以块为单位)。

用 进行三重检查,mount确保要复制的磁盘分区没有在任何地方安装或使用,否则创建的映像将无效(也可能会发生最坏的情况)。还要注意交换区域。

您可以挂载该图像来检查它是否正常回送文件系统和一些技巧

无论如何,也有一些工具可以帮助完成任务:如何制作磁盘映像并在稍后从中恢复?

如果你的系统不是最新的(我指的是你启动的系统),请注意这个错误——从 14.04 开始已修复,但旧内核中仍然存在

答案2

使用 Gzip 压缩整个驱动器或分区的映像可能会大大减少文件大小,但前提是没有未使用的数据残留存储和未使用的空间被均匀填充例如 Zeros。

对于很少使用的新驱动器,或者对于我们手动用零填充未使用空间的驱动器(例如使用实用程序零自由 安装 zerofree)。

  • 然而,并非如此对于旧的二手驱动器,数据残留会随机分散在整个驱动器上,对于安全擦除已用随机数填充未使用空间的驱动器,或在整个磁盘加密之后。在这些情况下,Gzip 将无法压缩太多或根本无法压缩(随机数无法压缩)。

  • 这也是并非如此对于在写入模式下使用一段时间的 SSD,这是因为每次写入时,驱动器的固件会将所有内存块均匀分布在整个驱动器上,以避免磨损均衡。然后,任何图像压缩也会压缩那些数据残余,这些数据残余会随着时间的推移变得越来越随机。

因此,对于您而言,对于一个相当新、几乎不使用的驱动器或主要用于读取但不用于写入的驱动器,可能可以使用 50 GiB SSD 的 3.9 GiB 压缩映像。但这是一个合理的值。

为了确定,我们需要解压缩图像并将其内容与源内容进行比较。

相关内容