Назад | Перейти на главную страницу

Bash: как эффективно подсчитывать файлы в подпапках на удаленном диске NFS?

Я пытаюсь выполнить пакетную операцию, которая считает файлы в заданной подпапке удаленного диска NFS.

Клиент NFS - Ubuntu 16.04 LTS. У меня очень мало информации об удаленном сервере NFS. Это NFS v3. Он анонимно смонтирован rw и его аутентификация основана на IP. Пропускная способность клиента составляет 100/10, и он может загружать около 1,1 МБ / с. Провайдер рекламирует свое хранилище резервных копий как гарантированное 1 Гбит / 1 Гбит. Полезный размер тома <4 ТБ, ожидаемое количество файлов оценивается в> 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 и добавить >> $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, а второй - только количество файлов