是什么让 rsync 的一侧如此忙碌?

是什么让 rsync 的一侧如此忙碌?

我的 LAN 上有一台 Debian 机器,作为其他机器的备份服务器。它有四个 HDD 组合成一个软件 RAID 5 md 设备,在该设备上有一个 LVM,在该 btrfs 上。备份是使用 rsync 进行的,对于大型文件系统需要一个多小时。很长一段时间我都认为我对此无能为力。

然而,最近我注意到硬盘活动非常传输两端不同。虽然发送端运行 Gentoo 并且主要使用 ext4,几乎没有任何磁盘 IO,但接收端却一直很忙。由于大多数数据在传输之间不会发生变化,因此我认为元数据读取应该构成大部分数据。但如果在 btrfs 中读取 inode 比在 ext4 中读取 inode 需要更多工作,我会感到非常惊讶。

iotop确认接收端的磁盘读取速度约为 1-4 MB/s,而发送端仅偶尔出现 0.5 MB/s 的突发。

我的问题是,有人能解释一下这是怎么回事吗?最好能给出一些如何解决这个问题的指示。

也许我可以使用一些 btrfs 调整标志,或者类似的东西。我需要在备份服务器上有一个具有快照功能的 FS,而我尝试使用 FreeBSD 和 ZFS 很快就会导致 FS 不一致,所以目前我看不到 btrfs 的替代方案。因此,告诉我使用 ext4 或 zfs 的答案可能会收到赞成票,但没有复选标记。


根据要求使用 Rsync 选项西杰姆:

--rsync-path='rsync --fake-super'
--archive               # -rlptgoD
--hard-links            # detect and preserve these
--acls
--xattrs
--sparse
--noatime               # based on patch from samba #7249c1
--delete
--delete-delay
--fuzzy
--human-readable        # size suffixes, base 1000
--stats

以及一堆-f省略某些文件的规则。


btrfs 的挂载选项由mountas报告

rw,nosuid,noexec,noatime,nospace_cache

特别是,这包括noatime标志,因此不应涉及任何写入,除非某些文件实际上存在差异。我添加此信息是为了响应回答经过凯尔·琼斯

答案1

一种可能的答案是远程文件系统默认使用“atime”选项挂载。远程 rsync 访问的所有内容的访问时间写入以及 RAID 5 所遭受的写入损失(计算奇偶校验意味着在写入其中一个磁盘之前读取所有 RAID 磁盘)可以解释远程端的 I/O 放大。

如果我是对的,您可以通过使用“noatime”选项安装远程文件系统来加快速度。

答案2

我怀疑 --fake-super 选项。这告诉 rsync 将所有元数据信息存储在每个文件的扩展属性中。我怀疑访问这些属性很慢。尝试使用 rsync 测试运行到不带 --fake-super 的根目录。您无法重复使用相同的备份,因为属性不匹配。

答案3

--xattrs/-X在上游提交(尚未发布)被纳入 Debian 的 rsync 3.1.2-2 之前非常慢:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799143#20

https://bugzilla.samba.org/show_bug.cgi?id=5324

相关内容