我正在尝试批处理计算远程 NFS 驱动器的给定子文件夹中的文件的操作。
NFS 客户端是 Ubuntu 16.04 LTS。我在远程 NFS 服务器上的信息很少。这是一个 NFS v3。它是匿名 rw 安装的,并且它的身份验证是基于 IP 的。客户端的带宽是 100/10,它可以上传大约 1.1 MB/s。提供商宣传其备份存储为 1Gbit/1Gbit 保证。卷的可用大小为 <4TB,预计文件数估计为 >600000 个单位。
--编辑#1:
存储宣传的保证 IOP 为 2000,但测试远程 fs 的结果为 7-800iops。
客户端使用的挂载选项由提供者建议:
rsize=8192,wsize=8192,timeo=14,intr
为了执行计数,我选择了这个脚本:
#!/bin/bash
if [[ $# -eq 0 ]] ; then
echo 'no folder supplied, use $0 /path/to/folder'
exit 0
else
COUNT=$(find $1 -type f|wc -l)
echo $1 contains $COUNT files.
fi
exit 0
我在家里试了一下,明显很快,输出:
/home/user contains 12 files.
当我尝试从远程 NFS 驱动器获取此类统计信息时,脚本“永远”坐下。
--编辑#2:
我尝试在末尾删除|wc -l
并添加,但看起来它在 2 到 24 小时的时间范围内随机挂起,当它在很长一段时间后挂起时,列表远未完成。>> $LOGFILE
find
我认为我可以将查找分成几块,以防止这个问题,也许会产生所有子文件夹的列表......
for d in $FOLDERLIST;
do
find $d -maxdepth 0 -type f|wc -l >> $TMPLOG
done
..然后将 $TMPLOG 中的所有数字相加,因此在较小的操作中脚本可能不会挂起。
问题:我是否正在使用尽可能节省资源的最佳方式来执行此计数?也许有比find
获取文件计数更便宜的方法?
我正在考虑这可能是计算文件的错误方法,因为我看到远程驱动器需要多长时间应该有相当大的开销......我记得当我有一些通过 curlftpfs 挂载的远程文件系统的经验时。巨大的开销,巨大的延迟。
NFS 在这方面应该会好很多,但在这种情况下似乎不是!
您可以尝试使用
rsync
,使用类似于:输出的前两行将如下所示:
第一个值是 dirs+files 条目的总和,而第二个值仅是文件数