我有一个 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
有一些问题可能会影响速度。
网络副本与本地副本
rsync
rsync
在通过网络连接使用时效果最佳。您的旧方案 (rsync -az /src/path remote:/dst/path
)rsync
只允许传输已更改的文件部分(完全跳过文件大小和上次修改日期相同的文件)。就rsync
您的新方案而言,它没有网络 (rsync -a /src/path /dst/path
),因此它必须在跳过似乎未更改的文件和完全传输文件之间做出选择。此外,在“本地”路径之间复制时会忽略压缩,因此即使是新创建且需要传输的文件总的来说复制需要更长时间。如果您的 NAS 处理器真的很慢,那么省略
-z
(压缩) 标志可能会获得更好的吞吐量rsync
。硬链接是否仍按预期工作
您已
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
要硬链接的文件。NFS 协议调整
我已经有一段时间没有使用 NFS 了,但要注意 I/O 块大小和文件锁定。早期的 NFS 实现默认为现在低得可笑的块大小,这是由于当时可用的 LAN 速度很慢。检查它是否自动调整或是否已显著增加。通过禁用文件锁定,您可能会获得有用的速度改进。
如果您的备份是通过受信任的 LAN 复制的,您可以查看您的 NAS 是否有可以启用的rsync
守护程序 ( rsyncd
)。这将提供在客户端-服务器模式下运行的所有好处rsync
,但没有 提供的加密(以及您提到的兼容性问题)ssh
。