inodes, сравнение занимаемого пространства для многих маленьких файлов (xfs, btrfs, ext4)


9

У меня есть раздел ext4 (LVM на ВМ) с большим количеством маленьких файлов , которые я должен расширять каждые 3-4 месяца.

Относительно количества места, используемого inode.

Использует ли одна из файловых систем xfs, btrfs или ext4 меньше места?

Другими словами, переключение на btrfs или xfs замедлит заполнение раздела инодами по сравнению с ext4?


если вы используете ext4 и планируете хранить в основном мелкие типы, вы должны создать его mkfs.ext4 -t newsдля достижения наилучших результатов. Кроме того, я бы посоветовал протестировать - по очереди создать (на lvm или устройстве loopback) каждую из файловых систем и начать копировать в нее свои реальные файлы, пока они не заполнятся. Когда он заполнится, сделайте df -i(или find | wc -l), чтобы найти, какой из них сумел сохранить большинство ваших файлов - таким образом, вы точно об этом узнаете.
Матия Налис

1
@MatijaNalis, -Tс заглавной буквой T. В конфигурационном файле есть и другие полезные варианты
ilkkachu

@ilkkachu правильно, спасибо. Это должно бытьmkfs.ext4 -T news
Матия Налис

Насколько маленькие файлы?
друдру

Ответы:


6

Начнем с вашего первого вопроса: да, одна из этих файловых систем занимает меньше места. Даже без дополнительных подробностей маловероятно, что все они используют одинаковое количество места, учитывая, что они имеют разные реализации. Таким образом, один обязан использовать меньше места, чем все остальные.

Btrfs имеет динамическое распределение inode, поэтому нет никакой необходимости заполнять таблицы inode для ext4 (размер для которого установлен во время создания файловой системы ext4).

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


Спасибо за быстрый ответ! Похоже, XFS - самый безопасный выбор на данный момент. Можно ли динамически изменять этот процент использования инода? и если нет, то есть ли способ предсказать, сколько потребуется?
abadys

1
Вы должны быть в состоянии сделать это сxfs_growfs -m XX
Anthon

3

Да, и учтите, что все зависит от ваших потребностей:

Btrfs (произносится как Масляная FS, Лучшая FS или B-Tree FS)

Учитывая, что btrfs сможет охватывать несколько жестких дисков, очень хорошо, что он может поддерживать в 16 раз больше дискового пространства, чем ext4 . Максимальный размер раздела файловой системы btrfs составляет 16 exbibytes, а также максимальный размер файла также равен 16 exbibytes.

Максимальное количество файлов: 2 ** 64

XFS

XFS является 64-разрядной , журнальной файловой системы высокой производительности. XFS поддерживает максимальный размер файловой системы 8 exbibytes для 64-битной файловой системы. Теперь RHEL 7.0 использует XFS в качестве файловой системы по умолчанию, включая поддержку использования XFS для /bootраздела.

Максимальное количество файлов: 2 ** 64

EXT4

Ext4 хорошо известно из - за чего улучшение скорости над ext3. Ext4 имеет некоторые ограничения. Максимальный размер файла составляет 16 ТБ, что примерно равно 17,6 ТБ. Максимальный объем / раздел, который вы можете получить с помощью ext4, составляет 1 exbibyte. Как и в большинстве современных файловых систем, это журнальная файловая система, которая означает, что она будет вести журнал того, где файлы в основном находятся на диске, и любых других изменений, которые происходят с диском. Независимо от всех своих функций, он не поддерживает прозрачное сжатие, прозрачное шифрование или дедупликацию данных. Снимки поддерживаются технически, но в лучшем случае такая функция является экспериментальной.

Максимальное количество файлов: 4 миллиарда

XFS против Btrfs

XFS не имеет никакого RAID, в то время как Btrfs RAID еще не полностью стабилен и находится на ранних стадиях. XFS все более зрелая, чем Btrfs , но мы не можем отрицать, что Btrfs является мощной и хорошо растущей файловой системой.

На данный момент XFS - мой выбор, особенно потому, что это стандартная FS на RHEL 7, если только мне не нужны Btrfs.


1
Это имеет некоторую хорошую справочную информацию о файловых системах в целом, но я не вижу конкретной проблемы небольших файлов, упомянутой здесь.
ilkkachu

@ilkkachu "большое количество маленьких файлов", что это значит? Все дело в inode, поскольку все файлы создаются через inode, а inode - это структура данных, используемая для представления объекта файловой системы. Поэтому я думаю, что объяснил все потребности автора, а также упомянул максимальное количество файлов.
FarazX

2

Я полагаю, что проблема у вас не в том, что раздел заполняется inode, а в исчерпании количества inode в файловой системе. ext4 резервирует inode статически при создании файловой системы, но вы можете установить число с опциямиmkfs.ext4 :

-i bytes-per-inode
Определяет отношение байтов к индексу. mke2fs создает индекс для каждого байта на индекс байтов пространства на диске. Чем больше отношение байтов к индексу, тем меньше будет создано инодов.

-N число инодов
Переопределяет вычисление по умолчанию количества инодов, которое должно быть зарезервировано для файловой системы (которое основано на количестве блоков и соотношении байтов на инод). Это позволяет пользователю указывать количество желаемых inode напрямую.

В руководстве четко указано, что число байтов на индекс Inode не может быть изменено после создания FS, но общее число будет масштабироваться в соответствии с отношением, если FS изменяется.

Вы также можете установить размер каждого inode. Значение по умолчанию составляет 256 байт в «большинстве» файловых систем, но может быть уменьшено до 128 (значение по умолчанию для «небольших» файловых систем). Дополнительное пространство используется для хранения расширенных атрибутов (например, меток SELinux), поэтому, если они вам не нужны, можно безопасно уменьшить размер до минимума.

-I inode-size
Укажите размер каждого inode в байтах. Значение размера inode должно быть на 2 больше или равно 128.

df -iдолжен показывать количество выделенных и использованных инодов. С опциями по умолчанию у одного 30-гигабайтного раздела, на который я смотрел, был один инод для каждых 16 кБ, но если ваши файлы очень малы, вы можете установить, скажем, -i 4096один инод для каждого блока данных в системе.

Если ваши файлы меньше 4096, вы можете также уменьшить размер блока файловой системы, поскольку для всех обычных файлов в любом случае потребуется один полный блок данных. (То есть на ext4. Я не знаю, выполняют ли другие текущие файловые системы упаковку небольших файлов.)

-b block-size
Указать размер блоков в байтах. Допустимые значения размера блока: 1024, 2048 и 4096 байт на блок. Если опущен, размер блока эвристически определяется размером файловой системы и ожидаемым использованием файловой системы (см. Параметр -T).

mkfs.ext4также имеет -T <type>опцию, которая может использоваться как сокращение для некоторых или всех из них. Настройки находятся в том /etc/mke2fs.conf, что на моем Debian, например, mkfs.ext4 -T smallэквивалентно

mkfs.ext4 -b 1024 -I 128 -i 4096

Что может быть неплохим набором опций для множества маленьких файлов (и без xattrs.)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.