Яка найефективніша файлова система Linux для зберігання безлічі малих файлів (HDD, а не SSD)?


43

У мене є дерево каталогів, яке містить багато невеликих файлів і невелику кількість великих файлів. Середній розмір файлу - близько 1 кілобайт. У дереві є 210158 файлів і каталогів (це число було отримано запуском find | wc -l).

Невеликий відсоток файлів додається / видаляється / переписується кілька разів на тиждень. Це стосується невеликих файлів, а також великих файлів (невеликої кількості).

Файлові системи, які я спробував (ext4, btrfs), мають деякі проблеми з позиціонуванням файлів на диску. З плином часу фізичні положення файлів на диску (носій, що обертається, а не твердотілий диск) стають більш розподіленими випадковим чином. Негативним наслідком цього випадкового розподілу є те, що файлова система стає повільнішою (наприклад: у 4 рази повільніше, ніж свіжа файлова система).

Чи існує файлова система Linux (або метод підтримки файлової системи), який не потерпає від зниження поглинання продуктивності та здатний підтримувати стабільний профіль продуктивності на обертовому носії? Файлова система може працювати на Fuse, але вона повинна бути надійною.


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

Я тихо здивований, коли знаю, що btrfs (з функцією копіювання під час запису) був млявим до вас протягом певного періоду часу. Мені цікаво, щоб результати ділилися з вами, можливо, допомагаючи один одному в новому напрямку настройки продуктивності.
Нікхіл Маллі

є новий онлайн-zfs для тварин на Linux, доступний у рідному режимі та реалізаціях запобіжників, якщо ви хочете подивитися.
Нікхіл Маллі

Я спробував zfs на Linux один раз, був досить нестабільним. Вдалося повністю зафіксувати файлову систему. Коробка працювала б, але будь-який доступ до ФС буде висіти.
Патрік

Подібна публікація serverfault.com/questions/6711/…
Nikhil Mulley

Відповіді:


47

Продуктивність

Я написав невеликий бенчмарк ( джерело ), щоб дізнатися, яка файлова система найкраще працює зі ста тисячами невеликих файлів:

  • створити 300000 файлів (512B до 1536B) з даними з / dev / urandom
  • переписати 30000 випадкових файлів і змінити розмір
  • читати 30000 послідовних файлів
  • прочитати 30000 випадкових файлів
  • видалити всі файли

  • синхронізувати та скинути кеш-пам'ять після кожного кроку

Результати (середній час у секундах, нижчий = кращий):

Using Linux Kernel version 3.1.7
Btrfs:
    create:    53 s
    rewrite:    6 s
    read sq:    4 s
    read rn:  312 s
    delete:   373 s

ext4:
    create:    46 s
    rewrite:   18 s
    read sq:   29 s
    read rn:  272 s
    delete:    12 s

ReiserFS:
    create:    62 s
    rewrite:  321 s
    read sq:    6 s
    read rn:  246 s
    delete:    41 s

XFS:
    create:    68 s
    rewrite:  430 s
    read sq:   37 s
    read rn:  367 s
    delete:    36 s

Результат:
Хоча Ext4 мав хорошу загальну продуктивність, ReiserFS був надзвичайно швидким при читанні послідовних файлів. Виявилося, що XFS повільний з багатьма невеликими файлами - не слід використовувати його для цього випадку використання.

Випуск фрагментації

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

Подальше читання

В Arch Wiki є кілька чудових статей, що стосуються продуктивності файлової системи:

https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types

https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices


4
Ви повинні вказати, для якої версії ядра ви базуєте це порівняння. XFS отримав деякі дуже значні скорочення швидкості в одному з останніх ядер (думаю, це було 2.6.31, але не цитуйте мене про це).
Патрік

1
btrfs внутрішньо робить ваш lvm трюк. Він виділяє менші шматки диска і розміщує файли в ці шматки, а потім виділяє лише інший фрагмент диска, коли наявні шматки заповнюються.
psusi

1
Це справедливо для будь-якої файлової системи. Ось чому додатки використовують такі речі, як fsync ().
psusi

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

1
@taffer Ваш "останній орієнтир" починає з квітня 2015 року, старший трьох років, і він використовує XFS лише з типовими параметрами. Це попередньо датує xfsprogs 3.2.3, що робить XFS v5 за замовчуванням та всі переваги, які він приносить. Він також не був відформатований з -m finobt = 1, який є змінником ігор для продуктивності XFS з невеликими файлами та великими оновленнями метаданих. Ні, срібних куль немає, але базувати свою думку на старих показниках не є розумним, особливо коли основні функції, що змінюють продуктивність, були проігноровані, недоступні або вимкнені.
Джоді Лі Брюшон

7

Я використовую ReiserFS для цього завдання, він спеціально створений для обробки багатьох невеликих файлів. Текст про це легко прочитати на wiki funtoo.

ReiserFS також має безліч функцій, спрямованих спеціально на покращення продуктивності невеликих файлів. На відміну від ext2, ReiserFS не виділяє місця для зберігання у фіксованих блоках одного k або чотирьох k. Натомість він може виділити потрібний розмір.


1
Також у ReiserFS є проблеми зі стабільністю - тому RH і SuSE відмовилися від цього FS. За принципом (BTree-based-FS) BTRFS має бути порівнянним.
Нілс


0

XFS відзначається тим, що дуже добре виступає в подібній ситуації. Це частина того, чому ми використовуємо його у своїй роботі для наших магазинів пошти (які можуть містити сотні тисяч файлів в 1 каталозі). Він має кращу стійкість до відмов, ніж ReiserFS, використовується в набагато ширшому застосуванні і, як правило, дуже зріла файлова система.

Крім того, XFS підтримує дефрагментацію в Інтернеті. Хоча він використовує техніку уповільненого розподілу, що призводить до меншої фрагментації (проти інших файлових систем) для початку.


20
XFS відзначається тим, що дуже добре виступає в подібній ситуації. [цитування потрібне]
відкласти

8
Ем, xfs особливо відома навпаки: дуже добре працювати з великими файлами, але не надто добре з малими! Подивіться, наприклад, цей вичерпний орієнтир (або перейдіть
Левіт

1
@Levit Я думаю, що ви неправильно читаєте цей звіт. Звіт дуже чітко показує, що XFS працює дуже добре для випадкових ІО. Але, окрім цього, у звіті не розглядається тип сценарію у цьому питанні, багато файлів. Випадковий IO - це одне, велика кількість файлів - це те, коли ext * падає на його обличчя.
Патрік

2
Єдине місце, де XFS дійсно краще, - це випадкові операції читання / запису (все ще здається дивним, що справді випадковий зразок читання на механічному диску здатний отримати 10 Мб / с - мені здається, що деяка оптимізація, яка не летить у реальному світі (imho)), тоді як на сторінці 7 показано саме те, що я говорив раніше, XFS справді добре обробляє великі файли! Подивіться на сторінки 3 і 5, особливо на 3 ви бачите, що вона обробляє невеликі файли явно не так добре, як ext! Я дійсно не маю нічого проти XFS, але з того, що ви знаходите майже скрізь, це не найкращий варіант для багатьох невеликих файлів - все, що я говорю!
Левіт

5
XFS також може бути дуже повільним, якщо мова йде про великі файли, якщо ці файли подовжуються випадковим чином / повільно невеликими шматками протягом тривалого часу. (Типовий syslogdзразок.) Наприклад, у мене в налаштуваннях XFS над MD я лише зауважив, що на видалення файлу 1,5 Гб зайняло 4,75 хвилин (!), Коли дисковий диск був обмежений обмеженням 100 транзакцій / с зі швидкістю запису. більше 2 Мб / с. Це також негативно впливає на продуктивність інших операцій вводу-виводу паралельного вводу-виводу на тому ж диску, оскільки диск вже виведений назовні. Ніколи не бачив нічого подібного в інших ФС (або тестувався в тестах).
Тіно
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.