Перейти к основному содержимому
Вернуться в категорию

Диск заполнен: экстренное восстановление

Экстренные действия при заполнении диска: поиск больших файлов с du и ncdu, очистка логов, проверка inode и настройка автоматической очистки.

Время чтения: 13 мин Устранение неполадок
дискзаполненduncduлогinodeочисткавосстановление

Содержание

Введение

Заполнение дискового пространства может привести к сбоям сервисов, ошибкам базы данных и нестабильности системы. В этом руководстве мы рассмотрим экстренные действия и постоянные решения при заполнении диска.

Экстренная диагностика

Проверка использования диска

hljs bash
# Общее использование диска
df -h

# Использование inode
df -i

# С типами файловых систем
df -Th

Когда использование диска превышает 95%, требуется немедленное действие. При 100% сервисы начинают падать.

Поиск больших файлов и каталогов

Анализ командой du

hljs bash
# Самые большие каталоги в корне
sudo du -sh /* 2>/dev/null | sort -rh | head -20

# Анализ каталога /var
sudo du -sh /var/* 2>/dev/null | sort -rh | head -10

# Анализ /var/log
sudo du -sh /var/log/* 2>/dev/null | sort -rh | head -10

# Поиск файлов больше 100МБ
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -20

Интерактивный анализ с ncdu

hljs bash
# Установка ncdu
sudo apt install ncdu -y

# Анализ корневого каталога
sudo ncdu /

Экстренные шаги очистки

1. Очистка лог-файлов

hljs bash
# Проверка размера журнала systemd
journalctl --disk-usage

# Ограничение журнала до 100МБ
sudo journalctl --vacuum-size=100M

# Удаление логов старше 7 дней
sudo journalctl --vacuum-time=7d

# Обрезка больших лог-файлов
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log

# Удаление старых ротированных логов
sudo find /var/log -name '*.gz' -delete
sudo find /var/log -name '*.1' -delete

Команда truncate сбрасывает размер файла до нуля без его удаления. Перезапуск сервисов не требуется.

2. Очистка кеша APT

hljs bash
# Проверка размера кеша APT
sudo du -sh /var/cache/apt/archives/

# Очистка загруженных пакетов
sudo apt clean

# Очистка старых версий пакетов
sudo apt autoclean

# Удаление неиспользуемых зависимостей
sudo apt autoremove -y

3. Очистка старых ядер

hljs bash
# Текущая версия ядра
uname -r

# Список установленных ядер
dpkg --list | grep linux-image

# Удаление старых ядер
sudo apt autoremove --purge -y

4. Очистка каталога tmp

hljs bash
# Проверка размера /tmp
sudo du -sh /tmp

# Удаление tmp-файлов старше 7 дней
sudo find /tmp -type f -atime +7 -delete

5. Поиск удалённых, но открытых файлов

hljs bash
# Поиск удалённых, но открытых файлов
sudo lsof +L1 | grep deleted

# Перезапуск связанного процесса
sudo systemctl restart ИМЯ_СЕРВИСА

Особенно при удалении лог-файлов дисковое пространство не освободится без перезапуска связанного сервиса.

Исчерпание inode

hljs bash
# Проверка использования inode
df -i

# Поиск каталогов с наибольшим количеством файлов
sudo find / -xdev -printf '%h\n' | sort | uniq -c | sort -rn | head -20

Настройка автоматической ротации логов

hljs bash
# /etc/logrotate.d/custom-logs
/var/log/myapp/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
}

Ограничение размера журнала

hljs bash
# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=200M
SystemMaxFileSize=50M
MaxRetentionSec=7day

Скрипт мониторинга диска

hljs bash
#!/bin/bash
THRESHOLD=90
PARTITION="/"
USAGE=$(df -h $PARTITION | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
  echo "ВНИМАНИЕ: Использование диска $USAGE% ($PARTITION)"
  du -sh $PARTITION* 2>/dev/null | sort -rh | head -10
fi

Заключение

Заполнение диска — критическая проблема, требующая немедленных действий. Лог-файлы, кеш APT и старые ядра — наиболее частые потребители пространства. Настроив регулярную ротацию логов и мониторинг диска, вы можете предотвратить повторение этой проблемы.