Назад | Перейти на главную страницу

linux - не хватает места на диске

# df -h /
Filesystem            Size  Used Avail Use% Mounted on
rootfs                9.9G  7.2G  2.2G  77% /

# du -hx --max-depth=0 /
3.2G    /

Как вы видете, df говорит, что используется 7,2 ГБ, но du могу найти только 3,2 ГБ. Сервер был перезагружен, так как я это заметил, так что это не удаленный файл. Дополнительно, lsof не показывает мне ничего интересного. Что еще это может быть?

У меня была такая же проблема в моей системе ext4, и я просто хотел опубликовать свое решение для использования в будущем. Когда мой диск изначально был заполнен, я удалил кучу журналов из / var / log. Это очистило пару ГБ, но через несколько дней у меня снова закончилось место, а du -h и «mount --bind / / mnt» не указывали на виновника. В конце концов я его получил, когда запустил lsof.

lsof
...
rsyslogd   1766      root    2w      REG                9,1   12672375940     264014 /var/log/messages (deleted)
...

Когда я удалил файл журнала сообщений, служба rsyslog оставила его открытым, но скрытым. Выполнение команды «touch / var / log / messages; перезапуск службы rsyslog» устранило проблему, и мое дисковое пространство было освобождено.

Вывод lsof может быть немного подавляющим, особенно если у вас загруженная система (у меня это было более 1000 строк). Если в выводе lsof вы введете grep для «удалено», это должно помочь выявить проблемный процесс.

Поскольку вы используете -x вариант, я полагаю, у вас смонтированы другие файловые системы? Возможно, у вас есть другой раздел, смонтированный поверх каталога, который не был пустым.

Убедитесь, что все папки "позади" ваших точек монтирования пусты. Исходя из опыта, я бы сказал, что, скорее всего, вы скрываете некоторые данные за точкой монтирования.

вы можете проверить, что находится в папке за точкой монтирования, не размонтируя диск / разделы (что может быть неплохо, если, например, вам придется размонтировать / usr). Просто сделай

# mount --bind / /mnt
# du -shx /mnt

также в качестве примечания:

# du -shx /

делает то же самое, что и ваш du ..., но немного короче (-s означает суммировать)

Может возникнуть пара проблем: (1) процесс имеет большой файл или количество открытых файлов, которые были удалены, или (2) у вас может быть какая-то проблема с файловой системой, исправленная с помощью fsck диска. Однако это можно сделать только тогда, когда привод не установлен. Некоторые Linux предоставляют метод FULL fsck корневого файла во время загрузки:

 touch /forcefsck

а затем перезагрузка. Я знаю, что это существует в вариантах SuSE и RedHat.