使用 DD 将系统备份到外部硬盘

使用 DD 将系统备份到外部硬盘

我想备份我的整个系统。我想知道 dd 命令是否是一个好的选择。

dd if=/dev/sda of=/dev/sdb

例如:/dev/sda 是我的系统分区(如果该信息很重要,则分区位于 ssd 上),/dev/sdb 是我的外部 usb hdd。是否可以将整个系统克隆到外部 hdd 上的特定目录中?像这样:

dd if=/dev/sda of=/dev/sdb/directory

我想到编写自己的备份脚本的可能性,该脚本使用“dd”命令每周备份我的系统。除此之外,我想加密我的备份目录。有什么好的选择可以做到这一点?(例如,我想到 EncFS)。

答案1

不,这是一个糟糕的选择。 dd是一个愚蠢的动物。它对文件系统一无所知,所以它会盲目地复制每一个扇区,无论是已使用的还是空闲的。这会导致备份映像非常大。您也无法将其还原到甚至更小的驱动器上,即使它有足够的空闲空间。

像 partimage 和 ghost4linux 这样的工具(内置工具e2image在 14.04 中获得了此功能)至少足够智能,可以跳过未使用的空间。像tar和 这样的传统备份工具dump要好得多,因为它们提供了在需要时恢复到稍小的磁盘的灵活性,或者只恢复您意外删除的文件子集。它们还可以只对您更改过的文件进行增量备份,而不是每周对整个驱动器进行另一次完整映像。您可能还想研究一下rsnapshot哪些工具可以为您提供每周可浏览的每周备份,而不会占用完整单独副本的磁盘空间。

如果您想加密备份,您可以使用gpg加密文件。例如:tar cz / --one-file-system | gpg -c > /media/sdb/backup.tar.gz.gpg

有关详细信息,请参阅http://wiki.ubuntu.com/BackupYourSystem

答案2

您可以这样做,有很多方法,取决于您的喜好。

如果您对磁盘进行 dd 复制(sda 本身是完整磁盘,而不是单个分区),则可以将其复制到备份磁盘上的文件(而不是目录)。优点是您将包含引导扇区。缺点是,您必须卸载正在使用的分区,实际上这意味着您必须从不同的设备启动。此外,这是一个耗时的复制过程,因为它每次都会再次复制所有内容。

更常用的是执行文件复制的备份工具,它们可以在分区挂载时使用(必须),并且它们只会在下次运行时复制更改的文件。缺点是,您必须先使系统可启动,然后才能完全恢复。最常用的是 rsync,但也有许多专用的备份程序。

Encfs 可用于加密,但我不会用它来加密磁盘映像,因为文件中某处的损坏可能会导致映像无法解密。事实上,我更愿意使用加密存档。

我刚刚看了很多结合备份的加密方法在这篇文章中,也许你感兴趣。

答案3

另一个解决方案:

尝试运行crontab -e并添加如下内容:(详情见此处)

#
# some comments are here
#
#

# rsync archive every day at midnight change /dev/null to a file name if you want to see the logs
0 0 * * * rsync –avu /path/to/source ~/rsync/daily > /dev/null

# rsync every sunday at 4am change /dev/null to a file name if you want to see the logs
0 4 * * 0 rsync –avu ~/rsync/daily ~/rsync/weekly > /dev/null

# rsync every 1st of the month use gzip to use less space change /dev/null to a file name if you want to see the logs
0 0 1 * * tar -cvzf ~/rsync/monthly/monthly_$(date +%m%d%Y).tar.gz ~/rsync/daily/

要加密文件夹,你可以执行以下操作:

tar -cvz /path/to/directory | openssl des3 -salt > name_of_encrypted.tar.gz

解密:

cat name_of_encrypted.tar.gz | openssl des3 -d -salt | tar -xvz new_name_of_directory

相关内容