Анализ места на диске: 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 и программного обеспечения (ПО)
- Иногда возникают ситуации, когда инструменты du и ncdu показывают меньший объем, чем отображается в панели управления, или когда вы удаляете файлы, но ваше программное обеспечение (ПО) все равно утверждает, что места недостаточно.
В таких случаях полезно воспользоваться командой df, чтобы получить информацию о файловой системе (поскольку du и ncdu показывают физический объем на диске):
df -h
Вероятно, вы увидите информацию о занятости 100% пространства.
Это может быть связано с тем, что при удалении файла он остается доступным для какого-либо запущенного процесса, и файловая система все еще учитывает его в общем объеме занятого места.
Для решения этой проблемы важно выяснить, какие процессы все еще используют удаленные файлы:
lsof | grep '(deleted)'
Затем перезапустите эти процессы:
service имя_процесса restart
Например, на скриншоте ниже показан процесс httpd, который нужно перезапустить:
- Если панель управления, du и df сообщают о наличии свободного места, но ваше программное обеспечение (ПО) или система утверждают обратное, важно проверить доступные inodes.