PostgreSQL упал: No space left on device — расширение LVM диска
Симптомы критической нехватки места в PostgreSQL
СУБД PostgreSQL аварийно останавливается, в логах появляется запись PANIC: could not write to log file: No space left on device, а попытка подключиться через psql выдает ошибку сокета.
Диагностика дискового пространства
df -hT /var/lib/postgresqlЕсли столбец Use% показывает 100%, база заблокирована операционной системой от повреждения транзакций.
Экстренное расширение LVM раздела без перезагрузки
- Проверяем свободное место в Volume Group (VG):
sudo vgs - Увеличиваем размер логического тома на 20 ГБ:
sudo lvextend -L +20G /dev/ubuntu-vg/ubuntu-lv(Или используйте все доступное свободное пространство:
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv). - Расширяем саму файловую систему (ext4) на лету:
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv(Если используется файловая система XFS, команда:
sudo xfs_growfs /). - Запускаем СУБД PostgreSQL заново:
sudo systemctl start postgresql sudo systemctl status postgresql
Если LVM не настроен, временно удалите старые сжатые системные журналы: sudo rm -f /var/log/*.gz /var/log/journal/*, чтобы освободить место для старта службы.
Частые вопросы (FAQ)
Нужно ли останавливать PostgreSQL перед командой resize2fs?
Нет, файловая система ext4 и утилита resize2fs поддерживают безопасное онлайн-расширение без остановки служб.
Почему нельзя удалять файлы из папки pg_wal вручную?
Удаление файлов WAL вручную приведет к разрушению целостности базы данных. Освобождайте место в других системных папках.
Как узнать, какая папка сожрала все место?
Используйте утилиту ncdu: sudo apt install ncdu -y && sudo ncdu /
Как настроить автоочистку временных таблиц в Postgres?
Проверьте работу процесса autovacuum в файле postgresql.conf.