Быстрый способ узнать реальный размер каталога в linux/bsd
Какой самый быстрый способ вычисления реального размера каталога? Я так или иначе ловлю себя, нуждающуюся в этом.
Просто делаю:
# du -hs / dir
Слишком медленно Могу ли я запустить какой-либо сервис, который бы периодически вычислял размеры каталогов и кэшировал их для дальнейшего использования? (что-то вроде базы данных locate)
3 ответа
К сожалению, я не знаю ни одного, но это не должно быть слишком сложно, чтобы написать один. Однажды ночью беги
# du -a / > /var/lib/filesizes.txt.
Тогда вам просто нужен небольшой скрипт, чтобы подвести итог. Что-то вроде:
# perl -ne 'BEGIN { $total = 0 } if ($_ =~ m/(\d+)\s+\/var\/www\//) { $total+=$1;} END {print "$total\n";}' /var/lib/filesizes.txt
Если вы хотите что-то более синхронизированное, вам нужно начать писать что-то, использующее inotify, чтобы узнать, когда файловая система изменяет и обновляет базу данных, что, вероятно, будет что-то вроде bdb.
Раньше у меня была задача cron, которая перенаправляла вывод 'du -htX --max-deep = 3' (или что-то похожее, это было несколько лет назад) в текстовый файл. Затем я попросил munin создать граф rrdtool, используя этот файл в качестве входных данных. Это было странно, но сразу дало мне представление о том, сколько места было использовано в наших резервных копиях, и о тенденциях хранения для несколько более детальной иерархии каталогов.
Если у вас есть соответствующая среда рабочего стола, FileLight великолепен. Это довольно быстро и позволяет вам детализировать дерево каталогов, а затем повторно сканировать это поддерево только тогда, когда вы хотите получить обновленное представление. Вы вполне можете запустить полное сканирование один раз в день, а затем просто оставить программу открытой весь день, не обновляя ее.
Если для проверки размера каталогов используется проверка стиля nagios, вы можете сделать что-то вроде следующего
Вы можете иметь эту запись cron:
* / 5 * * * * root du -s / path / to / some / dir> /tmp/directory_usage.tmp && / bin / mv /tmp/directory_usage.tmp / tmp / directory_usage
Затем вы можете просто использовать скрипт, чтобы мгновенно получить содержимое / tmp / directory_usage.
Очевидно, что если каталог станет очень большим, возникнет состояние гонки. (то есть du-s начинает брать около 5-минутной отметки.)
Другой способ - использовать find для построения списка размеров файлов в каталоге и сохранения его в виде простого файла или файла db (если вы планируете делать много каталогов одновременно)
и последний способ - использовать find для периодического получения списка файлов, время изменения которых более позднее, чем при последнем запуске, и, по сути, "синхронизировать" размеры файлов со структурой БД... очевидно, все это зависит от того, чего вы пытаетесь достичь с помощью ваш вопрос