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

Понимание ограничений inode XFS

Я достиг предела inode в моем разделе XFS. По этому поводу возникает множество вопросов. Некоторые предполагают, что ответ - увеличить максимальный процент пространства, выделяемого для inodes. Или, как xfs_growfs manpage помещает это:

-m Укажите новое значение для максимального процента пространства в файловой системе, которое может быть выделено как индексные дескрипторы.

Я пробовал это, но не уверен, что вижу. Когда я достиг предела, по умолчанию было 25%. Это дало мне 409 600 129 инодов на образе диска размером 781 ГБ.

Я увеличил его до 100%, и теперь он позволяет мне 1 566 536 296 инодов.

$ df -i
Filesystem                        Inodes     IUsed      IFree IUse% Mounted on
...
/dev/loop3                    1566536040 409600129 1156935911   27% /mnt/tiles

Я ожидаю написать более 2 миллиардов записей (в основном символических ссылок), поэтому даже на 100% этого недостаточно. Насколько я понимаю, XFS может поддерживать гораздо большее количество файлов, поэтому я думаю, что мне что-то не хватает.

Я пробовал перемонтировать с помощью -o inode64, но разницы не было. (В любом случае этот параметр должен быть установлен по умолчанию).

$ sudo xfs_growfs -m 100 .
meta-data=/dev/loop3             isize=512    agcount=4, agsize=51200000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0 rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=204800000, imaxpct=100
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=100000, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
inode max pct unchanged, skipping

Неужели размер моего диска недостаточен? Или есть какая-то другая конфигурация или ограничение, о которых я не знаю? Почему 100% выделение для inodes составляет всего 1,5 ГБ?

Хотя вы увеличили максимальное пространство, которое могут использовать inodes, вероятно, у вас слишком мало свободно пространство для поддержки более 1,5 млрд инодов. Поскольку каждый индексный дескриптор использует около 512 байт, по моим оценкам, у вас есть ~ 750 ГБ свободного / доступного пространства.

Попробуйте освободить место и / или расширить файловую систему.

Хотите верьте, хотите нет, но в вашей конфигурации ваш объем слишком мал для того, что вы пытаетесь выполнить. Минимальный размер inode для XFS при использовании проверок циклическим избыточным кодом (который у вас есть и используется по умолчанию) составляет 512 байт. 2 миллиарда символических ссылок, 512 байт на ссылку, означают, что вам нужно не менее 953 ГБ или 1 ТБ (в зависимости от вашего определения миллиарда) для хранения всех этих inodes.

Если у вас есть возможность переформатировать этот том, вы можете сделать его лучше для своих целей.

  • -i maxpct=90 во время процесса mkfs будет создан новый том, который может использовать 90% пространства в качестве inodes. Он не подойдет для вашего оборудования, но если вы можете изменить, сколько вы можете на это бросить, это позволит xfs использовать почти все пространство для отслеживания символических ссылок.
  • -m crc=0 -i size=256 во время процесса mkfs отключит поддержку CRC и вдвое уменьшит размер вашего inode. Этот вариант подойдет вашему текущему оборудованию за счет отсутствия защиты от проблем с оборудованием.