Там какие-либо недостатки являются к созданию ext4 файловыми системами с максимумом inodes?

Там какие-либо недостатки являются к созданию ext4 файловыми системами с 2^32-1 inodes?

У меня есть диск на 1 ТБ, и я хотел бы сохранить 800 миллионов в 1,5 миллиарда маленьких файлов на нем. Кажется, что макс. являются 4 миллиарда, таким образом, я задаюсь вопросом, мог ли я просто установить его на макс. при создании фс, или я должен найти некоторое другое решение.

5
задан 27 December 2018 в 06:41

1 ответ

Согласно подобным вопросам на Переполнении стека и Unix & Linux (см. ниже) это - плохая идея истратить количество inodes в ext4 файловой системе.

Лучше используйте другую файловую систему или разделите Ваш диск на несколько файловых систем.

Подводить итог:

  • inode занимает 256 байтов. Это может быть настроено к 128, но даже при том, что:

    2³² inodes × 256 bytes each = 1 TB
    
  • При создании ext4 файловой системы можно указать тип использования, как определено в /etc/mke2fs.conf:

    mkfs.ext4 -T usage-type /dev/something
    

    Для того, чтобы хранить много маленьких файлов тип small мог бы использоваться:

    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }
    

    Это означает: для каждых 4 096 байтов дискового пространства (размер файловой системы) будет зарезервирован один inode, каждый из которых имеет размер 128 байтов. Команда mkfs.ext4 -T small /dev/something таким образом создал бы 244 миллиона inodes в файловой системе на 1 ТБ, которые занимают 31 ГБ. Эти 244 миллиона файлов, по крайней мере, займут 250 ГБ (минута 1 024 байта каждый).

  • Для содержания 1 миллиарда inodes с маленьким местом (128 байтов), Вам были бы нужны 128 ГБ только для inodes. Если бы самый маленький blocksize (1024 согласно странице справочника mk2efs) используется, то этот 1 миллиард файлов, по крайней мере, занял бы 1 ТБ (но помнил бы, что Вы только имеете 872 ГБ в запасе из-за 128 ГБ для inodes).

  • Самый маленький blocksize для ext4 составляет 1 024 байта. Следовательно, Вы не можете сохранить больше чем 1 ТБ / 1024 = 1 миллиард файлов, и бессмысленно иметь больше inodes.

  • Как правило ползунка inode_ratio не должно быть меньшим, чем blocksize потому что Вы не можете (легко) хранить больше чем один файл в одном блоке.

  • Возможно сохранить первые 60 байтов файла непосредственно в inode, если файловая система настроена тот путь. В этом случае файл не занял бы (регулярный) блок; читайте о таких встроенных данных здесь, но также и рассмотрите inode размер.

  • От комментария до вопроса U&L:

    Слишком много inodes имеют глубокую стоимость наверняка, они занимают место сами и полагают мне, что fsck производительность мертва серьезный. Мы говорим практически экспоненциальное замедление, как 30 секунд по сравнению с 2 днями..., и это - связанный ввод-вывод. Не говоря уже о медленных холмах списка файлов, индексируя... и т.д.


Ссылки:

3
ответ дан 23 November 2019 в 10:25

Другие вопросы по тегам:

Похожие вопросы: