Помощь

Анализ места на диске: ncdu, du

При работе с сервером важно следить за использованием дискового пространства. Если диск заполнен, это может вызвать ошибки в работе VDS, такие как ошибка 502, удаление файлов при редактировании и повреждение базы данных. Чтобы избежать таких проблем, важно регулярно проверять использование дискового пространства, удалять ненужные файлы и при необходимости расширять объем диска.

Для анализа использования дискового пространства на сервере можно использовать утилиты ncdu и du. Эти инструменты позволяют легко определить, какие файлы и директории занимают больше всего места на диске. В этой статье мы рассмотрим утилиту ncdu.

ncdu

Утилита ncdu представляет собой удобное средство для анализа использования дискового пространства. Её псевдографический интерфейс делает работу с ней простой и интуитивно понятной.

ncdu не предустановлена на всех дистрибутивах Unix, но её можно легко установить командами:

# Для Debian / Ubuntu:
apt install ncdu

# Для CentOS:
yum install ncdu

Если диск полностью заполнен и установка ncdu невозможна, вы можете использовать утилиту du (см. ниже), чтобы удалить ненужные файлы и освободить немного места перед установкой ncdu.

Для сканирования и анализа конкретной директории с использованием ncdu, выполните следующую команду:

ncdu имя_директории

Например, чтобы проанализировать корневую директорию, выполните:

ncdu /

Формат вывода

Символы # помогают определить, какие файлы и каталоги занимают больше всего места на диске.

Крайний левый столбец может содержать дополнительные обозначения (например, на скриншоте выше - пометка e):

  • ! - ошибка при чтении каталога;
  • . - ошибка при чтении подкаталога, что может привести к некорректному размеру;
  • < - объект исключен из подсчета (при использовании опции --exclude);
  • > - объект из другой файловой системы;
  • @ - объект не является файлом или каталогом (символическая ссылка, сокет);
  • H - объект уже учтен (жесткая ссылка);
  • e - пустой каталог.

Навигация

Для перемещения между директориями используйте клавиши со стрелками (вверх и вниз).

Для входа в выбранную директорию нажмите стрелку вправо или клавишу Enter.

Чтобы вернуться в предыдущую директорию, нажмите стрелку влево.

Доступные функции интерфейса

С помощью следующих клавиш можно управлять выводом:

n - сортировка элементов по имени (в прямом и обратном порядке);

s - сортировка элементов по размеру (в прямом и обратном порядке);

g - переключение между графическим отображением (####) и процентным объемом занятого места;


a - переключение между отображением реального размера файлов и объема, который они занимают на диске;

e - скрыть/показать скрытые файлы и директории;

? - вызвать краткую справку;

d - удалить выбранный элемент (потребуется подтверждение);

i - отобразить информацию о выбранном элементе;


q - выход.

Ключи ncdu

При использовании утилиты, вы также можете воспользоваться различными ключами для ncdu:

-h (например, ncdu -h) — выводит краткую справку;

-q — работает в "тихом режиме" и обновляет данные каждые 2 секунды. По умолчанию обновление выполняется 10 раз в секунду. Этот режим позволяет уменьшить объем передаваемых данных при удаленных подключениях;

-x — при сканировании учитывает только файлы и директории из одной файловой системы. Например, если директория home/user/site.com содержит файлы и директории, примонтированные из другой директории на другом диске (/mnt/disk2/site.com), то по умолчанию ncdu учтет, что директория /home/user/site.com занимает пространство на основном диске, хотя она находится на диске disk2. Использование ключа -x позволит корректно определить положение дел на основном диске;

-r — режим "только для чтения", который предотвращает удаление файлов;

--exclude — позволяет исключить файл или тип файлов из подсчета занятого пространства. Например:

ncdu --exclude=/путь/к/каталогу/*что_исключаем*

Например:

ncdu --exclude=/home/user/*.html*

-o — сохраняет результаты в файл:

ncdu / -o путь/к/файлу.tx

du

Утилита du (от англ. disk usage) включена во все дистрибутивы UNIX по умолчанию и предоставляет общую информацию о использовании дискового пространства.

При выполнении команды, она выводит объем пространства, занимаемого каждым файлом и каталогом в текущем каталоге:

Ключи du

Чтобы получить размер в читаемом виде (в килобайтах, мегабайтах и т. д.), необходимо использовать ключ -h, который мы будем применять во всех следующих командах.

  • Например, можно начать с оценки размера всех директорий в корневой файловой системе. Для этого используйте ключи -s (для вывода общего размера указанной директории) и -c (для вывода итогового значения):
du -shc /*

  • Полезный и удобный способ подсчета и сортировки:
du -sch ./*|sort -hr

  • Чтобы узнать размер конкретной директории, используйте ключ -s и укажите путь к нужной директории:
du -sh /путь/к/директории

  • Для вывода размера всех файлов и подкаталогов в каталоге, используйте ключ -a:
du -ah /путь/к/директории

  • Для вывода суммарного объема всех отображенных элементов используйте ключ -c:
du -ch /путь/к/директории

  • Можно использовать опцию --exclude, чтобы исключить определенные типы файлов из вывода.
du -ah --exclude="*что_исключаем*"

Например:

du -ah --exclude="*.html*"

  • Еще одна полезная опция - вывод времени последнего изменения файла. Для этого используйте --time:
du -ah --time /путь/к/директории

Специфика

Несоответствие данных du, ncdu и программного обеспечения (ПО)

  1. Иногда возникают ситуации, когда инструменты du и ncdu показывают меньший объем, чем отображается в панели управления, или когда вы удаляете файлы, но ваше программное обеспечение (ПО) все равно утверждает, что места недостаточно.
    В таких случаях полезно воспользоваться командой df, чтобы получить информацию о файловой системе (поскольку du и ncdu показывают физический объем на диске):
df -h

Вероятно, вы увидите информацию о занятости 100% пространства.
Это может быть связано с тем, что при удалении файла он остается доступным для какого-либо запущенного процесса, и файловая система все еще учитывает его в общем объеме занятого места.
Для решения этой проблемы важно выяснить, какие процессы все еще используют удаленные файлы:

lsof | grep '(deleted)'

Затем перезапустите эти процессы:

service имя_процесса restart

Например, на скриншоте ниже показан процесс httpd, который нужно перезапустить:

  1. Если панель управления, du и df сообщают о наличии свободного места, но ваше программное обеспечение (ПО) или система утверждают обратное, важно проверить доступные inodes.

Остались вопросы - пишите