inode, порівняння споживаного простору для багатьох невеликих файлів (xfs, btrfs, ext4)


9

У мене є розділ ext4 (LVM на VM) з великою кількістю невеликих файлів , які мені доводиться продовжувати кожні 3-4 місяці.

Що стосується кількості простору, що використовується вводами.

Чи використовує одна з файлових систем xfs, btrfs або ext4 менше місця?

Іншими словами, чи перехід на btrfs чи xfs зробить розділ заповненням inodes повільніше, аніж ext4?


якщо ви використовуєте ext4 і очікуєте, що він буде зберігати здебільшого невеликі типи, вам слід створити його з mkfs.ext4 -t newsнайкращими результатами. Також я б запропонував тестувати - створити (наприклад, на lvm або пристрої циклу) кожен із файлів файлів по черзі та розпочати копіювання реальних файлів до нього, поки він не заповниться. Коли це заповниться, виконайте df -i(або find | wc -l), щоб знайти, який з них вдалося зберегти більшість ваших файлів - таким чином ви точно знатимете.
Matija Nalis

1
@MatijaNalis, -Tз великого регістру T. У конфігураційному файлі є і інші корисні варіанти
ilkkachu

@ilkkachu правильно, дякую. Це повинно бутиmkfs.ext4 -T news
Matija Nalis

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

Відповіді:


6

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

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

XFS є динамічним аналогічним чином, але має обмеження (відсоток файлової системи, яку можна використовувати для inodes), тому там, чи заповнити ви допуск, залежить від встановленого відсотка, а також від кількості файлів / розмірів файлів


Дякуємо за швидку відповідь! Схоже, XFS - це найбезпечніший вибір на даний момент. Чи може цей відсоток використання індексу змінюватися динамічно? а якщо ні, то чи є спосіб передбачити, скільки потрібно?
abadys

1
Ви повинні мати можливість це зробитиxfs_growfs -m XX
Антон

3

Так, і пам’ятайте, що все залежить від ваших потреб:

Btrfs (вимовляється як Butter FS, Better FS або B-Tree FS)

Враховуючи те, що btrfs зможе охоплювати декілька жорстких дисків, це дуже непогана позиція, що вона може підтримувати в 16 разів більше місця на диску, ніж ext4 . Максимальний розмір розділу файлової системи btrfs - 16 екбібайт, а також максимальний розмір файлу - 16 екбібайт.

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

XFS

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

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

EXT4

Ext4 добре відомо з - за чого поліпшення швидкості над ext3. У ext4 є деякі обмеження. Максимальний розмір файлу - 16 тебібайт (що приблизно становить 17,6 терабайт). Найбільший об'єм / розділ, який ви можете мати з ext4, - 1 екбібайт. Як і в найсучасніших файлових системах, це файлова система журналу, що означає, що вона буде вести журнал, де файли знаходяться в основному на диску, та про будь-які інші зміни, що трапляються на диску. Незалежно від усіх його функцій, він не підтримує прозоре стиснення, прозоре шифрування чи дедупликацію даних. Знімки підтримуються технічно, але така функція в кращому випадку експериментальна.

Максимальна кількість файлів: 4 мільярди

XFS проти Btrfs

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

Наразі XFS - це мій вибір - тим більше, що це FS за замовчуванням на RHEL 7 - якщо мені справді не потрібні Btrfs.


1
Тут є гарна довідкова інформація про файлові системи в цілому, але я не бачу конкретної проблеми невеликих файлів тут.
ilkkachu

@ilkkachu "велика кількість невеликих файлів", що це означає? Вся справа в inode, оскільки файли створюються через inodes, а inode - це структура даних, яка використовується для представлення об'єкта файлової системи. Тому я думаю, що я пояснив усі потреби автора, плюс я згадав про максимальну кількість файлів.
FarazX

2

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

-i bytes-per-inode
Задайте співвідношення байтів / inode. mke2fs створює inode для кожного байта на кожен байт простору на диску. Чим більше співвідношення байтів на ввід, тим менше буде створено кількість входів.

-N число-входів
Переосмислює обчислення за замовчуванням кількості входів, які слід зарезервувати для файлової системи (що базується на кількості блоків та байті на коефіцієнт введення). Це дозволяє користувачеві безпосередньо вказати кількість потрібних входів.

У посібнику чітко зазначено, що байт на коефіцієнт inode не може бути змінено після створення FS, але загальне число буде масштабуватися, щоб відповідати співвідношенню, якщо змінити FS.

Ви також можете встановити розмір кожного входу. За замовчуванням 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.