正确的rsync标志,用于从ext4备份到ZFS


1

我有一台带有ext4文件系统的运行Ubuntu 14.04.3 LTS的家庭服务器,我定期从各种设备向其中备份数据。

现在,我已经设置了带有ZFS文件系统的外部USB HDD,并希望将所有数据从家庭服务器备份到该USB驱动器上。并且由于我ZFS在外部驱动器上使用,所以我也想使用ZFS的快照功能。

因为我将文件从复制ext4ZFS,所以无法使用该zfs send命令。因此,我坚持rsync

我已经使用rsync了一段时间,所以我对此非常熟悉。但是,由于我将在目标文件系统上执行快照,因此我想浪费尽可能少的空间。

我碰到了这篇博客文章,它使用以下命令:

/usr/bin/rsync -axH --no-whole-file --inplace --delete / /$backup_target/root/

除了常见的标记(如-a,)外-x--delete它还使用:

  • -H (硬链接),
  • --no-whole-file (强制启用delta-xfer算法),以及
  • --inplace (更新文件夹而不是进行新备份)。

我的问题:这些标志是否足够?还是应该添加或删除一些标志?

备份流程如下:

  1. 每次使用rsync备份到同一目录
  2. 使用以下命令创建该目录的快照 zfs snapshot backup@'date +%Y%m%d'

我猜这--inplace是必须的(因为每次都备份到同一目录)。可能也是如此,--no-whole-file因为它仅复制更改的数据块。但是呢-H?我应该添加其他标志吗?


1
我在带有-aAHX --delete --numeric-ids --relative --delete-excluded一些--exclude参数的类似情况下运行rsync 。您可能希望以该参数集作为起点。-x根据文件系统的设置,使用是否合适。
CVn

一切都在同一个文件系统上,所以我想-x这没有多大意义。我也没有在fstab中使用ACL,因此-A可能也没有用。我也不需要--relative--delete-excluded如果我不包含任何内容,则会添加。另一方面,-X--numeric-ids看起来很有用,所以我可能会使用它们。您同意这一点,--inplace并且--no-whole-file也很好用吗?
alesc 2015年

1
我不知道后两者,但是我怀疑它们真的不会伤害。如果所有内容都在同一个文件系统上,那么-x可能就是您想要的(除非您要递归将备份目标目录复制到它自己中...递归地复制。)
CVn

再次感谢您的提示。那我会留下来x。我一直在使用它,但是没有意识到它会阻止递归复制:)如果您愿意,可以将所有内容放入答案中,以便为您提供奖励。
alesc 2015年

Answers:


3

您找到的命令行提供了一个合理的起点。我为此设置运行rsync进行备份(通过rsnapshot,这并不是很相关,因为您将使用ZFS快照作为历史记录;我在开始使用ZFS之前就开始使用该快照,并且一直使用它,因为它对我来说效果很好)参数:

-aAHX --delete --numeric-ids --relative --delete-excluded

加上一些--exclude我不想备份的参数。我的设置和您发现的设置之间的主要区别可能是使用了-A--acls)和--delete-excluded还从目标目录中删除了排除的文件)。

正如我们在评论中讨论,--inplace并且--no-whole-file是可能不能真正伤害你的使用情况选择。

-x--one-file-system)主要用于仅备份一个或少量文件系统的情况。(由于我在源端广泛使用ZFS文件系统,所以我改用--exclude备份目标位置。)-x告诉rsync不要递归到其命令行中列出的源以外的文件系统。一种或另一种方式,您将需要使目标位置远离rsync的源位置概念;否则,在第一次备份中,您将得到(例如)/ *复制到/ backup /中,然后下次您将得到/ *,并将其作为/ backup的一部分复制到/ backup中,依此类推。这就是我在注释中提到将递归备份目标目录复制到其自身时的意思。

使用以下命令创建该目录的快照 zfs snapshot backup@'date +%Y%m%d'

zfs snapshot backup@$(date +'%Y%m%d')显然,您想这样做。(使用$()或使用反引号;不使用撇号。我更喜欢$()语法;一方面,它是可嵌套的。)

另外,当磁盘空间不足时,请确保有适当的快照修剪策略。


我当时使用backtics插入日期,但它与本网站的标记不兼容(该标记也将backtics用于内联代码)。所以我把它们改成撇号,忘了提。但是$()看起来更好,所以我可能会用它。目前,我没有任何自动修剪策略,但是会根据需要手动删除较早的快照。是否zfs destroy backup@some-date足够释放空间,还是我需要执行其他一些操作?
alesc 2015年

zfs destroy backup@some-date如果池中只有一个文件系统,那么@alesc 就足够了。否则,请考虑使用zfs destroy backup@some-date -r。请注意,即使zfs destroy命令可能很快退出,销毁快照也可能是一项冗长的操作。检查man zpool-featuresasync_destroy,并考虑启用它在你的集合,但尚未启用。
CVn 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.