Журнальні файлові системи (journal file system).
За останні роки Linux придбала чимало нових можливостей і застосовується в багатьох гетерогенних середовищах. Linux працює на мікроконтролерах, застосовується в маршрутизаторах, служить для підтримки апаратних прискорювачів тривимірної графіки, підтримує Многоекранний середу Xfree. Все це важливі функції для кінцевих користувачів. Але чимало зроблено і для задоволення вимог, що пред'являються до серверів, особливо, з моменту переходу на ядро Linux 2.2.x.
Завдяки широкій підтримці галузі і зусиллям, що вживаються прихильниками вільно розповсюджуваних програм, Linux набула важливі риси, властиві комерційним версіями Unix і інших ОС для великих серверів. Одна з таких рис - підтримка файлових систем, здатних працювати з великими розділами жорстких дисків, легко масштабироваться на багато тисяч файлів, швидко відновлюватися після збою, підтримувати більш високу продуктивність введення / виводу, ефективно працювати з файлами самого різного розміру, протистояти внутрішньої і зовнішньої фрагментації і навіть надавати нові функції, які не підтримуються ні в одній з більш традиційних файлових систем.
У цьому розділі ми познайомимося з так званими журнальними файловими системами (journal file system): JFS. Ext3 і ReiserFS.
Внутрішня фрагментація
Логічний блок - мінімальна одиниця дискового простору, яку резервує файлова система за допомогою системних викликів. Якщо розмір файлу менше числа байт в логічному блоці, то на диску він все одно буде займати один блок. Таким чином, якщо довжина конкретного файлу не ділиться без остачі на число байт в логічному блоці (розмір файлу MOD розмір блоку є0), то файлова система буде змушена резервувати новий блок, який залишиться незаповненим до кінця, що призводить до нераціонального використання дискового простору. Така зайва трата простору на диску називається внутрішньої фрагментацією. Чим більше розмір логічного блоку, тим більше буде і внутрішня фрагментація.
зовнішня фрагментація
Зовнішня фрагментація виникає в ситуації, коли логічні блоки конкретного файлу розкидані по всьому диску, що призводить до уповільнення операцій з даним файлом, оскільки вимагає більшої кількості рухів голівки, що зчитує диска.
Екстент дозволяє більш ефективно витрачати дисковий простір, оскільки всі блоки в ньому розташовуються послідовно. Крім того, при читанні файлу виконується менше рухів голівки, що зчитує. Використання екстентів скорочує негативний ефект зовнішньої фрагментації, оскільки більше число блоків зберігається послідовно. У тому випадку, якщо з додатком необхідний екстент, близький за розміром до логічного блоку, переваги від його застосування зводяться до мінімуму, оскільки в результаті створюється безліч невеликих екстентів, які гратимуть роль звичайних логічних блоків. Зростання продуктивності при використанні екстентів досягається за рахунок зменшення переміщень між секторами і скорочення числа промахів при зверненні до кеш-пам'яті диска.
Екстенти дозволяють ефективно організовувати великі ланцюжка вільних, послідовно розташованих блоків. Вони допомагають скоротити обсяг дискового простору, необхідний для відстеження вільних блоків, дозволяючи тим самим збільшити продуктивність.
B + дерева широко використовуються в індексних структурах баз даних, забезпечуючи швидкий і масштабований доступ до записів. Назва «B + дерево» - скорочення від Balanced Tree ( «збалансоване дерево»). Знак «+» вказує на те, що це модифікована версія «вихідного» B-дерева; вона містить покажчики, які пров'язують між собою листя дерева, що допомагає послідовному доступу.
B + дерева складаються з вузлів двох різних типів: проміжні вузли і кінцеві вузли (листя). Всі вузли містять в собі безліч пар (ключ, покажчик), впорядковані за значенням ключа в порядку зростання. Покажчики проміжних вузлів служать для посилання на інші покажчики проміжних або кінцевих вузлів, покажчики кінцевих вузлів - безпосередньо на інформацію. Ключ застосовується для організації інформації всередині B + дерева. У базах даних кожна запис має поле ключа, за значенням якого розрізняють записи одного і того ж типу. B-дерева використовують ключ для побудови індексу записів баз даних, який дозволяє скоротити час доступу до них. Порівнюючи поточний ключ з ключем шуканого вузла, програма знаходить необхідну інформацію.
UNIX File System
UFS - назва файлової системи, що використовувалася в SCO Unix, System V і деяких інших ранніх варіантах Unix. Ядро Linux включає факультативну підтримку UFS. Більшість діалектів Unix як і раніше використовує UFS, хоча і з невеликими специфічними модифікаціями.
Virtual File System
VFS - спеціальний рівень в ядрі, який надає уніфікований API-інтерфейс файлових служб, що не залежить від того, в якій саме файлової системи розміщується файл. Все реалізації файлової системи (vfat, ext2fs, jfs і т.д.) повинні надавати певні функції VFS, щоб їх можна було використовувати в Linux. Цей рівень абстракції дає призначеним для користувача додатків можливість працювати з безліччю різних файлових систем, в тому числі, і з комерційно розповсюджуваними продуктами.
Що таке журнальна файлова система
Загальновідомо, що представляє собою кеш-пам'ять - буфер, зарезервований у швидкій пам'яті і призначений для прискорення операцій введення / виводу. Такого роду буфер часто використовується в файлових системах (його називають дисковим кешем) і в базах даних для збільшення загальної продуктивності. Проблема виникає в тому випадку, якщо в системі стався збій перш, ніж буфери були записані на диск; в такому випадку після перезавантаження системи вона буде перебувати в суперечливому стані. Уявіть собі, що файл був видалений з кеша, але залишився на жорсткому диску. Ось чому бази даних і файлові системи повинні мати можливість повертати систему в несуперечливе стан. За довгі роки вдосконалення баз даних були створені способи, що дозволяють швидко відновлювати їх, проте, час відновлення файлових систем і, більш конкретно, UFS-подібних систем збільшується в міру зростання розмірів файлової системи. Утиліта відновлення fsck для ext2fs повинна просканувати розділ диска цілком, щоб повернути файлову систему назад в несуперечливе стан. Через те, що ця задача вимагає дуже великих витрат часу в разі великих серверів з сотнями гігабайт, а іноді і терабайт даних, говорити про високий рівень готовності подібних систем не доводиться. Саме це стало основною причиною створення для файлових систем технології, подібної технології відновлення баз даних, в силу чого і з'явилися журнальні файлові системи.
механізм роботи
Журнальні файлові системи використовують ту ж методику для реєстрації операцій файлової системи, завдяки чому файлову систему можна відновити за дуже невеликий проміжок часу.
Важлива відмінність між базами даних і журналированием файлових систем полягає в тому, що бази даних реєструють користувачів і керуючі дані, в той час як в файлових системах реєстрація, як правило, обмежується тільки метаданими, тобто її внутрішніми керуючими структурами (описатели inode, таблиці резервування вільних блоків, таблиці inode і т.д.).
Рішення проблеми масштабованості.
UFS і ext2fs створювалися за часів, коли жорсткі диски і інші носії не відрізнялися великою ємністю. Зростання ємності привів до появи файлів, каталогів і розділів більшого розміру, що, в свою чергу, породило ряд серйозних проблем, пов'язаних з файлової системою. Ці проблеми - наслідок обмежень внутрішніх структур, які використовуються при побудові файлових систем. Такі структури були цілком адекватні для середнього розміру старих файлів і каталогів, однак, в нових умовах вони стали неефективні. Старі структури породжують дві серйозні проблеми.
Вони не в змозі підтримувати зрослі обсяги зберігання. Старі файлові системи були розраховані на певні розміри файлів, каталогів і розділів. Структури файлової системи виділяли певну кількість розрядів під дані про розмір файлу, фіксоване число розрядів для зберігання номера логічного блоку і т.д. Як наслідок жорстких обмежень на число розрядів для поля розміру накладалися певні обмеження і на розмір файлів і розділів, а також на кількість елементів в каталозі.
Вони не придатні для управління новими обсягами зберігання. Хоча старі структури іноді здатні підтримувати нові розміри об'єктів, на практиці часто це неможливо з міркувань продуктивності. Деякі структури прекрасно працюють зі старими розмірами, але в новій ситуації часто стають причиною різкого падіння продуктивності.
Файлові системи останнього покоління створювалися з урахуванням необхідності вирішити проблеми масштабованості. У них реалізовані деякі нові структури і методи.
У більшості нових файлових систем збільшено число розрядів, що відводяться під зберігання деяких полів з тим, щоб подолати існуючі раніше обмеження.
В даний час максимальний розмір блочного пристрою обмежує розмір файлової системи 2 Тбайт. Крім того, в VFS існує обмеження на розмір файлу в 2 Гбайт. Однак важливо відзначити, що тепер файлові системи можуть масштабироваться, і з випуском ядра Linux 2.4 ці обмеження подолані. JFS і XFS - комерційні версії файлових систем, призначені для тих ОС, в яких подібних обмежень немає.