Как посмотреть свободное место, найти, что занимает диск, безопасно почистить журналы, кэш пакетов и Docker, найти удалённые, но занятые файлы и увеличить диск.
Содержание
Когда диск заполнен, сервер ведёт себя странно: не запускается база, сайт отдаёт ошибки, файлы не сохраняются. Сначала выясните, что заняло место, — удалять наугад опасно.
Сколько места
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 39G 120M 100% /Смотрите строку с / — это системный диск, — и строки своих дополнительных дисков. Use% 100 — места нет.
Если место вроде бы есть, а файлы не создаются с ошибкой No space left on device, проверьте df -i. Это число файлов, которое помещается на диск. Кончается оно от миллионов мелких файлов — обычно это кэш сайта или сессии PHP.
Что занимает место
sudo du -xh -d 1 / | sort -hКоманда покажет размер каждой папки в корне, самые большие — внизу. Дальше спускайтесь в самую большую: sudo du -xh -d 1 /var | sort -h, и так далее. Ключ -x не даёт уйти на другие диски.
Удобнее программа ncdu: она считает один раз, а по папкам вы ходите стрелками.
sudo apt install ncdu # AlmaLinux: sudo dnf install ncdu, из EPEL
sudo ncdu -x /Самые большие файлы целиком:
sudo find / -xdev -type f -size +500M -exec ls -lh {} +Что обычно можно удалить
Журнал systemd
journalctl --disk-usage
sudo journalctl --vacuum-size=200MОставит последние 200 МБ журнала. Чтобы он больше не разрастался, задайте предел:
sudo mkdir -p /etc/systemd/journald.conf.d
printf '[Journal]\nSystemMaxUse=200M\n' | sudo tee /etc/systemd/journald.conf.d/size.conf
sudo systemctl restart systemd-journaldСтарые журналы программ
В /var/log файлы с цифрой или .gz в конце — syslog.2.gz, access.log.3.gz — это уже прошедшие ротацию старые журналы, их можно удалить. Если быстро растёт сам текущий журнал, посмотрите, что в нём: часто это одна и та же ошибка тысячи раз в минуту — её и нужно исправить.
rm: место не освободится, пока программу не перезапустят. Очистите файл, не удаляя его: sudo truncate -s 0 /var/log/имя.log.Кэш пакетов и старые ядра
sudo apt clean && sudo apt autoremove --purge # Ubuntu, Debian
sudo dnf clean all # AlmaLinux
sudo pkg clean -a && sudo pkg autoremove # FreeBSDautoremove удаляет старые ядра и пакеты, которые больше ничему не нужны. AlmaLinux сам хранит не больше трёх ядер.
Docker
docker system df
docker system pruneprune удалит остановленные контейнеры, ненужные сети, образы без имени и кэш сборки. С ключом -a — ещё и все образы, которые не использует ни один контейнер. Тома с данными без --volumes не трогаются. Ещё одна частая причина — журналы контейнеров, которые по умолчанию растут без ограничений: как их ограничить.
Забытые копии
Частая находка — старые архивы сайта и выгрузки базы, сделанные руками «на всякий случай»: посмотрите /root, /home, /var/backups и папку сайта.
Удалили, а место не освободилось
Значит, файл ещё открыт программой: она продолжает в него писать, и место занято, пока она работает. Найти такие файлы:
sudo lsof +L1Если команды нет — поставьте пакет lsof. Перезапустите программу из списка, например sudo systemctl restart nginx, — место освободится.
Увеличить диск
Если места не хватает постоянно, увеличьте системный диск на вкладке «Ресурсы» в личном кабинете или добавьте отдельный диск для данных — Дополнительный диск. Раздел системного диска растянется сам после перезагрузки сервера. Пока у сервера есть снимки, диск не увеличится — сначала удалите их.
Не нашли ответ? Напишите в поддержку — подскажем.


