通过 NFS 导出执行“cp -al”的性能不佳

通过 NFS 导出执行“cp -al”的性能不佳

我正在实施 WD My Book Live Duo 的备份。此设备配置了软件 RAID0。备份源目录是设备的根目录,目标是同一文件系统内的目录(注意避免递归复制备份文件本身)。备份文件有一层加密(源文件是明文),这需要比 NAS 能够提供的更多的计算能力。因此,耗费 CPU 的操作是在同一网络中的服务器中执行的。

NAS 通过 NFS 导出两个目录。一个是只读的,包含整个文件系统(它是备份源),另一个是读写的(它是备份根)。配置详细信息在文章末尾说明。

备份服务器encfs用作加密层并rsnapshot自行执行备份。

问题是:备份的第一步是将cp -al最后的备份目录复制到新目录中,大约需要两个小时才能完成。

我目前已经在NFS服务器端进行了以下测试:

  • cp -al如果直接在 NAS 上执行相同的操作,则需要五分钟
  • dd /dev/zero ~/test.tmp显示吞吐量非常接近 100 MiB/s
  • top显示 CPU 消耗较低。然而,平均负载较高(~4)
  • iperf传输速率为 1.000 Mpbs,因此网络链路以预期的最大容量运行
  • vmstat 1显示非常高(等待 IO)值(~80-90%)
  • 将 MTU 设置为 9000(已测试ping -M do mybackup)似乎没有任何效果
  • 导出async似乎没有任何效果

在NFS客户端进行了以下测试:

  • dd /dev/zero /e/test.tmp(加密)显示的吞吐量与dd /dev/zero /b(未加密)相同。因此加密层似乎不是问题。传输速率约为 30 MiB/s,这相当低,很难。使用 SMB 执行此测试会产生类似的结果
  • top显示 CPU 消耗低。平均负载低于 2(服务器有 2 个核心)
  • vmstat 1显示系统几乎处于空闲状态
  • 设置tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768挂载选项似乎没有任何效果

配置文件

NFS 服务器

# /etc/exports

# 'mybackup' is the name of the backup server
/               mybackup(ro,sync,no_subtree_check,no_root_squash,crossmnt)

# This export has to be explicitly declared to enable clients to access /DataVolume/b
/DataVolume     mybackup(ro,async,no_subtree_check,no_root_squash)

# This is the backup root.
/DataVolume/b   mybackup(rw,async,no_subtree_check,no_root_squash)

NFS 客户端

# /etc/fstab

# 'ewnas' is the name of the NAS
ewnas:/                 /r      nfs     auto,noatime,tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768    0       0
ewnas:/DataVolume/b     /b      nfs     auto,noatime,tcp,hard,intr,nfsvers=3,rsize=32768,wsize=32768    0       0

我已经为此困扰好几天了。任何贡献都将不胜感激。

提前致谢,

吉列尔莫

答案1

您是否尝试过 rsync 来查看性能是否更好?

rsync -Paz --exclude-from 'rsync-exclude.txt' fromssh@server:path tossh@server:path

参考讨论

相关内容