如何使用 rsync 的高级用法进行大型备份 | Linux 中国

2019 年 5 月 18 日 Linux中国
基础的 rsync 命令通常足够来管理你的 Linux 备份,但是额外的选项使大型备份集更快、更强大。
-- Alan Formy-duval

基础的 rsync 命令通常足够来管理你的 Linux 备份,但是额外的选项使大型备份集更快、更强大。

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

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

rsync 基础

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

基础的 rsync 命令很简单。

   
   
     
  1. rsync -av 源目录 目的地目录

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

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

rsync 高级用法

rsync 运行时出现的第一行是:“正在发送增量文件列表。” 如果你在网上搜索这一行,你将看到很多类似的问题:为什么它一直运行,或者为什么它似乎挂起了。

这里是一个基于这个场景的例子。假设我们有一个 /storage 的目录,我们想要备份到一个外部 USB 磁盘,我们可以使用下面的命令:

   
   
     
  1. rsync -cav /storage /media/WDPassport

-c 选项告诉 rsync 使用文件校验和而不是时间戳来决定改变的文件,这通常消耗的时间更久。为了分解 /storage 目录,我通过子目录同步,使用 find 命令。这是一个例子:

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

这看起来可以,但是如果 /storage 目录有任何文件,它们将被跳过。因此,我们如何同步 /storage 目录中的文件呢?同样有一个细微的差别是这些选项将造成 rsync 会同步 .目录,该目录是源目录自身;这意味着它会同步子目录两次,这并不是我们想要的。

长话短说,我的解决方案是一个 “双-递增”脚本。这允许我分解一个目录,例如,当你的家目录有多个大的目录,例如音乐或者家庭照片时,分解 /home 目录为单个的用户家目录。

这是我的脚本的一个例子:

   
   
     
  1. HOMES="alan"
  2. DRIVE="/media/WDPassport"
  3. for HOME in $HOMES; do
  4. cd /home/$HOME
  5. rsync -cdlptgov --delete . /$DRIVE/$HOME
  6. find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
  7. done

第一个 rsync 命令拷贝它在源目录中发现的文件和目录。然而,它将目录留着不处理,因此我们能够通过 find 命令迭代它们。这通过传递 -d 参数来完成,它告诉 rsync 不要递归目录。

   
   
     
  1. -d, --dirs 传输目录而不递归

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

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

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

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

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

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

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

--delete 选项告诉 rsync 删除目的地目录中所有在源目录不存在的任意文件。这种方式,运行的结果仅仅是复制。你同样可以排除 .Trash 目录或者 MacOS 创建的 .DS_Store 文件。

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

注意

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

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

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


via: https://opensource.com/article/19/5/advanced-rsync

作者:Alan Formy-Duval 选题:lujun9972 译者:warmfrog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


登录查看更多
0

相关内容

Linux 是一系列类 Unix 计算机操作系统的统称。该操作系统的核心为 Linux 内核。Linux 操作系统也是软件和开放源代码发展中最著名的例子之一。
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
19+阅读 · 2019年10月28日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
如何分分钟构建强大又好用的深度学习环境?
机器之心
3+阅读 · 2019年3月17日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Arxiv
35+阅读 · 2019年11月7日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Arxiv
24+阅读 · 2018年10月24日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
10+阅读 · 2018年2月4日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
76+阅读 · 2020年6月22日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【高能所】如何做好⼀份学术报告& 简单介绍LaTeX 的使用
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
相关资讯
如何使用自然语言工具包(NLTK)在Python3中执行情感分析
Python程序员
19+阅读 · 2019年10月28日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
如何分分钟构建强大又好用的深度学习环境?
机器之心
3+阅读 · 2019年3月17日
如何运用Python建一个聊天机器人?
七月在线实验室
17+阅读 · 2018年1月23日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
相关论文
Arxiv
35+阅读 · 2019年11月7日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Arxiv
24+阅读 · 2018年10月24日
Arxiv
5+阅读 · 2018年5月1日
Arxiv
10+阅读 · 2018年2月4日
Top
微信扫码咨询专知VIP会员