На главную
- Инструкции для UNIX-систем
- Обзор
- Подключение к серверу по SSH
- Подключение к серверу по SFTP
- Авторизация по SSH-ключу
- Смена или сброс пароля root
- Смена пароля root для MySQL
- Добавление пользователей
- Управление правами доступа
- Защита SSH от подбора пароля. Fail2ban
- Подключение к базе данных MySQL
- Создание дампа базы и восстановление данных
- Установка LAMP на Ubuntu
- Установка phpMyAdmin на Ubuntu с LAMP
- Установка SSL-сертификата на Nginx
- Установка модулей PHP (CentOS)
- Установка модулей PHP (Debian / Ubuntu)
- Настройка параметров PHP (CentOS)
- Настройка параметров PHP (Debian / Ubuntu)
- Настройка перенаправлений
- Настройка перенаправлений (Nginx)
- Настройка FTP в Ubuntu 20.04
- Оптимизация MySQL с помощью MySQLTuner
- Сканирование с помощью ClamAV
- Управление службами в systemd
- Логирование в systemd
- Аудит системных событий
- Добавление дополнительного IP
- Настройка статического IP
- Добавление и удаление диска
- Изменение размера диска
- Монтирование резервных копий
- Создание swap, изменение его размера
- Установка и удаление программ. Менеджеры пакетов
- Установка графической оболочки XFCE на Ubuntu
- Настройка iptables
- Настройка OpenVPN
- Установка произвольной ОС на сервер
- Удаленный доступ к MySQL
- Установка QEMU-агента
- Установка Zabbix-агента
- Установка и работа с PostgreSQL
- Установка почтового сервера iRedMail
- Установка SSL на сервер с Keitaro
- Установка Minecraft на CentOS 7
- Запуск Wordpress на сервере c Ubuntu
- Запуск бота в фоновом режиме
- Установка сертификатов Минцифры
- Подготовка образа для создания облачного сервера
- Диагностика и решение проблем
- Обзор
- Базовая диагностика при проблемах в работе сайта
- Проблемы с базой данных
- Анализ дискового пространства: ncdu, du
- Данные о дисках: df, lsblk, parted, fdisk
- Контроль нагрузки и процессов: top, htop, atop
- Завершение процессов OOM Killer
- Переполнение inodes
- Проверка файловой системы
- Другие возможные проблемы
- Ускорение работы сайта: перенос MySQL в tmpfs
- Инструкции для Windows
- Панели управления
Анализ дискового пространства: 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 /

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