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


8
du -csh /

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

ОБНОВИТЬ

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

Ответы:


9

Что касается более оптимизированной версии du, я не знаю ни одной. Вещи, которые приходят на ум:

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

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


6

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

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

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

+1 Это очень полезный ответ.
— Ричард Холлоуэй

4
du -h --max-depth=1

Дает вам размеры в человеческом формате KB / MB / GB из вашего текущего рабочего каталога.


Я думаю, что они хотят знать, почему du так долго генерирует и отвечает. Я думаю, что Windows действует так же. Если вы щелкнете правой кнопкой мыши по каталогу, вам придется подождать, пока он вычислит размер каждого подкаталога. Это просто способ работы файловой системы.
— The Unix Дворник

Да, если они не запускают службу индексирования или что-то в этом роде.
— Дэвид Рикман

3

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



2

Кроме того, рассмотрите параметр -x на du - «одна файловая система», если вы делаете

du -xh / --max-depth=1 

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


2

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

df -h /


1

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

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




0

возможно

df -h

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


Но мне нужно знать общий размер под конкретным каталогом
— apache

тогда использовать нужно будет использовать du
— The Unix Janitor

Но в Windows я могу видеть общее использованное пространство без лишних затрат, почему не в Linux?
— apache

ты серьезно? NTFS не является ext3
— Дворник Unix

1
@apache, ох, есть издержки, попробуйте увидеть размер папки 20 ГБ с большим количеством файлов 10-20 МБ. Есть def накладные расходы.
— Zypher

0

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

du -csh foo bar

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.