如何将大的多分区硬盘备份到小硬盘?

如何将大的多分区硬盘备份到小硬盘?

为了帮助其他人学习习惯 Linux,并摆脱 Windows 版本的恶性循环,我需要在笔记本电脑上专门安装 Debian Linux GNOME。但是,为了备份计划,并且最终希望有一天出售机器,我需要实际系统分区的备份。由于三星笔记本电脑在 500GB 磁盘上有大量隐藏服务安全等分区(七个),因此数据备份面临一些挑战。

  1. 可以恢复实际状态(分区表+引导加载程序+带有实际安装和设置的Windows 8.1+所有服务分区)快速可靠——最好一步到位,没有任何并发​​症。

  2. 一次性全部备份。

  3. 如果我可以制作一个比硬盘驱动器更小的(>>500GB)映像,那就太好了——因为现在所有分区上使用的空间总计约为 125GB。

  4. 如果可能的话,如果能够探索多个分区的“图像”就好了。Macrium Reflect(在 Windows 上)然而,它以其专有格式提供了此功能 - 更喜欢开放/免费格式。

(在研究了一些好的解决方案后,问我如果最小化 Windows 分区的大小(假设为 80GB)并让剩余空间保持未分配,情况会怎样。因此,分配的分区的总大小约为125GB,然后用类似的东西克隆_all_the_allocated_pa​​rtitions_。克隆属或者DD。如果可以使用 Live Debian 8 (Jessie) 进行操作,那就太好了——多亏了 Ben Armstrong,我已经设法获得了USB 密钥上的持久系统- , 但是我对任何可靠的解决方案持开放态度。这行得通吗?

更新:在缩小 Windows 分区大小并获得建议的未分配空间后,我意识到硬盘驱动器末尾有部分服务分区。因此,未分配的空间位于已分配空间/分区之间——这可能是一个问题吗?)

答案1

我喜欢用的一个技巧是稀疏复制。请尝试以下操作:

$ dd if=/dev/zero of=some_file bs=1024 count=1 seek=1048576
$ ls -l some_file
-rw-r--r-- 1 jander jander 1073742848 Nov 20 23:38 foo
$ du some_file
12      some_file

文件大小为1GB,但使用的磁盘空间为12kB。现在,如果您cat保存此文件,您将获得 1GB 的零。疯了,对吧?诀窍在于我们只写入文件的最后 1kB,因此 Linux 仅记录只有 1kB 的实际数据,并且它位于文件中 1GB 的偏移量处。任何没有实际数据的地方都会读回零。

稀疏克隆任意磁盘:通用的、愚蠢的方法

因此,要利用它来备份文件系统,您可以用零填充文件系统上所有未使用的空间,然后使用ddconv=sparse选项来创建稀疏映像。为了让事情变得更容易,我们将立即克隆整个磁盘。

$ mount /dev/sdc1 /mnt
$ dd if=/dev/zero of=/mnt/fill_up_with_zeroes bs=1048576
$ rm /mnt/fill_up_with_zeroes
$ umount /mnt
$ mount /dev/sdc2 /mnt
$ dd if=/dev/zero of=/mnt/fill_up_with_zeroes bs=1048576
$ rm /mnt/fill_up_with_zeroes
$ umount /dev/sdc2 /mnt
$ dd if=/dev/sdc of=sdc-sparse.img bs=1048576 conv=sparse

然后,恢复:

$ dd if=sdc-sparse.img of=/dev/sdc bs=1048576

请注意,将图像写回真实硬盘时,您应该不是制作一个稀疏副本。如果这样做,您最终将损坏文件系统:任何包含零块的位置都将在其位置包含随机数据块!

最后,如果笔记本电脑是新的并且您没有从中删除任何文件,则不必费心将分区上未使用的空间清零——它们可能已经清零了。

稀疏克隆 NTFS 分区:有一个工具可以实现这一点

现在,如果您专门使用 NTFS 文件系统,可以使用一个工具:ntfsclone。它创建 NTFS 文件系统的稀疏副本。它会做得更好dd而且更快,因为它知道 NTFS 文件系统的哪些部分可以安全地忽略。

但是,在这种情况下,您必须将每个分区保存在单独的文件中。您还必须单独备份分区表——使用dd bs=512 count=63应该可以做到。

相关内容