我正在尝试批量执行一个操作,该操作计数远程 NFS 驱动器的给定子文件夹中的文件数量。
NFS 客户端是 Ubuntu 16.04 LTS。我对远程 NFS 服务器的信息很少。它是 NFS v3。它是匿名 rw 安装的,其身份验证基于 IP。客户端的带宽为 100/10,上传速度约为 1.1 MB/s。提供商宣传其备份存储保证 1Gbit/1Gbit。卷的可用大小为 <4TB,预计文件数量估计为 >600000 个单位。
--编辑#1:
该存储宣传的保证 IOPs 为 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 在这方面应该做得更好,但在这种情况下似乎并非如此!
答案1
您可以尝试rsync
使用类似如下的方法:
rsync --stats -na <srcdir> /tmp/fakedir
输出的前两行将如下所示:
Number of files: 2000
Number of files transferred: 1900
第一个值是目录+文件条目的总和,而第二个仅显示文件数量