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

Быстрый способ узнать реальный размер каталога в linux / bsd

Каков самый быстрый способ вычисления реального размера каталога? Я как-то ловлю себя на том, что мне это очень нужно.

Просто делаю:

# du -hs /dir

Слишком медленно. Могу ли я запустить какую-нибудь службу, которая будет периодически вычислять размеры каталогов и кэшировать их для дальнейшего использования? (что-то вроде базы данных местоположения)

К сожалению, я не знаю ни одного, но написать его не составит большого труда. Раз в ночь беги

# 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-depth = 3' (или что-то подобное, прошло несколько лет) в текстовый файл. Затем я попросил munin создать график rrdtool, используя файл в качестве входных данных. Это было хитроумно, но это дало мне общее представление о том, сколько места занимают наши резервные копии, и о тенденциях хранения для несколько детализированной иерархии каталогов.

Если у вас есть среда рабочего стола на рассматриваемой коробке, FileLight является удивительным. Это довольно быстро и позволяет вам детализировать дерево каталогов, а затем повторно сканировать это поддерево только тогда, когда вы хотите получить обновленное представление. Вы можете запускать полное сканирование один раз в день, а затем просто оставлять программу открытой на весь день, даже не обновляя ее.

если это нужно для проверки стиля nagios на размер каталогов, вы можете сделать что-то вроде следующего

У вас может быть такая запись cron:

* / 5 * * * * корень du -s / путь / к / некоторому / каталогу> /tmp/directory_usage.tmp && / bin / mv /tmp/directory_usage.tmp / tmp / directory_usage

Затем вы можете просто использовать сценарий для мгновенного получения содержимого / tmp / directory_usage.

Очевидно, что возникнет состояние гонки, если каталог станет очень большим. (т.е. du -s начинает приближаться к 5-минутной отметке.)

Другой путь - использовать find для создания списка размеров файлов в каталоге и сохранения его либо в плоском файле, либо в файле db (если вы планируете одновременно делать много каталогов)

и последний способ - использовать find для периодического получения списка файлов, время изменения которых является более поздним, чем последний запуск, и по существу `` синхронизировать '' размеры файлов со структурой db ... очевидно, все это зависит от того, чего вы пытаетесь достичь с помощью ваш вопрос