Linux - Помогите, у меня закончились иноды!

16

У меня есть файловая система, в которой много маленьких файлов. В настоящее время используется около 80% inode (я проверял это df -i), однако используется только 60% дискового пространства. Как я могу «увеличить» число инодов? Если бы это было только дисковое пространство, я знаю, что я мог бы просто увеличить размер диска (этот диск на LVM). Если я увеличу размер диска, это заставит меня иметь больше инодов?

Я готов расширить файловую систему, на которой находится этот диск, если это поможет.

Рори
источник

Ответы:

14

man mke2fs

Вы увидите -N для числа inode

Таким образом, вы можете указать его при форматировании нового раздела. Не очень полезно сейчас, а?

У tune2fs, которая настраивает файловую систему, похоже, нет способа добавить больше inode.

Но, возможно, ext3 или 4 делает это, и кто-то еще знает ....?

Так что теперь у вас есть возможность: резервное копирование, переформатирование раздела, восстановление.

Павел
источник
1
да, это хорошо, но не потому, что это reiserfs, а потому, что он поддерживает динамическое распределение inode (поддерживается каждой прилично новой файловой системой)
1
Reiser отлично подходит для тонны маленьких файлов. Я бы пошел с этим.
Xorlev
Однако я хотел бы убедиться, что у вас есть резервные копии при использовании Reiser. Я (я) и другие потеряли данные из-за reiserFS в предыдущие годы. Я больше не доверяю этому.
Anony-Mousse
У ext3, похоже, нет на это пути
kagali-san
15

Чтобы ответить на первоначальный вопрос, даже если для опрашивающего, вероятно, уже поздно - да, увеличение EXT2 / 3 на LVM2 также увеличит лимит инодов.

Только что был раздел размером 1G с ограничением inodes 65k. После

lvextend -L+1G /dev/vg/var
umount /var
resize2fs /dev/vg/var
mount /var

... мой предел inode теперь 128k.

Алеш Крайник
источник
1
Ух ты, я был почти в отчаянии, но нашел твой ответ и решил попробовать, и это сработало. Это определенно должен быть принятый ответ! Работает как для LVM, так и для виртуальных машин :)
vadipp
12

Если вы знали, что небольшие файлы будут занимать ваше дисковое пространство, вы должны были использовать ФС с динамическим размещением inode, например, ReiserFS или любую новую современную ФС (XFS, JFS) вместо EXT2 / 3/4 (которую я предполагаю, что вы используете , ты не сказал что)

Миграция файловой системы, вероятно, является хорошим выбором в вашей ситуации.

Сообщество
источник
1
Если вы знали, что небольшие файлы будут занимать ваше дисковое пространство, вам следовало бы выполнить некоторые настройки . У каждой файловой системы есть свои плюсы и минусы.
Франклин Пят
3

В качестве временного промежутка, смонтируйте новую файловую систему, и cp / rm / ln-s некоторые из вашей иерархии fs там. Теперь у вас есть несколько запасных инодов! Вы не можете перемещать файлы между двумя fse, так что остерегайтесь ломать вещи, которые нужно сделать, но для многих приложений это может быть прозрачным.

Затем, по совету Павла, создайте новый fs и перенеситесь на него.

Чарльз Стюарт
источник
1
Конечно, вы можете создавать mv-файлы между двумя файловыми системами - mv фактически является семантическим сахаром для cp + rm. Вы не можете жестко связать две файловые системы. Вы имели в виду что-то еще?
Даниэль Лоусон
@Daniel: я имею в виду системный вызов rename (), и я считаю, что использование mv в качестве сахара для cp / rm является небрежной практикой из-за проблемы с семантикой вокруг символических ссылок. Я должен отредактировать этот ответ - есть несколько мест, которые не очень понятны.
Чарльз Стюарт
2

Ext4 сталкивается с той же проблемой, если вы создаете небольшой раздел и имеете тонну маленьких файлов, у вас закончатся inode, и если у вас есть flex_bgфункции, которые вы не можете использовать tune2fsдля увеличения inode.

Лично я бы использовал ext4 поверх любой версии rieserfs, просто сделайте следующее при форматировании:

mkfs.ext4 -I 512 /dev/foo
tune2fs -i0 -c0 -o journal_data_writeback /dev/foo

Такое форматирование даст 33160 inode на загрузочном разделе 512M.

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

самоубийственный
источник
-1

Пойдите для resiserfs или любого другого fs без ограничения inode. Особенно в отношении файлов журналов, возможно, вы могли бы упаковать несколько тонн небольших неиспользуемых файлов в один больший tar-файл, чтобы освободить довольно много inode'ов =)

$ find /path -iname "pattern" | xargs tar rvf output_file.tar
adrolmar
источник