如何使用高级 rsync 进行大型 Linux 备份

基本的 rsync 命令通常足以管理您的 Linux 备份,但一些额外的选项可以为大型备份集增加速度和功能。
175 位读者喜欢这篇文章。
Filing papers and documents

似乎很明显,备份始终是 Linux 世界中的热门话题。早在 2017 年,David Both 就为 Opensource.com 的读者提供了关于“使用 rsync 备份您的 Linux 系统”的技巧,并在今年早些时候发布了一项民意调查,询问我们“您对 Linux 中的 /home 目录的主要备份策略是什么?”在今年的另一项民意调查中,Don Watkins 问道:“您使用哪种开源备份解决方案?

我的回答是 rsync。我真的很喜欢 rsync!市场上有许多大型且复杂的工具,这些工具对于管理磁带驱动器或存储库设备可能是必要的,但一个简单的开源命令行工具可能就是您所需要的全部。

基本 rsync

我为一个全球性组织的二进制存储库系统进行管理,该组织大约有 35,000 名开发人员,拥有多个 TB 的文件。我定期移动或归档数百 GB 的数据。使用了 Rsync。这种经验让我对这个简单的工具充满信心。(所以,是的,我在家也用它来备份我的 Linux 系统。)

基本的 rsync 命令很简单。

rsync -av SRC DST

实际上,任何教程中教授的 rsync 命令在大多数一般情况下都可以正常工作。但是,假设我们需要备份非常大量的数据。例如,一个包含 2,000 个子目录的目录,每个子目录都包含 50GB 到 700GB 的数据。在此目录上运行 rsync 可能会花费大量时间,特别是如果您使用的是校验和选项(我更喜欢该选项)。

如果我们尝试同步大量数据或跨慢速网络连接进行同步,性能可能会受到影响。让我向您展示我使用的一些方法,以确保良好的性能和可靠性。

高级 rsync

rsync 运行时出现的第一行之一是:“发送增量文件列表”。如果您搜索此行,您会看到许多问题,例如:为什么需要这么长时间?或者为什么看起来挂起了?

这是一个基于此场景的示例。假设我们有一个名为 /storage 的目录,我们想要将其备份到安装在 /media/WDPassport 的外部 USB 设备。

如果我们想将 /storage 备份到 USB 外部驱动器,我们可以使用此命令

rsync -cav /storage /media/WDPassport

c 选项告诉 rsync 使用文件校验和而不是时间戳来确定已更改的文件,这通常需要更长的时间。为了分解 /storage 目录,我按子目录同步,使用 find 命令。这是一个例子

find /storage -type d -exec rsync -cav {} /media/WDPassport \;

这看起来不错,但是如果 /storage 目录中有任何文件,它们将不会被复制。那么,我们如何同步 /storage 中的文件呢?还有一个小的细微差别,某些选项会导致 rsync 同步 . 目录,它是源目录的根目录;这意味着它将同步子目录两次,而我们不希望这样。

长话短说,我最终确定的解决方案是“双增量”脚本。这使我可以分解目录,例如,将 /home 分解为各个用户的主目录,或者在您有多个大型目录(例如音乐或家庭照片)的情况下。

这是我的脚本示例

HOMES="alan"
DRIVE="/media/WDPassport"

for HOME in $HOMES; do
     cd /home/$HOME
     rsync -cdlptgov --delete . /$DRIVE/$HOME
     find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
done

第一个 rsync 命令复制源目录中找到的文件和目录。但是,它使目录为空,以便我们可以使用 find 命令遍历它们。这是通过传递 d 参数完成的,该参数告诉 rsync 不要递归目录。

-d, --dirs                  transfer directories without recursing

然后 find 命令将每个目录单独传递给 rsync。然后 Rsync 复制目录的内容。这是通过传递 r 参数完成的,该参数告诉 rsync 递归目录。

-r, --recursive             recurse into directories

这使 rsync 用于管理大小的增量文件。

大多数 rsync 教程都使用 a (或 archive)参数以方便使用。这实际上是一个复合参数。

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

我传递的其他参数将包含在 a 中;这些参数是 lptgo

-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-g, --group                 preserve group
-o, --owner                 preserve owner (super-user only)

--delete 选项告诉 rsync 删除目标上不再存在于源上的任何文件。这样,结果就是一个精确的副本。您还可以为 .Trash 目录或 MacOS 创建的 .DS_Store 文件添加排除项。

-not -name ".Trash*" -not -name ".DS_Store"

小心

最后一个建议:rsync 可能是一个破坏性命令。幸运的是,其周到的创建者提供了进行“空运行”的能力。如果我们包含 n 选项,rsync 将显示预期输出,而不会写入任何数据。

rsync -cdlptgovn --delete . /$DRIVE/$HOME

此脚本可扩展到非常大的存储大小和大型延迟或慢速链接情况。我确信仍然有改进的空间,就像总是这样。如果您有任何建议,请在评论中分享。

标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一名增值经销商,之后转行系统工程。Alan 的背景是高可用性集群应用程序。他在 Oracle Press/McGraw Hill 的《Oracle Solaris 11 系统管理》一书中撰写了“用户和组”以及“Apache 和 Web 堆栈”章节。

1 条评论

感谢分享!

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.