Как увидеть использование диска с меньшими издержками в 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» в этой новой точке монтирования. Если вам нужно больше места, размонтируйте петлевое монтирование, расширьте файл и перемонтируйте.
sysadmin1138
источник
+1 Это очень полезный ответ.
Ричард Холлоуэй
4
du -h --max-depth=1

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

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

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

Дэн Андреатта
источник
2

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

Приостановлено до дальнейшего уведомления.
источник
2

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

du -xh / --max-depth=1 

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

Джейсон
источник
2

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

df -h /


источник
1

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

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

xenny
источник
0

DF-H добьется цели

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

дф -х /

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

Уникс Дворник
источник
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
mpez0
источник
0

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

Мирча Вуцовичи
источник