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

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

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

现在我已经设置了一个ZFS带文件系统的外部 USB 硬盘,并希望将家庭服务器中的所有数据备份到该 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

您找到的命令行提供了一个合理的起点。我运行 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')。(要么使用$(),要么使用反引号;而不是撇号。我更喜欢 $() 语法;首先,它是可嵌套的。)

此外,当磁盘空间不足时,请确保有一个快照修剪策略。

相关内容