Как увидеть использование диска с меньшими издержками в 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.