创建可恢复磁盘映像

创建可恢复磁盘映像

我想购买预装 Windows 10 的笔记本电脑。我想在这台笔记本电脑上安装 Linux,但我希望有恢复 Windows 的选项(重置为出厂设置)。因此,我想制作整个磁盘(所有分区、MBR 等)的逐位映像。当然,我必须有一个选项可以将此映像“刷新”到磁盘,以便笔记本电脑恢复到预装 Windows 的“出厂设置”。创建此类图像的最佳选择是什么?以后如何恢复此类图像?

我将从 USB 启动 Linux 并通过 USB 连接更大的硬盘驱动器。我会将备份存储在该 USB 硬盘上。我正在考虑 dd 命令,但它不会考虑空白空间,因此它会产生巨大的图像。

答案1

您可以尝试使用内置的 Windows 备份工具来创建 Windows 操作系统的系统映像。这是Windows Central 上有相关教程。

您还可以缩小分区并创建一个新分区,在其上安装 Linux 和双引导,但对于初学者用户来说,这可能存在风险,如果分区错误,可能会导致数据完全丢失。

答案2

大多数 OEM 预装 Windows 的计算机都附带一个工具来创建“恢复磁盘”,USB 或 CD/DVD。如果你的这样做,那是最好的选择。然后,您可以选择将该恢复介质复制到磁盘上的文件,或以任何其他正常方式备份它们。

如果你的不这样做,那么你将不得不诉诸暴力。由于您有足够的磁盘空间来制作硬盘的完整副本,这可能是最好的选择。为此,您需要:

  • 从实时 Linux 介质启动,并确保内部硬盘上的文件系统未安装,但目标驱动器已安装。出于本简短指南的目的,我假设您已卸载内部驱动器上的文件系统,并将文件系统安装到 上的目标驱动器上/mnt
  • 运行ddrescue将内部硬盘(包括分区表等)复制到目标介质上的文件。ddrescue优于,dd因为它可以更好地处理可能遇到的任何读取问题。 (这主要是边缘媒体的问题,但是当计划创建一个图像以便稍后将计算机恢复到出厂状态时,谨慎一点并没有什么坏处。)一个好的开始可能是sudo ddrescue -b 4096 -c 1024 -p /dev/sda /mnt/laptop-copy.sda在终端中运行。 (-b和的值-c并不重要,但可用于提高性能。)请参阅 参考资料man 1 ddrescue来了解这些选项的说明。
  • 如果需要,可以使用诸如split.例如,您可以使用类似的split -a 2 -d -n 100 /mnt/laptop-copy.sda方法将图像分割成 100 个大小相等的块。这些可以稍后使用重新组合cat
  • 如果需要,请压缩输出文件。请注意,根据实际的磁盘内容,压缩可能不会非常有效。像这样的东西gzip -1 /mnt/laptop-copy.sda*应该足够了;数据要么是普通可压缩的,要么根本不可压缩。

要将笔记本电脑恢复到出厂软件状态,只需颠倒以下步骤即可:

  • 确保块或图像文件可用(显然)。
  • 如果适用,使用 解压缩块gunzip
  • 如果适用,使用 重新组合块cat
  • 使用类似 的方法将数据写入驱动器sudo ddrescue -b 4096 -c 1024 /mnt/laptop-copy.sda /dev/sda

答案3

您可以创建压缩图像:

gzip < /dev/hdd > hdd.img.gz

恢复:

gunzip < hdd.img.gz > /dev/hdd

如果它从未使用过,刚从工厂出来,则不应随机化可用空间,并且生成的压缩图像应该非常小。

如果可用空间为零,您还可以执行稀疏图像(在支持稀疏文件的文件系统上):

dd bs=4K conv=sparse if=/dev/hdd of=hdd.sparse.img

恢复:(恢复时不得使用稀疏)

dd bs=1M if=hdd.sparse.img of=/dev/hdd

要检查该文件实际使用了多少存储空间:

du -h hdd.sparse.img

稀疏映像的优点是它是未压缩的并且以原始大小显示(实际上没有使用零空间),因此您可以将其挂载为只读或尝试在虚拟机中启动它。如果 VM 是您的目标,您可能也会对qemu-img.


就地做会很有趣。它将涉及在 RAM 中缓存尽可能多的数据,然后创建一个不大于已缓存数据的文件系统(偏移量为 1MiB),然后用上述内容填充它,并随之增长文件系统。之后,您可以创建一个从 1MiB 开始的分区,无论其最终大小如何,都可以用作恢复分区。这是所涉及的解决方案,如果该过程被中断就会很危险。

你可以像这样盲目地这样做:

gzip --verbose < /dev/hdd > /dev/hdd

但这会做出这样的假设:压缩后的数据总是小于未压缩的数据,并且在读取数据等之前不会写入 gzip 标头。它可能有效(下面的示例),但不能保证。

# md5sum /dev/loop0
dd409e37f092ce049c396b99b32366fb  /dev/loop0
# xz --verbose < /dev/loop0 > /dev/loop0
  100 %   1,027.4 KiB / 8,192.0 KiB = 0.125                                    
# unxz --verbose < /dev/loop0 | md5sum
  --- %   1,027.4 KiB / 8,192.0 KiB = 0.125                                    
unxz: (stdin): Compressed data is corrupt
  --- %   1,027.4 KiB / 8,192.0 KiB = 0.125                                    
dd409e37f092ce049c396b99b32366fb  -

然后你仍然需要弄清楚如何处理它。在此示例中,您必须将 1028 KiB 移动到其他位置(移动 1MiB,创建此大小的分区,然后您就有恢复分区)。

也可以考虑向后执行(因此图像最终位于磁盘末尾)。

相关内容