Анатомія журналіруемих файлових систем Linux

Існує безліч визначень журналіруемих файлових систем, однак давайте наведемо формулювання, зрозумілу кожному: журналіруемая файлова система – це систем для тих, кому набридла програма перевірки fsck під час завантаження. Також це система для тих, кому близька ідея стійких до збоїв систем. Якщо некоректно вимкнути живлення у звичайній системі, де відсутня журнал роботи, то ОС виявляє цей факт і запускає утиліту перевірки цілісності диска fsck при наступному завантаженні. Ця утиліта сканує файлову систему і намагається усунути проблеми, не завдаючи шкоди даними. Процес перевірки може зайняти досить багато часу. Іноді файлова система пошкоджується настільки сильно, що ОС завантажується тільки в режимі одного і пропонує користувачеві провести подальше відновлення.







 



Скажи fsck

Ще гірше те, що процес fsck може запускатися операційною системою автоматичні при монтуванні файлової системи, щоб упевнитися, що метадані вірні (навіть якщо не було ушкоджень). Таким чином, усунення зайвих перевірок цілісності файлової системи – це помітна область для поліпшення.


Отже, тепер ви знаєте, хто потребує журналіруемих файлових системах, однак чому таким системам не потрібні перевірки fsck? Коротко – тому, що в них ведеться спеціальний журнал. Журнал – це файл, який представляє собою кільцевий буфер, до якого заносяться всі дії, пов'язані зі зміною файлової системи. Періодично ці зміни застосовуються до файлової системи. У випадку збою, журнал може бути використаний в якості відправної точки для відновлення незбережених даних і для запобігання пошкодження метаданих.


Резюмуючи, скажемо, що журналіруемая файлова система – це стійка до збоїв файлова система, команди зміни для якої заносяться в журнал, перш ніж бути виконаними, що допомагає уникнути пошкодження метаданих. (Див. малюнок 1). Як завжди в Linux, існує безліч варіантів таких систем. Давайте зробимо невеликий огляд історії файлових систем, а потім розглянемо наявні на сьогодні файлові системи та їх відмінності.







 



Що таке метадані?

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


Малюнок 1. Типова журналіруемая файлова система.

Історія журналіруемих файлових систем Linux


IBM першою розробила журналіруемую файлову систему, яка називалася JFS (Journaled File System). Перша версія JFS була представлена в 1990 році, а сучасна версія підтримується в Linux як JFS2, розроблена пізніше. У 1994 році компанія Silicon Graphics представила високопродуктивну файлову систему XFS для ОС IRIX. У 2001 році XFS була портована для Linux. У 1998 році для систем Amiga була розроблена файлова система Smart File System (SFS), яка згодом випускалася під ліцензією GNU Lesser General Public License (LGPL) і отримала підтримку в Linux 2005 році. Найбільшого поширення отримала файлова система ext3fs (від англ. third extended file system), яка є розширенням системи ext2 з додаванням журналювання. Підтримка ext3fs з'явилася в Linux в 2001 році. І нарешті, одержала широке поширення журналіруемая файлова система ReiserFS відкрила багато нових шляхів і можливостей для розвитку. Проте розвиток цієї системи сповільнився у зв'язку з юридичними проблемами її автора.


Різновиди журналірованія


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

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


Правила застосування змін, зафіксованих у журналі, також можуть бути різними в різних підходах. Наприклад, коли слід застосовувати зміни? Коли журнал повний? Або коли закінчується якийсь таймаут?


Журналіруемие файлові системи сьогодні


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


JFS2


JFS2 (також відома як поліпшена журналіруемая файлова система) є першою журналіруемой файловою системою і довгий час застосовували в ОС IBM AIX ®, перш ніж була перенесена в Linux. JFS2 – це 64-розрядна файлова система, яка, маючи коріння оригінальної JFS, була помітно вдосконалена в плані масштабованості і підтримки багатопроцесорних архітектур.


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


JFS2 також використовує B +-дерева як для ефективного пошуку за каталогами, так і для управління дескрипторами екстент. JFS2 не має власної політики перенесення змін на диск, – замість цього вона грунтується на таймаут демона kupdate.


XFS


XFS – ще одна з ранніх журналіруемих файлових систем, спочатку розроблена Silicon Graphics в 1995 році для ОС IRIX. У 2001 році XFS була реалізована в Linux, вже будучи на той момент продуманої і надійної файлової системою.


XFS використовує повноцінну 64-розрядну адресацію і забезпечує дуже високу продуктивність за рахунок застосування B +-дерев для розміщення каталогів і файлів. XFS зберігає дані у вигляді екстент, підтримуючи змінний розмір екстент (від 512 байт до 64 кілобайт). Поряд з екстент в XFS застосовується відкладене розміщення, при якому розміщення блоків затримується до тих пір, поки не настане час їх запису на диск. Така особливість підвищує ймовірність заповнення поспіль декількох дискових блоків, оскільки на момент запису буде відомо їх кількість.


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


Третя розширена файлова система (ext3fs)


Третя розширена файлова система (ext3fs) – найбільш популярна журналіруемая файлова система, що виникла як еволюція відомої файлової системи ext2. Насправді вона сумісна з ext2, тому що оперує ідентичними структурами, але з додаванням журналу. Більше того, можливо змонтувати розділ ext3 як ext2 або перетворити ext2 в ext3, використовуючи утиліту tune2fs.


У ext3fs підтримуються всі три стратегії журналювання (зворотний запис, упорядкування і режим даних), однак за замовчуванням використовується режим упорядкування. Політику перенесення даних журналу на диск можна налаштовувати, але спочатку вона така, що перенесення відбувається або за заповненні 1 / 4 журналу, або після закінчення одного з таймерів переносу.


Один з головних недоліків ext3fs походить з того, що вона спочатку не замислювалася як саме журналіруемая файлова система. Оскільки вона заснована на ext2fs, в ній відсутні багато прогресивні нововведення, наявні в інших файлових системах (наприклад, екстенти). Також вона зазвичай показує слабку продуктивність у порівнянні з ReiserFs, JFS і XFS, проте менше навантажує процесор і споживає пам'яті, ніж багато інших файлові системи.


ReiserFS







 



Що таке ущільнення хвостів?

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


Файлова система ReiserFS з самого початку створювалася як журналіруемая. У 2001 році вона була додана в головну вітку ядра 2.4 і стала першою журналіруемой файловою системою, що з'явилася в Linux. Основний метод журналірованія – упорядкування. Підтримується збільшення розміру файлової системи "на льоту". ReiserFS також підтримує ущільнення хвостів для динамічного зменшення фрагментації, що дозволяє їй обганяти по швидкості ext3fs при роботі з маленькими файлами.


У ReiserFS (також її називають ReiserFS v3) застосовується багато сучасних підходів, наприклад B +-дерева. Формат файлової системи базується на єдиному B +-дереві, що робить операції пошуку особливо швидкими і масштабованими. Політика перенесення даних з журналу на диск залежить від розміру журналу і заснована на кількості блоків, що вимагають перенесення.


Репутація ReiserFS була кілька разів зіпсована: останній раз – проблемами автора системи до закону.


Майбутнє журналіруемих файлових систем


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


Reiser4


Після успішного впровадження ReiserFS в ядро і застосування у багатьох дистрибутивах Linux компанія Namesys (яка стоїть за ReiserFS) розпочала роботу над новою журналіруемой файловою системою, Reiser4, яка була створена повністю з нуля і включає в себе безліч передових можливостей.


Поліпшене журналирование в Reiser4 досягається за рахунок використання блукаючих записів і відкладеного розміщення блоків до моменту перенесення даних журналу (як це було зроблено в XFS). В архітектурі Reiser4 передбачалася гнучка підтримка плагінів (наприклад, щоб додати функції стиснення або шифрування), але ця ідея була відкинута Linux-спільнотою, яке вважало, що місце цим розширеним функціям – У підсистемі віртуальної файлової системи (VFS).


Після винесення звинувачення власнику Namesys і одночасно автору ReiserFS вся комерційна діяльність навколо Reiser4 була припинена.


Четверта розширена файлова система


Четверта розширена файлова система (ext4fs) – це подальший розвиток ext3fs. Ext4fs була задумана як заміна ext3fs, що має з нею пряму і зворотну сумісність, але включає в себе безліч поліпшень (Деякі з яких порушують цю сумісність). На практиці можна монтувати розділ ext4 як ext3 і навпаки.


По-перше, ext4fs – це 64-розрядна файлова система з підтримкою томів величезного розміру (до 1 ексабайта). Вона також може використовувати екстенти, але в цьому випадку втрачається сумісність з ext3fs. Аналогічно XFS і Reiser4, в ext4fs розміщення блоків на диску затримується і відбувається по необхідності (що зменшує фрагментацію). Журнал також зберігає контрольні суми вмісту для більшої надійності. Замість B + – або B *- дерев застосовується спеціальний різновид B-дерева, т.зв. H-дерево, що дозволяє піддиректоріях мати набагато більший розмір (в ext3 він обмежений 32Кб).


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


Ще одна цікава відмінність ext4fs від ext3fs полягає в точності тимчасової мітки файлів. У ext3 розмірність тимчасової мітки – одна секунда. Ext4fs дивиться в майбутнє: при безперервному зростанні швидкостей процесора і інтерфейсів потрібно більш точне вимірювання. Тому як розмірності часу була взята одна наносекунд.


Хоча ext4fs включена в ядро Linux у версії 2.6.19, вона вже може вважатися стабільною. Ця система, розробка якої триває, є відправною точкою для створення журналіруемой файлової системою майбутнього в Linux.


Рухаючись далі


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


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*