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

Как увидеть использование диска с меньшими накладными расходами в bash?

du -csh /

Вычисленное выше займет огромное количество времени, есть ли способ увидеть менее точный результат с меньшими накладными расходами?

ОБНОВИТЬ

Что я хочу знать, так это общий размер в определенном каталоге.

Насколько более оптимизированная версия du, Я не знаю ни одного. На ум приходят:

  1. Храните эти файлы на оперативном диске или что-то в этом роде.
  2. Если только одно приложение записывает в эту папку и ее подпапку, пусть это приложение будет отслеживать.
  3. Если все эти файлы примерно одинакового размера и равномерно распределены по каталогам, вы можете просто подсчитать количество подкаталогов и умножить его на файл для каждого каталога, а затем размер для каждого файла. Вы можете сделать это быстро, просто используя количество жестких ссылок для каталога, если только у вас есть только одна глубокая структура каталога (stat -c '%h') - 2.
  4. Сделайте все эти файлы принадлежащими конкретному пользователю и используйте механизм квот.
  5. Используйте выделенный раздел и просто используйте df. Виртуальная файловая система (файл в файловой системе, смонтированный через loopback) также может делать это.

Из всего этого, параметры квот и выделенных разделов, вероятно, самые простые и эффективные.

Проблема в том, что 'du' должен перечислить каждый объект в поддереве. Это операция с интенсивным использованием метаданных и требует времени для большинства файловых систем Linux. На ум приходят некоторые файловые системы, например NTFS и Novell NSS, которые могут отслеживать размеры каталогов, как это в метаданных что значительно ускоряет эту операцию. Как правило, если ваша файловая система поддерживает какие-либо квоты каталогов, она должна отслеживать эти данные внутри для обеспечения соблюдения, каждое изменение размера реплицируется вверх по дереву каталогов в точку квоты (NTFS) или в каждый каталог (NSS ), когда это происходит, поэтому получить размер дерева каталогов очень быстро.

К сожалению, не существует способа заставить du работать быстрее, только обходные пути.

  • Запустите 'du' в пакетном режиме и работайте с неживыми результатами
  • Создайте новую файловую систему и используйте вместо нее df
  • Создайте большой файл, который будет содержать ваш каталог, смонтируйте его, отформатируйте и используйте вместо этого df в этой новой точке монтирования. Если вам нужно больше места, размонтируйте петлевое монтирование, расширьте файл и перемонтируйте.
du -h --max-depth=1

Предоставляет вам размеры в человеческом формате КБ / МБ / ГБ из текущего рабочего каталога.

С помощью стандартных инструментов вы должны получать размер каждого файла в каталоге каждый раз, когда хотите узнать общий размер. Возможно, более эффективный способ сделать это - иметь «монитор размера каталога», который отслеживает текущий размер каталога. Такой вещи не существует (насколько я знаю), но вы можете реализовать ее с помощью inotify. Возможно, не с bash (и inotify-tools), но вы, вероятно, можете использовать, например, python и pyinotify.

Вы можете найти gt5 быть полезным. В нем хранятся самые последние du информации и сравнивает ее при следующем запуске. Он отображает свой вывод с помощью браузера в текстовом режиме, такого как links.

Также рассмотрите параметр -x в du - "одна файловая система", если вы делаете

du -xh / --max-depth=1 

Вы увидите только сводку использования диска в корневом разделе, и он не будет пытаться добавить / proc, / sys, / dev и так далее ...

если вы хотите использовать диск только для корневой файловой системы, тогда

df -h /

Нет. Могли бы вы периодически выполнять двойную конвейерную передачу в текстовый файл в задании cron, настроенном на выполнение в ночное время, чтобы у вас не сразу были доступны актуальные данные?

Обратите внимание, что измерение дискового пространства, используемого папкой, содержащей большое количество файлов в Windows, также занимает некоторое время.

df -h сделает свое дело

df -kh /

это покажет вам объем используемого и доступного дискового пространства.

Возможно

df -h

лишнего текста, так как короткого краткого ответа недостаточно, чтобы serverfault решил, что я человек.

Чтобы найти место только под этим каталогом, укажите его вместо /. Чтобы найти место под каталогами foo и bar, перечислите оба:

du -csh foo bar

Вы должны использовать dnotify для расчета использования диска, если файловая система не меняется часто.