Я пытаюсь выполнить пакетную операцию, которая считает файлы в заданной подпапке удаленного диска NFS.
Клиент NFS - Ubuntu 16.04 LTS. У меня очень мало информации об удаленном сервере NFS. Это NFS v3. Он анонимно смонтирован rw и его аутентификация основана на IP. Пропускная способность клиента составляет 100/10, и он может загружать около 1,1 МБ / с. Провайдер рекламирует свое хранилище резервных копий как гарантированное 1 Гбит / 1 Гбит. Полезный размер тома <4 ТБ, ожидаемое количество файлов оценивается в> 600000 единиц.
-Редактировать # 1:
Параметры монтирования, используемые на клиенте, предложены поставщиком:
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
и добавить >> $LOGFILE
в конце find
, но похоже, что он случайным образом зависает в диапазоне от 2 до 24 часов, и когда он зависает через долгое время, список далеко не полный.
Я подумал, что могу разделить находку на куски, чтобы предотвратить эту проблему, возможно, создав список всех подпапок ...
for d in $FOLDERLIST;
do
find $d -maxdepth 0 -type f|wc -l >> $TMPLOG
done
..и затем просуммируйте все числа в $ TMPLOG, так что, возможно, при небольших операциях скрипт не зависнет.
ВОПРОС: Использую ли я для выполнения этого подсчета наиболее эффективный способ экономии ресурсов? Может, есть способ дешевле, чем find
получить количество файлов?
Я считаю, что это может быть неправильный подход к подсчету файлов, так как я видел, сколько времени занимает удаленный диск, должны быть довольно накладные расходы ... Я помню, когда у меня был некоторый опыт работы с удаленными файловыми системами, смонтированными через curlftpfs. Огромные накладные расходы, огромная задержка.
NFS должен быть намного лучше, но в данном случае это не так!
Вы можете попробовать rsync
, используя что-то похожее на:
rsync --stats -na <srcdir> /tmp/fakedir
Первые две строки вывода будут такими:
Number of files: 2000
Number of files transferred: 1900
Первое значение - это сумма записей dirs + files, а второй - только количество файлов