Файлові системи Linux

basic concepts of varios file systems of Linux

На відміну від Windows і macOS, які знаходяться під суворим контролем корпорацій Microsoft і Apple відповідно, Linux є великим проектом з відкритим кодом, розробленим спільнотою ентузіастів. Код цієї ОС відкритий для будь-кого, хто хоче зробити свій внесок у її розробку, і будь-хто може вільно налаштувати її відповідно до власних потреб або створити свій дистрибутив на її основі. Ось чому існує стільки варіантів ОС Linux, і те саме стосується її файлових систем, які є фундаментальною частиною будь-якої операційної системи, як вже було зазначено в статті про основи файлових систем. Ядро Linux підтримує безліч файлових систем, але найбільш часто використовуваними є ФС сімейства Ext, XFS, Btrfs, F2FS, JFS і ReiserFS. Нижче ви можете знайти короткий опис кожної з них разом з її головними особливостями. Ви також можете ознайомитися з основними технологіями, пов'язаними з цими файловими системами Linux.

Зверніть увагу: Linux також надає підтримку читання та запису для файлових систем інших платформ, як-от NTFS, FAT32 і exFAT під Windows від Microsoft, HFS+ під macOS і ZFS під BSD, Solaris, Unix, про які йдеться у відповідних статтях.

Ext

Ext (з англ. Extended File System, Розширена файлова система) – перша ФС, розроблена спеціально для Linux та випущена у 1992 році. Однак вона мала серйозні обмеження у продуктивності та була швидко замінена на Ext2. Ця файлова система та її пізніші версії – Ext3 і Ext4 – стали опціями за замовчуванням для переважної більшості дистрибутивів Linux.

Ext2 виявилась більш ефективною завдяки своїй структурі, що базується на індексних дескрипторах (inodes чи інодах). Кожен такий дескриптор зберігає атрибути певного об'єкта, наприклад, файлу чи каталогу, і вказує на розташування його даних. У Ext2 простір для зберігання поділено на блоки, які, у свою чергу, утворюють більші одиниці, Групи блоків (Block Groups). Інформація про всі Групи блоків зберігається у Таблиці дескрипторів (Descriptor Table), що розташовується одразу після Суперблоку (Superblock). Кожна Група блоків зберігає індексні дескриптори у власній Таблиці індексних дескрипторів (Inode Table). А також відстежує стан власних блоків і індексних дескрипторів за допомогою бітових мап блоків та індексних дескрипторів (Block Bitmap та Inode Bitmap). У той же час ім'я файлу чи каталогу не міститься у його індексному дескрипторі – імена пов'язуються з відповідними номерами індексних дескрипторів через каталоги, реалізовані як особливий тип файлів.

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

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

Ext4 є вдосконаленою версією Ext3, у якій змінився метод розподілу даних: з окремих блоків на екстенти. Головна ідея полягає в тому, щоб записати більшу частину даних файлу в безперервну область для зберігання, а потім занотувати лише адресу першого блоку та загальну кількість блоків у безперервній послідовності. Безпосередньо в індексному дескрипторі можуть зберігатися до чотирьох екстентів, тоді як решта впорядковуються як B+-дерево. Крім того, Ext4 відкладає операцію, доки дані не будуть насправді розміщені на диску, і у такий спосіб здатна мінімізувати фрагментацію.

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

XFS

XFS (з англ. Extended File System, Розширена файлова система) — ще одна дуже зріла файлова система, яка була створена Silicon Graphics і спочатку застосовувалась на серверах IRIX компанії. У 2001 році вона потрапила до ядра Linux і зараз підтримується більшістю дистрибутивів цієї ОС, деякі з яких, наприклад Red Hat Enterprise Linux, навіть використовують її за замовчуванням.

Цей тип ФС оптимізований для зберігання дуже великих файлів і томів на одному хості. У ній простір для зберігання розділений на області однакового розміру, які називаються Групами розподілу (Allocation Groups). Кожна з груп діє як окрема файлова система, тобто має власний Суперблок (Superblock), керує власними структурами і стежить за використанням простору для зберігання. Для контролю над останнім застосовуються B+-дерева, одне з яких фіксує перший блок в безперервній області вільного простору, а інше – кількість блоків, з яких він складається. Блоки для файлів виділяються за тим самим підходом на основі екстентів. Усі файли та каталоги в XFS представлені індивідуальними індексними дескрипторами (inodes чи інодами). Розподіл екстентів може зберігатися безпосередньо в індексному дескрипторі або відстежуватися за допомогою пов'язаного з ним B+-дерева, у разі дуже великого або фрагментованого файлу. І так само, як індексні дескриптори у Ext, ці не містять імен, які, натомість, доступні лише у відповідних записах каталогу.

XFS застосовує журналювання до будь-яких оновлень метаданих. Усі зміни спочатку записуються до журналу, перш ніж блоки будуть фактично змінені, що дозволяє миттєво відновити їх у разі будь-яких несправностей. Загалом цей тип ФС вирізняється високою масштабованістю та дуже добре працює на серверному обладнанні.

Btrfs

Btrfs (з англ. B-tree File System, Файлова система на основі B-дерев) є одним із найпопулярніших форматів нового покоління для Linux і наразі докладається багато зусиль, щоб зробити його стабільним. Ця ФС була розроблена Oracle і підтримується основним ядром Linux з 2009 року. Fedora і SUSE вже використовують її за замовчуванням.

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

Як випливає з назви, Btrfs значною мірою покладається на B-дерева, кожне з яких складається з внутрішніх вузлів і листів. Внутрішній вузол вказує на дочірній вузол або на лист, тоді як лист містить елемент із певною інформацією. Фактичний дизайн і вміст елемента залежать від типу даного B-дерева. Кореневе B-дерево (Root B-tree), місцерозташування якого доступне в Суперблоці (Superblock), має посилання на решту B-дерев. B-дерево фрагментів (Chunk B-tree) керує зіставленням логічної адреси з фізичною, тоді як B-дерево пристроїв (Device B-tree), навпаки, пов'язує фізичні блоки пристроїв з їхніми віртуальними адресами. B-дерево файлової системи (File System B-tree) відповідає за розміщення файлів і папок. Невеликі файли зберігаються прямо у ньому, у внутрішніх елементах-екстентах. А більші за розміром розміщуються зовні в суміжних областях, які називаються екстентами. У такому випадку елемент-екстент має посилання на всі екстенти, у яких містяться дані файлу. Елементи-каталоги містять імена файлів і вказують на їхні індексні дескриптори. Індексні дескриптори, у свою чергу, використовуються для зберігання інших властивостей, таких як розмір, дозволи тощо.

Btrfs – це файлова система на основі Копіювання при записуванні (Copy-on-Write (CoW)). Замість того, щоб використовувати журналювання, вона робить копії з блоків перед тим, як змінити їх, а потім записує ці дані до іншого вільного місця. Цей механізм допомагає усунути ризик пошкодження даних у разі, якщо оновлення перерветься, наприклад, через втрату живлення. Завдяки цій та низці інших привабливих функцій Btrfs знаходить все більше прихильників серед сучасних користувачів Linux.

F2FS

F2FS (з англ. Flash-Friendly File System, Файлова система адаптована до пристроїв на основі флеш-пам'яті) – ще один сучасний формат, представлений компанією Samsung Electronics у 2012 році. Ця ФС була розроблена спеціально для пристроїв на базі флеш-пам'яті NAND і, отже, найбільш широко використовується в сучасних смартфонах і на портативних накопичувачах.

F2FS працює на основі підходу лог-структурованої файлової системи (англ. log-structured FS чи LFS) і враховує такі особливості флеш-пам'яті, як постійний час доступу та обмежену кількість циклів перезапису даних. Замість того, щоб створювати один великий фрагмент для запису, F2FS збирає блоки (до 6) в окремі фрагменти, які записуються одночасно.

Вона розбиває простір для зберігання на сегменти фіксованого розміру. Послідовні сегменти складають секцію, а кілька секцій утворюють зону. Розподіл даних у них здійснюється за допомогою вузлів. Останні бувають трьох типів: прямі, непрямі та індексні дескриптори (inodes чи іноди). Індексний дескриптор зберігає метадані, включно з ім'ям, розміром та іншими властивостями файлу; прямий вузол вказує на розташування його блоків даних, тоді як непрямий вказує на блоки в інших вузлах. Фізичні адреси цих вузлів можна знайти в Таблиці адрес вузлів (Node Address Table чи NIT). Сам вміст зберігається в основній області (Main Area). Секції в ній відокремлюють блоки даних від блоків вузлів зі службовою інформацією. Статус використання всіх блоків можна знайти у Таблиці інформації про сегмент (Segment Information Table або SIT). Область зведення сегментів (Segment Summary Area чи SSA) визначає, які блоки виділені якому вузлу.

Коли вільні сегменти закінчуються, F2FS самостійно очищає себе у фоновому режимі, коли система неактивна. Алгоритм очищення обирає сегменти-жертви за кількістю використаних блоків відповідно до таблиці SIT або за їх "віком".

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

JFS

JFS (з англ. Journaled File System, Журнальована файлова система) була створена IBM у 1990 році. Оригінальна версія, яку ще іноді називають JFS1, була застосована в ОС AIX згаданої компанії. Пізніше, після того, як вона стала ФС з відкритим кодом, JFS2 була перенесена на Linux.

Том JFS складається з областей, які називаються Групами розподілу (Allocation Groups), і кожна з яких містить один або кілька наборів файлів (FileSets). Усі файли та каталоги описуються індивідуальними індексними дескрипторами (inode чи інодами), тоді як власне вміст представлений одним або кількома екстентами. Усі екстенти проіндексовані у спеціальному B+-дереві. Вміст невеликих каталогів зберігається в їхніх індексних дескрипторах, тоді як більші за розміром організовані як B+-дерева. Останні також контролюють використання простору для зберігання: перше дерево зберігає початкові блоки вільних екстентів, а друге – кількість вільних екстентів. JFS також має окрему область журналу (log area) і робить у ній відповідний запис щоразу, коли відбувається якась зміна метаданих.

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

ReiserFS

ReiserFS – альтернативний формат Linux, оптимізований для зберігання великої кількості невеликих файлів. Він був розроблений компанією Namesys у 2001 році та приніс із собою низку нових функцій, які були дуже інноваційними на момент його появи. Але згодом через певні технічні проблеми обслуговування цієї ФС передали волонтерам.

В основі ReiserFS лежить S+-дерево, яке складається з внутрішніх і листових вузлів. Ця структура використовується для керування всіма файлами, каталогами та метаданими. Дерево містить елементи чотирьох основних типів: прямі, непрямі, елементи каталогу та елементи статистики. Прямі елементи містять фактичні дані, непрямі лише посилаються на певні блоки даних, елементи каталогу представляють записи в каталозі, а елементи статистики містять властивості файлів і папок. Кожен елемент має свій унікальний ключ, який використовується для визначення його місцезнаходження у дереві. Цей ключ містить ідентифікатор елемента, його адресу та тип.

Файли та фрагменти файлів, які не займають весь блок, об'єднуються та зберігаються безпосередньо в листових вузлах S+-дерева. Цей механізм називається tail-packing ("пакування хвостів") і допомагає зекономити простір та зменшити фрагментацію. Крім того, ReiserFS не вносить жодних змін безпосередньо до S+-дерева, а, натомість, спочатку записує їх у журнал, а потім копіює до потрібного місця на сховищі.

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

Підказка: Інформацію про можливість успішного відновлення даних із зазначених типів ФС можна знайти в статтях, що описують особливості відновлення даних із різних операційних систем та шанси на відновлення даних. Щоб зрозуміти, як виконувати цю процедуру, скористайтеся посібником з відновлення даних у Linux.

Інші технології зберігання даних Linux

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

Ось деякі з найпоширеніших технологій зберігання даних, з якими можна комбінувати файлові системи Linux:

  • Logical Volume Manager (LVM) – технологія керування дисками, яка забезпечує більш гнучкий і ефективний розподіл простору для зберігання даних порівняно з традиційним розподілом на розділи. Вона підтримується більшістю файлових систем Linux, включно з Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS і ReiserFS. З її допомогою можна формувати пули зберігання, що охоплюють кілька фізичних пристроїв зберігання даних, і створювати на них логічні томи, які можна пристосовувати. Тонке виділення (thin provisioning), спеціальна функція LVM, дозволяє оптимізувати використання сховища шляхом динамічного розподілу простору для зберігання у міру того, як дані фактично записуються на томи. У цьому разі виділений "тонкий пул" використовується як джерело, а томи, створені в ньому, називаються "тонкі томи". Віртуальний розмір такого тому може перевищувати реальний обсяг простору для зберігання, доступного в тонкому пулі.

    Підказка: Будь ласка, перегляньте наступні інструкції, якщо вам потрібно відновити дані з тому LVM з тонким виділенням.

  • mdadm – утиліта Linux, призначена для створення та керування програмним RAID. Вона об'єднує кілька фізичних дисків в один логічний блок із можливістю покращити продуктивність сховища та/або забезпечити його відмовостійкість. mdadm підтримує різні рівні RAID, у тому числі RAID 0 (striping, смуги чи чергування), RAID 1 (mirroring, дзеркало або дзеркалювання), RAID 5 (смуги/чергування з парністю), RAID 6 (подвійна парність) і RAID 10 (дзеркало смуг). RAID, створений з її допомогою, відображається у Linux як єдиний логічний блоковий пристрій і може бути відформатований із застосуванням будь-якої файлової системи, яка підтримується ядром.

    Підказка: Будь ласка, зверніться до відповідної статті, якщо вам потрібно відновити дані з RAID.

  • LUKS (Linux Unified Key Setup) – стандарт для шифрування блокових пристроїв у Linux, що робить дані, що зберігаються на них, недоступними без правильного ключа шифрування. Він сумісний із широким спектром файлових систем Linux, включно з Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS і ReiserFS. На додаток LUKS можна використовувати в поєднанні з іншими технологіями зберігання даних Linux, як-от LVM або mdadm, щоб виконати шифрування томів під керуванням цих систем.

    Підказка: Подивіться відповідні інструкції, якщо вам потрібно відновити дані з тому, зашифрованого LUKS.

  • eCryptfs – власна криптографічна файлова система Linux. Вона дозволяє шифрувати окремі каталоги або файли в межах тому, не застосовуючи повнодискове шифрування. Працюючи як "складена" (stacked) файлова система, eCryptfs накладає своє шифрування поверх існуючої файлової системи, зберігаючи при цьому структуру останньої. Таким чином, стандартна файлова система Linux, як-от Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS або ReiserFS, залишається відповідальною за керування блоками даних та іншими метаданими, тоді як eCryptfs забезпечує шифрування та розшифрування вмісту файлів під час доступу до них.

    Підказка: Зверніться до інструкцій, якщо вам потрібно відновити дані, зашифровані за допомогою eCryptfs.

  • Btrfs-RAID – функція RAID, вбудована у файлову систему Btrfs. Це дозволяє користувачам налаштовувати гнучкі відмовостійкі томи, що складаються з кількох пристроїв для зберігання даних. Btrfs підтримує RAID різних рівнів, у тому числі RAID 0 (striping, смуги чи чергування), RAID 1 (mirroring, дзеркало або дзеркалювання), RAID 5 (смуги/чергування з парністю), RAID 6 (подвійна парність) і RAID 10 (дзеркало смуг). На відміну від традиційного RAID, Btrfs-RAID дозволяє динамічно додавати, прибирати або заміняти накопичувачі в масиві, не переводячи систему в режим офлайн.

    Підказка: Перегляньте наступну статтю, щоб дізнатися, як відновити дані з Btrfs-RAID.

Якщо ви хочете дізнатися про файлові системи, які використовуються в інших середовищах, будь ласка, прочитайте наступні статті:

Останнє оновлення: 09 листопада 2024

Якщо вам сподобалася ця стаття, поділіться нею у соцмережах: