При работе с сервером важно контролировать занятый объем на диске. Если дисковое пространство окажется занято полностью, в работе VDS начнут возникать ошибки (ошибка 502, удаление файлов при их редактировании, повреждение базы данных). Чтобы этого избежать, необходимо своевременно увеличивать доступный объем, удаляя ненужные файлы или расширяя сам диск.
Для того, чтобы проверить, чем занято дисковое пространство на сервере, можно воспользоваться такими утилитами, как ncdu
и du
. Работать с ними достаточно просто. При анализе также может потребоваться проверить данные о файловой системе и inodes (подробнее об этом в последнем разделе этой статьи).
Утилита ncdu
— один из самых удобных инструментов для анализа дискового пространства. Она имеет псевдографический интерфейс, что значительно упрощает работу с ней.
ncdu
не предустановлена в дистрибутивах Unix по умолчанию, но ее легко можно установить командами ниже.
Для Debian / Ubuntu:
apt install ncdu
Для CentOS:
yum install ncdu
Если дисковое пространство уже переполнено и установить
ncdu
невозможно, можно сначала воспользоваться утилитойdu
(см. ниже), удалить несколько файлов, чтобы освободить немного места, после чего поставитьncdu
и дальше продолжить работать с ней.
Для того, чтобы просканировать и вывести данные о конкретной директории, воспользуйтесь командой:
ncdu имя_каталога
Например, чтобы вывести информацию о корневом каталоге, выполните:
ncdu /
Количество символов #
помогает определить, какие файлы и каталоги занимают больше всего места.
Крайний левый столбец может содержать дополнительные обозначения (например, на скриншоте выше — пометки e
):
!
— ошибка при чтении каталога;.
— ошибка при чтении подкаталога, т.е. указанный размер может быть некорректным;<
— объект исключен из подсчета (с помощью опции --exclude
);>
— объект из другой файловой системы;@
— объект не является файлом или каталогом (символическая ссылка, сокет);H
— объект уже был учтен (жесткая ссылка);e
— пустой каталог.Для перемещения по директориям используются клавиши со стрелками (вверх и вниз).
Стрелка вправо или Enter — войти в выбранную директорию.
Стрелка влево — вернуться в предыдущую директорию.
С помощью следующих клавиш можно управлять полученным выводом:
n
— упорядочить элементы по имени (в прямом и обратном порядке);
s
— упорядочить элементы по размеру (в прямом и обратном порядке);
g
— переключение между отображением «графика» (####) и объёма в процентах:
a
— переключение между отображением реального размера файлов и объемом занимаемого пространства на диске;
e
— скрыть/показать скрытые файлы и папки;
?
— вызвать краткую справку;
d
— удалить выбранный элемент (перед удалением будет запрошено подтверждение действия);
i
— вывести информацию о выбранном элементе:
q
— выйти.
Также при запуске утилиты можно использовать дополнительные ключи для 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
(от англ. disk usage) присутствует во всех UNIX-дистрибутивах по умолчанию и позволяет получить общую информацию о занятом месте.
При выполнении команды она выводит объем пространства, занимаемого каждым файлом и каталогом в текущем каталоге:
Для вывода занятого объема в читаемом виде (в килобайтах, мегабайтах и т.д.) требуется ключ -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
показывают меньший объем, чем выводится в панели управления; либо же вы удаляете файлы, но ваше ПО сообщает, что свободного пространства по-прежнему недостаточно.df
, которая позволит получить данные именно о файловой системе (в то время как du
и ncdu
показывают именно физический объем на диске):df -h
Вероятнее всего, в выводе будет информация о занятости 100% пространства.
Это связано с тем, что иногда при удалении файла он остается доступен какому-либо запущенному процессу, из-за чего файловая система по-прежнему учитывает его в общем объеме занятого пространства.
Чтобы решить проблему, нужно определить, какими процессами все еще используются удаленные файлы:
lsof | grep '(deleted)'
После чего перезапустить эти процессы:
service имя_процесса restart
Например, в выводе ниже этот процесс — httpd, и именно его нужно перезапустить:
du
и df
свободное место в наличии, однако ваше ПО или CMS по-прежнему сообщают о недостаточном объеме пространства, необходимо проверить наличие свободных inodes.