rsync 在导出/挂载文件夹时速度极慢,而 ssh 则快得多

rsync 在导出/挂载文件夹时速度极慢,而 ssh 则快得多

我有一个 NAS 设备,用于备份我所有的家庭系统,目前它被设置为使用 ssh,代码改编自这里。我的代码的简短版本是:

NAS=192.168.1.143                         #IP address or resolvable hostname of NAS
SrcDirs="/Data"
DestDir=/nfs/Public/backup   #Backup destination on NAS
Date=`date "+%Y-%m-%dT%H_%M_%S"`

nice rsync -azv \
--link-dest=$DestDir/current \
--delete \
--delete-excluded \
--exclude=Temp \
$SrcDirs root@$NAS:$DestDir/backup-$Date

长期以来,这种方法一直很有效,但 NAS 上的 ssh 实在太旧了,我无法让它与较新的系统配合使用。为了解决 ssh 问题,我导出了 NAS 上的备份文件夹并将其安装在客户系统上:

来自 NAS 上的 /etc/exports:

/nfs/Public *(rw,all_squash,sync,anonuid=500,anongid=1000)

从主系统上的 /etc/fstab:

192.168.1.143:/nfs                /nfs                    nfs     defaults        0 0

然后,我将上面的备份脚本指向已挂载的文件夹,而不是通过 ssh。很简单,但现在 rsync 慢得离谱。我的导出和挂载设置方式是否会导致 rsync 速度慢得像爬行一样?

答案1

有一些问题可能会影响速度。

  1. 网络副本与本地副本rsync

    rsync在通过网络连接使用时效果最佳。您的旧方案 ( rsync -az /src/path remote:/dst/path)rsync只允许传输已更改的文件部分(完全跳过文件大小和上次修改日期相同的文件)。就rsync您的新方案而言,它没有网络 ( rsync -a /src/path /dst/path),因此它必须在跳过似乎未更改的文件和完全传输文件之间做出选择。此外,在“本地”路径之间复制时会忽略压缩,因此即使是新创建且需要传输的文件总的来说复制需要更长时间。

    如果您的 NAS 处理器真的很慢,那么省略-z(压缩) 标志可能会获得更好的吞吐量rsync

  2. 硬链接是否仍按预期工作

    您已rsync进行优化,尝试将未更改的文件硬链接到目录树中。值得计算硬链接文件的数量与“唯一”文件的数量,以确保其rsync符合您的预期

    # On the NAS
    find /dst/path -type f | wc -l              # Total number of files backed up
    find /dst/path -type f -links +1 | wc -l    # Should be a significant percentage of total
    

    如果您发现find … -links +1变体不是总文件的大多数,那么要么您确实修改了很多,不可避免地rsync会花费很长时间,要么该工具无法找到/dst/current要硬链接的文件。

  3. NFS 协议调整

    我已经有一段时间没有使用 NFS 了,但要注意 I/O 块大小和文件锁定。早期的 NFS 实现默认为现在低得可笑的块大小,这是由于当时可用的 LAN 速度很慢。检查它是否自动调整或是否已显著增加。通过禁用文件锁定,您可能会获得有用的速度改进。

如果您的备份是通过受信任的 LAN 复制的,您可以查看您的 NAS 是否有可以启用的rsync守护程序 ( rsyncd)。这将提供在客户端-服务器模式下运行的所有好处rsync,但没有 提供的加密(以及您提到的兼容性问题)ssh

相关内容