如何使用 rsync 备份 Linux 系统的一些介绍

备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问你们,在 Linux 中你的 /home 目录的主要备份策略是什么,在今年的另外一个问卷调查中,Don Watkins 问到,你使用哪一种开源备份解决方案。linux

个人回复是 rsync。我真的很是喜欢 rsync!市场上有大量大而复杂的工具,对于管理磁带机或者存储库设备,这些多是必要的,可是可能你须要的只是一个简单的开源命令行工具。网络

rsync 基础工具

我为一个大概拥有 35,000 开发者并有着几十 TB 文件的全球性机构管理二进制仓库。我常常一次移动或者归档上百 GB 的数据。使用的是 rsync。这种经历使我对这个简单的工具充满信心。(因此,是的,我在家使用它来备份个人 Linux 系统)性能

基础的 rsync 命令很简单。递归

rsync -av 源目录 目的地目录

实际上,在各类指南中教的 rsync 命令在大多数通用状况下都运行的很好。然而,假设咱们须要备份大量的数据。例如包含 2,000 个子目录的目录,每一个包含 50GB 到 700GB 的数据。在这个目录运行 rsync 可能须要大量时间,尤为是当你使用校验选项时(我倾向使用)。开发

当咱们试图同步大量数据或者经过慢的网络链接时,可能遇到性能问题。让我给你展现一些我使用的方法来确保好的性能和可靠性。get

rsync 高级用法同步

rsync 运行时出现的第一行是:“正在发送增量文件列表。” 若是你在网上搜索这一行,你将看到不少相似的问题:为何它一直运行,或者为何它彷佛挂起了。基础

这里是一个基于这个场景的例子。假设咱们有一个 /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 传输目录而不递归

而后 find 命令传递每一个目录来单独运行 rsync。以后 rsync 拷贝目录的内容。这经过传递 -r 参数来完成,它告诉 rsync 要递归目录。

-r, --recursive 递归进入目录

这使得 rsync 使用的增量文件保持在一个合理的大小。

大多数 rsync 指南为了简便使用 -a (或者 archive) 参数。这实际是一个复合参数。

-a, --archive 归档模式;等价于 -rlptgoD(没有 -H,-A,-X)

我传递的其余参数包含在 a 中;这些是 -l、-p、-t、-g和 -o。

-l, --links 复制符号连接做为符号连接
-p, --perms 保留权限
-t, --times 保留修改时间
-g, --group 保留组
-o, --owner 保留拥有者(只适用于超级管理员)

--delete 选项告诉 rsync 删除目的地目录中全部在源目录不存在的任意文件。这种方式,运行的结果仅仅是复制。你一样能够排除 .Trash 目录或者 MacOS 建立的 .DS_Store 文件。

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

注意

最后一条建议: rsync 能够是破坏性的命令。幸运的是,它的睿智的创造者提供了 “空运行” 的能力。若是咱们加入 n 选项,rsync 会显示预期的输出但不写任何数据。

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

这个脚本适用于很是大的存储规模和高延迟或者慢连接的状况。一如既往,我确信仍有提高的空间。若是你有任何建议,请在下方评论中分享。

相关文章
相关标签/搜索