rsync备份对路径的要求
显然,备份一直是Linux世界中的热门话题。 早在2017年,David Both都向Opensource.com读者提供了有关“ 使用rsync备份Linux系统 ”的提示,并于今年早些时候发表了一项民意调查,询问我们“ Linux的/ home目录的主要备份策略是什么?在今年的另一项民意测验中,唐·沃特金斯问:“ 您使用哪种开源备份解决方案? ”
我的回应是rsync 。 我真的很喜欢rsync! 市场上有很多大型且复杂的工具对于管理磁带驱动器或存储库设备可能是必需的,但是您可能只需要一个简单的开源命令行工具。
基本的rsync
我为一个全球组织管理二进制存储库系统,该组织大约有35,000个开发人员,文件大小为TB。 我经常一次移动或存档数百GB的数据。 使用了Rsync。 这种经验使我对这个简单的工具充满信心。 (因此,是的,我在家中使用它来备份我的Linux系统。)
基本的rsync命令很简单。
rsync -av SRC DST
实际上,任何教程中讲授的rsync命令在大多数一般情况下都可以正常工作。 但是,假设我们需要备份大量数据。 类似于具有2,000个子目录的目录,每个子目录可保存50GB至700GB的数据。 在此目录上运行rsync可能会花费大量时间,特别是如果您使用的是我喜欢的checksum选项。
如果我们尝试同步大量数据或通过慢速网络连接进行同步,则性能可能会受到影响。 让我向您展示一些我用来确保良好性能和可靠性的方法。
先进的rsync
这是基于这种情况的示例。 假设我们有一个名为/ storage的目录,我们想要备份到/ media / WDPassport上安装的外部USB设备。
如果要备份/存储到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中 ; 这些是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
该脚本可扩展至非常大的存储大小以及较大的延迟或慢速链接情况。 我敢肯定,一如既往,还有改进的空间。 如果您有建议,请在评论中分享。
rsync备份对路径的要求