ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Linux-сервер

Закончилось место на диске в Linux: как проверить и очистить диск и найти большие файлы

7 шагов 11 мин чтения 1596 просмотров 52
Содержание

Сайт не открывается, база данных не может записать данные, в логах «No space left on device» — чаще всего закончилось место на диске. В статье собраны практичные способы проверить и очистить диск в Linux: найти, что занимает место, с помощью df -h и du, проанализировать диск в ncdu, отыскать большие файлы через find и безопасно очистить системные журналы, кеш пакетов и данные Docker. Команды подходят для Debian/Ubuntu и CentOS/Rocky/AlmaLinux и выполняются от root.

Шаг 1: Проверьте занятое место командой df -h

df -hT показывает размер, занятое место и процент заполнения каждой файловой системы — найдите точку монтирования, близкую к 100%. Также проверьте inode через df -i: если миллионы мелких файлов (кеш, сессии) исчерпали inode, система сообщит о нехватке места даже при свободном объёме.

df -hT          # space usage per filesystem
df -i           # inode usage (100% also means "No space left on device")

Шаг 2: Найдите крупные каталоги с помощью du

Посчитайте размер каждого каталога верхнего уровня, отсортируйте и спускайтесь в самый большой. Ключ -x ограничивает подсчёт текущей файловой системой, чтобы не учитывать смонтированные диски. Обычно больше всего места занимают /var/log, /var/lib/docker, /var/lib/mysql, каталоги сайтов и резервных копий.

# Size of each top-level directory on the root filesystem, largest last
du -xh --max-depth=1 / 2>/dev/null | sort -h

# Drill down, e.g. into /var
du -xh --max-depth=1 /var 2>/dev/null | sort -h

Шаг 3: Интерактивный анализ диска в ncdu

ncdu — консольный анализатор диска. После сканирования можно перемещаться по каталогам стрелками и удалять файлы клавишей d — это гораздо удобнее, чем многократно запускать du.

# Debian / Ubuntu
apt install -y ncdu

# CentOS / Rocky / AlmaLinux (ncdu is in EPEL)
dnf install -y epel-release && dnf install -y ncdu

ncdu -x /

Шаг 4: Поиск больших файлов в Linux

Выведите все файлы больше 500 МБ — так быстро находятся забытые архивы, дампы баз данных и разросшиеся логи. Перед удалением убедитесь, что файл не нужен; в сомнительных случаях сначала перенесите его на другой диск.

# Files larger than 500 MB on the root filesystem
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h

Шаг 5: Очистка системных журналов и кеша пакетов

Журнал systemd со временем может занять несколько гигабайт — сократите его по размеру или сроку через journalctl. Большой лог, в который ещё пишет программа, не удаляйте через rm, а очистите командой truncate, иначе место не освободится. Кеш пакетов можно очищать без опасений.

journalctl --disk-usage
journalctl --vacuum-size=200M
journalctl --vacuum-time=7d

# Empty a large log file that a running program still writes to (do not rm it)
truncate -s 0 /var/log/nginx/access.log

# Package manager caches
apt clean                 # Debian / Ubuntu
dnf clean all             # CentOS / Rocky / AlmaLinux

Чтобы журнал больше не разрастался, задайте лимит:

# Permanently cap the journal size
mkdir -p /etc/systemd/journald.conf.d
printf '[Journal]\nSystemMaxUse=500M\n' > /etc/systemd/journald.conf.d/size.conf
systemctl restart systemd-journald

Шаг 6: Очистка места, занятого Docker

На серверах с Docker в /var/lib/docker накапливаются остановленные контейнеры, неиспользуемые образы и кеш сборки. Проверьте объём командой docker system df и удалите лишнее.

docker system df
docker container prune -f
docker image prune -a -f
docker builder prune -f
# Removes everything unused, including volumes - check first!
docker system prune -a --volumes
Очистка с --volumes удаляет все тома, не используемые контейнерами, в том числе с данными баз данных. Убедитесь, что они не нужны.

Шаг 7: Освободите место от удалённых, но открытых файлов

Если большой файл удалён, а df не изменился, его всё ещё держит открытым какой-то процесс. Найдите его через lsof и перезапустите соответствующую службу.

# Deleted files still held open by a process
lsof +L1 2>/dev/null | head -n 20
# Restart the process that holds them, e.g.
systemctl restart nginx

Частые вопросы

Почему du и df показывают разный объём?

Обычно причин две: удалённые файлы, которые ещё открыты процессом (см. шаг 7), или файлы, скрытые под точкой монтирования другого диска. В первом случае перезапустите процесс, во втором — отмонтируйте диск и проверьте каталог.

Какие логи в /var/log можно удалять?

Старые ротированные логи с датой или расширением .gz, как правило, можно удалить. Активные логи очищайте через truncate. Долгосрочное решение — настроить logrotate для регулярной ротации и сжатия.

После очистки места всё равно мало.

Перенесите сайты, базы данных или резервные копии на дополнительный диск либо увеличьте диск и расширьте раздел по нашей инструкции по LVM и growpart.

Если проблема не решилась, создайте тикет — техническая поддержка IMIDC работает круглосуточно 24/7. Укажите IP-адрес сервера, операционную систему, выполненные команды и приложите скриншот ошибки: так инженер разберётся быстрее.

Помог ли вам данный ответ?

Похожие руководства