Как я могу это исправить: EXT4-fs предупреждение (устройство sda3): ext4_dx_add_entry: индекс каталога заполнен

Я заметил, что в dmesg и syslog у меня есть что-то вроде этого:

EXT4-fs warning (device sda3): ext4_dx_add_entry: Directory index full!

Я тоже проверил df -i:

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda3            182943744 27534820 155408924   16% /

И я вижу, что IUse% составляет 16%. Я перезагрузил этот сервер, но это случилось снова. Я проверяю, где у меня слишком много файлов, и наибольшее количество было 3200 файлов в одной папке. Это много?

Я нашел в Google - что я могу попробовать fsck, но как я могу сделать это в системе монтирования. Я думаю, это невозможно, иначе это может привести к сбою моих данных.

У тебя есть идея?

Большое спасибо за помощь.

Рафал

2 ответа

Решение

Я нашел в Google - что я могу попробовать fsck, но как я могу сделать это в системе монтирования. Я думаю, это невозможно, иначе это может привести к сбою моих данных.

Да, это то, что я бы порекомендовал. Похоже, у вас может быть повреждение файловой системы.

fsck не может восстановить файловую систему, которая смонтирована. Вам нужно будет либо загрузить и остановить процесс загрузки, прежде чем ваша файловая система будет смонтирована для запуска fsck (это может или не может быть возможно в зависимости от вашей конфигурации) или загрузитесь с другого носителя (например, установочного диска или LiveCD), чтобы проверить и восстановить вашу корневую файловую систему.

Я нашел в Google, что я могу попробовать fsck, но как это сделать в системе монтирования. Я думаю, что это невозможно, иначе это может привести к сбою моих данных.

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

Но сначала прочтите предупреждения:

Предупреждение № 1. Обязательно сделайте резервную копию своих данных перед запуском fsck, иногда fsck может ухудшить ситуацию!

Предупреждение №2 . Если вы находитесь в центре обработки данных и у вас нет удаленного доступа к консоли (например, iDRAC, iLO, iKVM и т. д.), попросите кого-нибудь помочь с консолью. Иногда принудительное выполнение fsck при загрузке запрашивает ввод данных пользователем в случае ошибки и требует вмешательства пользователя — и вы же не хотите, чтобы вас заблокировали!

Если это корневой раздел (а в вашем случае это так), то №1 или №2 могут сработать:

  1. Вы могли бы попробоватьtouch /forcefsckи перезагрузиться
  2. или во время загрузки (или, если у вас нет доступа к консоли, отредактируйте grub.cfg напрямую) и добавьтеfsck.mode=forceи необязательноfsck.repair=yesи позвольте systemd-fsck сделать это.
    • Если вы редактировали grub.cfg напрямую, верните его обратно, когда закончите!

Если это не корневой раздел (или если пункты 1 и 2 выше не работают), вам потребуется доступ к консоли:

  1. Загрузитесь в режим и обойдите все:
    • Сначала отредактируйте командную строку ядра в grubотредактируйте командную строку ядра в grub во время загрузки и добавьтеinit=/bin/sh
    • Когда он загрузится, он, вероятно, загрузится с таким приглашением:bash-4.2#
    • Возможно, вам потребуется указать путь:PATH=/sbin:/bin:/usr/sbin:/usr/bin
    • Затем вы можете протестировать fsck следующим образом:fsck.ext4 -fn /dev/your/device
    • Если количество ошибок выглядит не слишком пугающим, запустите восстановление:fsck.extr -fy /dev/your/device
  2. Используйте Live CD, как в этом ответе.
Другие вопросы по тегам