Бесплатная миграция IT-инфраструктуры в облако
На главную
61c46507-12c7-4300-a301-bd8bc30c7c19
Инструкции для серверов

Анализ дискового пространства: ncdu, du

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

Для того, чтобы проверить, чем занято дисковое пространство на сервере, можно воспользоваться такими утилитами, как ncdu и du. Работать с ними достаточно просто. При анализе также может потребоваться проверить данные о файловой системе и inodes (подробнее об этом в последнем разделе этой статьи).

ncdu

Утилита ncdu — один из самых удобных инструментов для анализа дискового пространства. Она имеет псевдографический интерфейс, что значительно упрощает работу с ней.

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

Для Debian / Ubuntu:

apt install ncdu

Для CentOS:

yum install ncdu

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

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

ncdu имя_каталога

Например, чтобы вывести информацию о корневом каталоге, выполните:

ncdu /

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

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

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

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

Навигация

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

Стрелка вправо или Enter — войти в выбранную директорию.

Стрелка влево — вернуться в предыдущую директорию.

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

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

n — упорядочить элементы по имени (в прямом и обратном порядке);

s — упорядочить элементы по размеру (в прямом и обратном порядке);

g — переключение между отображением «графика» (####) и объёма в процентах:

Ncdu3

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

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

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

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

i — вывести информацию о выбранном элементе:

Ncdu2

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 отобразит эти файлы в общем списке, но не будет учитывать их при подсчете занятого пространства:

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

Например:

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

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

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

du

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

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

Du11

Ключи du

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

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

Du22

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

Du8

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

Du33

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

Du44

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

Du55

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

Например:

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

  Du9

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

Нюансы

Несоответствие данных du, ncdu и ПО

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

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

lsof | grep '(deleted)'

После чего перезапустить эти процессы: 

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

Например, в выводе ниже этот процесс — httpd, и именно его нужно перезапустить:
Deleted

  1. Если по данным панели управления и утилит du и df свободное место в наличии, однако ваше ПО или CMS по-прежнему сообщают о недостаточном объеме пространства, необходимо проверить наличие свободных inodes.
Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев