Основи файлових систем

basic concepts of varios file systems of windows, linux, macos and other

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

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


Що таке файлова система?

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

Як правило, цифрові накопичувачі використовують пару сектор і зміщення у секторі для посилання на будь-який байт інформації в сховищі. Сектор – це група байтів (зазвичай 512 байтів), яка є мінімальною адресною одиницею фізичного сховища. Наприклад, байт 1040 на жорсткому диску буде вказаний як сектор #3 та зміщення у секторі 16 байтів ([сектор]+[сектор]+[16 байтів]). Ця схема застосовується для оптимізації адресації та використання меншого числа для звернення до будь-якої частини інформації, розташованої у сховищі.

Щоб можна було опустити другу частину адреси (зміщення у секторі), файли зазвичай зберігаються починаючи з початку сектора та займають цілі сектори (наприклад: 10-байтовий файл займає весь сектор, 512-байтовий файл також займає весь сектор, водночас 514-байтовий файл займає два повних сектори).

Кожен файл зберігається у "невикористаних" секторах, і потім його можна прочитати, якщо відома його позиція та розмір. Втім, як дізнатися, які сектори зайняті, а які вільні? Де зберігаються розмір, позиція та ім'я файлу? Саме за ці відомості відповідає файлова система.

У цілому файлова система (термін часто скорочують до абревіатури ФС) являє собою структуроване представлення даних та набір метаданих, що описують ці дані. Вона записується до сховища під час операції форматування. Ця структура слугує для всього накопичувача, а також є частиною ізольованого сегмента сховища – розділу диска. Зазвичай вона оперує блоками, а не секторами. Блоки ФС – це групи секторів, за допомогою яких оптимізується адресація сховища. Сучасні типи зазвичай використовують розміри блоків від 1 до 128 секторів (512-65536 байтів). Файли, як правило, зберігаються на початку блоку та займають цілі блоки.

Постійні операції запису або видалення даних у сховищі спричиняють фрагментацію. Таким чином, файли не зберігаються як цілі одиниці, а діляться на фрагменти. Наприклад, том повністю зайнятий файлами розміром близько 4 блоків кожен (скажімо, колекція фотографій). Користувач хоче зберегти один, який займатиме 8 блоків, і, отже, видаляє перший і останній файли. При цьому звільняється простір з 8 блоків, однак перший сегмент розташований на початку сховища, а другий – в кінці.  У цьому випадку 8-блоковий файл розділяється на дві частини (по 4 блоки кожна) та займає вільні "отвори" у сховищі. Інформація про обидва фрагменти як його частини зберігається у файловій системі.

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

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

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

Microsoft Windows в основному використовує дві файлові системи: NTFS – основний формат  за замовчуванням більшості сучасних версій цієї ОС, а також FAT – файлова система, успадкована від старої DOS, і exFAT, її подальше розширення. ReFS була також  представлена Microsoft як файлова система нового покоління для серверних комп'ютерів, починаючи з Windows Server 2012. Файлову систему HPFS, розроблену Microsoft спільно з IBM, можна знайти тільки на дуже старих пристроях під управлінням Windows NT до версії 3.5.

FAT

FAT (File Allocation Table) – один із найпростіших типів ФС, який існує з 1980-х років. Вона складається з сектора дескрипторів ФС (завантажувального сектора або суперблоку), таблиці розподілу блоків файлової системи (File Allocation Table – так званої таблиці розподілу файлів) та простору для зберігання даних. Файли в FAT зберігаються у каталогах. Кожен каталог являє собою масив 32-байтових записів, кожен з яких визначає файл або його розширені атрибути (наприклад, довге ім'я). Запис файлу описує його перший блок. Будь-який наступний блок можна знайти в таблиці розподілу блоків, використовуючи її як список із посиланнями.

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

Числа в FAT12FAT16FAT32 позначають кількість бітів, які використовуються для адресації блоку ФС. Це означає, що FAT12 може використовувати до 4096 різних посилань на блоки, в той час як FAT16 і FAT32 можуть використовувати до 65536 і 4294967296 відповідно. Фактичний максимум кількості блоків ще менший та залежить від застосованого драйвера ФС.

FAT12 та FAT16 використовувалися на старих дискетах і на сьогодні втратили свою популярність. FAT32 все ще широко застосовується для карт пам'яті та USB-накопичувачів. Формат підтримується смартфонами, цифровими камерами та іншими портативними пристроями.

FAT32 може використовуватися на зовнішніх сховищах або розділах дисків розміром до 32 ГБ, коли вони відформатовані за допомогою вбудованого інструменту цієї ОС, або до 2 ТБ, коли для форматування використовуються інші засоби. Файлова система також не дозволяє створювати файли, розмір яких перевищує 4 ГБ. Для розв'язання цієї проблеми було розроблено exFAT, яка не має реальних обмежень щодо розміру та часто використовується на сучасних зовнішніх жорстких дисках і твердотільних накопичувачах.

NTFS

NTFS (New Technology File System) була представлена в 1993 році разом із Windows NT та нині є найбільш поширеною файловою системою для комп'ютерів на базі Windows. Більшість операційних систем лінійки Windows Server також використовують цей формат.

Цей тип ФС є досить надійним завдяки журналюванню та підтримує безліч функцій, включаючи контроль доступушифрування і т. д. Кожен файл в NTFS зберігається як файловий дескриптор у Головній файловій таблиці (Master File Table) та як вміст із данимиГоловна файлова таблиця містить записи з усією інформацією про них: їх розміри, розподіл, імена тощо. Перші 16 записів таблиці резервуються для бітової карти (BitMap), яка веде облік всіх вільних та використаних кластерів, Журналу (Log), що застосовується реєстрації записів, і файлу BadClus, що містить інформацію про пошкоджені кластери. Перший та останній сектори файлової системи містять налаштування файлової системи (завантажувальний запис або суперблок). Цей формат використовує 48-бітові та 64-бітові значення для посилання на файли, що дозволяє їй підтримувати сховища з надзвичайно високою місткістю.

ReFS

ReFS (Resilient File System) – це остання розробка Microsoft, представлена разом із Windows 8, а тепер доступна і для Windows 10. Її архітектура абсолютно відрізняється від інших форматів Windows та в основному організована у вигляді B+-дереваReFS має високу стійкість до збоїв  завдяки новим функціям. Найбільш визначною серед них є Копіювання при записі (Copy-on-Write): жодні метадані не змінюються без їх попереднього копіювання; дані не записуються поверх існуючих даних – вони поміщаються до іншої області на диску. При будь-яких змінах нова копія метаданих зберігається до вільної області у сховищі, а потім система створює посилання зі старих метаданих на нову копію. Таким чином, значна кількість старих резервних копій зберігається у різних місцях, забезпечуючи легкість відновлення даних, за умови що цю область не буде перезаписано.

HPFS

HPFS (High Performance File System) була створена Microsoft у співпраці з IBM та представлена разом із OS/2 1.20 у 1989 році як файлова система для серверів, здатна забезпечити набагато кращу продуктивність у порівнянні з FAT. На відміну від FAT, яка просто виділяє перший ліпший вільний кластер на диску для фрагментів файлу, HPFS прагне розташувати файл у суміжних блоках або, принаймні, переконатись, що його фрагменти (так звані екстенти) розташовані максимально близько один до одного. На початку HPFS є три блоки управління, що займають 18 секторів: завантажувальний блоксуперблок і запасний блок. Решта простору зберігання розділено на порції суміжних секторів, що називаються смугами та займають по 8 МБ кожна. Смуга має свою власну бітову карту розподілу секторів, що показує, які сектори в ній зайняті (1 – зайнятий сектор, 0 – вільний сектор). Кожен файл і каталог має власний F-Вузол, розташований поруч з ним на диску – ця структура містить інформацію про місцезнаходження файлу та його розширені атрибути. Для зберігання каталогів використовується спеціальна смуга каталогів, розташована в центрі диска, а сама структура каталогів являє собою збалансоване дерево із записами в алфавітному порядку.

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

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

Apple macOS застосовує два типи ФС: HFS+, розширення застарілої файлової системи HFS, яка застосовувалась на старих комп'ютерах Macintosh, та APFS, формат, який використовується сучасними комп'ютерами Mac під управлінням macOS 10.14 і пізніших версій. Просунуті серверні продукти також використовують файлову систему Apple Xsan, кластерну файлову систему від StorNext і CentraVision.

HFS+

HFS+ була основним форматом для настільних продуктів Apple, включаючи комп'ютери Mac, для iPod, а також для серверних продуктів Apple X Server, до того, як в macOS High Sierra їй на заміну прийшла APFS.

HFS+ використовує B-дерева для розміщення і пошуку файлів. Томи поділяються на сектори, зазвичай розміром 512 байтів, які потім групуються в блоки розподілу, кількість яких залежить від розміру всього тому. Інформація про вільні та використані блоки розподілу зберігається у Файлі розподілу (Allocation File). Всі блоки розподілу, присвоєні кожному файлу як екстенти зберігаються у файлі Extends Overflow. І, нарешті, всі атрибути файлу вказані у Файлі атрибутів. Надійність сховища підвищується внаслідок ведення журналу, який дозволяє відстежувати всі зміни в системі та швидко повертати її до робочого стану в разі непередбачених подій. Серед інших підтримуваних функцій – жорсткі посилання на каталоги, шифрування логічних томів, контроль доступу, компресія даних тощо.

APFS

Файлова система APFS має на меті розв'язання основних проблем своєї попередниці та розроблена для ефективної роботи з сучасними флеш- та твердотільними накопичувачами.  Цей 64-розрядний формат використовує метод Копіювання при записі (Copy-on-Write) для підвищення продуктивності, що дозволяє копіювати кожен блок, перш ніж будуть застосовані зміни, і пропонує багато функцій для збереження цілісності даних та економії простору. Весь файловий вміст та його метадані, папки разом з іншими структурами APFS зберігаються в контейнері APFS. Суперблок контейнеру (Container Superblock) зберігає інформацію про кількість блоків у контейнері, розмір блоку тощо. Інформація про всі зайняті та вільні блоки контейнера організується за допомогою структур бітових карт (Bitmap Structures).  Кожен том в Контейнері має свій власний Суперблок тому (Volume Superblock), який містить інформацію про цей том.  Всі файли та папки тому записуються в B-дерево файлів і папок (File and Folder B-Tree), тоді як B-дерево екстентів  (Extents B-Tree) відповідє за додаткові відомості – посилання на вміст файлу (початок файлу, його довжину в блоках).

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

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

Linux як операційна система з відкритим кодом спрямована на запровадження, тестування та використання різних типів файлових систем. Найпопулярніші формати для Linux охоплюють:

Ext

Ext2, Ext3, Ext4 – це просто різні версії "нативної" файлової системи Linux Ext. Цей тип активно оновлюється та вдосконалюється. Ext3 як розширення до Ext2 використовує транзакційні операції запису файлів з журналомExt4 як продовження Ext3 було доповнено підтримкою оптимізованої інформації про розподіл файлів (екстентів) та розширених атрибутів файлів. Ця ФС часто використовується як "коренева" файлова система для більшості дистрибутивів Linux.

ReiserFS

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

XFS

XFS – надійна журнальована файлова система, яка була створена компанією Silicon Graphics та спочатку використовувалась IRIX-серверами компанії. У 2001 році вона потрапила до ядра Linux і тепер підтримується більшістю дистрибутивів, деякі з яких, наприклад Red Hat Enterprise Linux, навіть використовують її за замовчуванням. Цей тип ФС оптимізований для зберігання дуже великих файлів та томів на одному хості.

JFS

JFS – файлова система, розроблена IBM для потужних комп'ютерних систем Компанії. JFS1 зазвичай використовують для JFS, в той час, як JFS2 – її другий реліз. Нині цей проєкт має відкритий вихідний код та застосовується в більшості сучасних версій Linux.

Btrfs

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

F2FS

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

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

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

Файлові системи BSD, Solaris, Unix

Найпоширенішою файловою системою для цих операційних систем є UFS (Unix File System), що також має назву FFS (Fast File System).

На цей час UFS (у різних виданнях) підтримується всіма операційними системами Unix-сімейства і є основною файловою системою ОС BSD та Sun Solaris. Сучасні комп'ютерні технології мають тенденцію застосовувати заміни для UFS у різних операційних системах (ZFS для Solaris, JFS і похідні формати для Unix тощо).

Підказка: Інформацію про ймовірність успішного результату відновлення даних із цих файлових систем можна знайти в статтях про особливості відновлення даних для різних ОС та шанси на відновлення даних. Сам процес відновлення описаний в інструкції, присвяченій відновленню даних з Unix, Solaris та BSD.

Кластеризовані файлові системи

Кластерні файлові системи використовуються в комп'ютерних кластерних системах та підтримують розподілені сховища.

До розподілених типів ФС належать:

  • ZFS (Zettabyte File System) компанії Sun – формат, розроблений для розподілених сховищ на базі Sun Solaris OS.

  • Apple Xsan – розробка компанії Apple як продовження файлових систем CentraVision і StorNext.

  • VMFS (Virtual Machine File System) – файлова система, розроблена компанією VMware для VMware ESX Server.

  • GFS (Global File System) – файлова система Red Hat Linux.

  • JFS1 – оригінальна (застаріла) версія IBM JFS, що використовується в більш старих системах зберігання даних AIX.

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

Щоб дізнатись про інші технології, що використовуються для зберігання та управління даними, зверніться до розділу під назвою Технології зберігання.

Останнє оновлення: 10 серпня 2022

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