基本的rsync命令通常足以管理您的Linux备份,但是一些额外的选项可以为大型备份集增加速度和功能。
显然,备份在Linux世界中一直是一个热门话题。早在2017年,David就向Opensource.com的读者提供了关于“使用rsync备份你的Linux系统”的建议,今年早些时候,他发表了一份民意调查,询问我们“你对Linux /home目录的主要备份策略是什么?”在今年的另一项民意调查中,Don Watkins问道:“你使用的是哪种开源备份解决方案?”
我的回答是rsync。我真的很喜欢rsync!市场上有许多大型和复杂的工具可能是管理磁带驱动器或存储库设备所必需的,但是您可能只需要一个简单的开源命令行工具。
基础rsync命令:
我为一个全球性组织管理了二进制存储库系统,该组织大约有35,000名开发人员,拥有多个TB的文件。我经常一次移动或存档数百GB的数据。使用了Rsync。这种经历让我对这个简单的工具充满信心。(所以,是的,我在家里用它来备份我的Linux系统。)
实际上,任何教程中教授的rsync命令在大多数一般情况下都可以正常工作。然而,假设我们需要备份大量的数据。类似于一个包含2000个子目录的目录,每个目录包含50GB到700GB的数据。在这个目录上运行rsync可能会花费大量时间,特别是如果您使用checksum选项(我更喜欢这个选项)。
我们试图同步大量数据或跨慢速网络连接同步,性能可能会受到影响。让我向您展示一些我用来确保良好性能和可靠性的方法。
进阶rsync命令:
rsync运行时出现的第一行是:“发送增量文件列表”。如果你搜索这一行,你会发现很多问题,比如:为什么要花很长时间?或者为什么会挂掉?
下面是基于此场景的一个示例。假设我们有一个名为/storage的目录,希望备份到安装在/media/WDPassport上的外部USB设备。
如果我们想备份/存储到USB外置驱动器,我们可以使用以下命令:
rsync -cav /storage/media/WDPassport
c选项告诉rsync使用文件校验和而不是时间戳来确定更改的文件,这通常需要更长的时间。为了分解/storage目录,我使用find命令通过子目录进行同步。这是一个例子:
find /storage -type d -execrsync -cav {} /media/WDPassport ;
这看起来不错,但如果/ storage目录中有任何文件,则不会复制它们。那么,我们如何在/ storage中同步文件?还有一个小细微差别,某些选项会导致rsync同步。directory,源目录的根目录; 这意味着它将同步子目录两次,我们不希望这样。
简而言之,我解决的解决方案是“双增量”脚本。这允许我分解一个目录,例如,打破/ 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不要递归目录:
然后,find命令将每个目录单独传递给rsync。然后Rsync复制目录的内容。这是通过传递r参数来完成的,该参数告诉rsync递归目录:
这将使rsync使用的增量文件保持在可管理的大小。
为了方便起见,大多数rsync教程使用a(或archive)参数。这实际上是一个复合论点。
-a, --archive 存档模式equals-rlptgoD (no -H,-A,-X)
我传递的其他参数将包含在a中; 那些是l,p,t,g和o。
-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
原文地址:https://opensource.com/article/19/5/advanced-rsync