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

Як зазначено в статті про основи файлових систем, файлова система (скорочено ФС) є невід'ємною частиною будь-якої операційної системи (ОС). Більшість операційних систем зазвичай використовують власні "рідні" типи ФС, які можуть підтримуватись лише частково або зовсім не підтримуватись в інших середовищах. Коли йдеться про сімейство Unix, ця ОС і її варіанти, такі як BSD і Solaris, традиційно використовували UFS, яка пізніше була оновлена до UFS2. Через деякий час у Solaris з'явилась файлова система нового покоління під назвою ZFS. Вона набула широкої популярності і швидко з'явилась на інших платформах. У цій статті ви можете знайти короткий огляд цих двох найпоширеніших типів ФС з їхніми ключовими особливостями, а також познайомитися з пов'язаними з ними технологіями зберігання даних.

Зверніть увагу: Деякі з цих операційних систем можуть пропонувати підтримку читання та запису для інших форматів, як-от FAT/FAT32 у Microsoft Windows і Ex2/Ext3/Ext3 у Linux, які більш детально розглянуті у відповідних статтях.

UFS/UFS2

UFS (UNIX File System, файлова система UNIX) походить від Berkeley Fast File System (FFS, Швидкої файлової системи Berkeley), яка була розроблена Дослідницькою групою з комп'ютерних наук (Computer Science Research Group чи коротко CSRG) Каліфорнійського університету в Берклі та випущена в 1983 році разом із дистрибутивом 4.2 BSD UNIX. Робота над UFS тривала, і, зрештою, він став основним форматом для комп'ютерів, що працюють під BSD та іншими системами, похідними від Unix. Зараз, незважаючи на те, що UFS є досить застарілою з точки зору функціональності, вона залишається досить затребуваною з огляду на її високу стабільність.

В UFS простір для зберігання поділяється на Групи циліндрів (Cylinder Groups). Розташування циліндрів та іншу важливу службову інформацію можна знайти у Суперблоці (Superblock). У системі UFS файл представлений окремим індексним дескриптором (так званий inode чи інод) разом із блоками даних, які складають його вміст. Кожна Група циліндрів відстежує власні вільні блоки та індексні дескриптори за допомогою спеціальних бітових мап (bitmaps).

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

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

За ці роки UFS зазнала багато змін. У 2003 році на заміну оригінальної UFS була запущена UFS2, пристосована для розгортання на мультитерабайтних пристроях зберігання даних. Крім того, багато постачальників Unix створили свої власні адаптації UFS. Наприклад, Sun Microsystems додала журналювання до своєї версії UFS у Solaris 7. Ця файлова система записує всі оновлення метаданих у журналі перед фактичним їх застосуванням до будь-яких своїх структур, таким чином забезпечуючи їх захист від збоїв, які можуть статися в процесі.

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

ZFS

ZFS (Zettabyte File System, Файлова система Zettabyte) була створена в 2001 році компанією Sun Microsystems для своєї власної ОС Solaris. У 2005 році її зробили відкритою та інтегрували в інші платформи, включно з BSD. Коли корпорація Oracle придбала Sun у 2010 році, подальший розвиток ZFS став її прерогативою. З цієї причини було створено окремий проект під назвою OpenZFS, який дозволив підтримувати код ZFS у відкритому доступі і залишати цю ФС доступною для громадськості поза закритою екосистемою Oracle. Менше з тим, ZFS не вдалося включити безпосередньо в ядро Linux через конфлікт ліцензій, через що, для вирішення цієї проблеми, була запущена ініціатива ZFSonLinux (ZoL). Усе це призвело до появи кількох окремих "гілок" ZFS.

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

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

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

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

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

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

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

Інші технології зберігання даних сімейства ОС Unix

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

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

  • GEOM Framework – модульний фреймворк, який можна використовувати разом з UFS/UFS2 в операційній системі FreeBSD та який дозволяє реалізовувати просунуті конфігурації на пристроях зберігання даних, що містять цю файлову систему. GEOM абстрагує їх у віртуальних "постачальників", які можуть використовуватися файловою системою. Такий постачальник може бути представлений одним накопичувачем, декількома накопичувачами, організованими в RAID 0 (striping чи чергування) або RAID 1 (mirroring чи дзеркалювання), або зашифрованим томом.

  • zPool – основний конструкт для зберігання даних в ZFS, який об'єднує кілька пристроїв в один логічний блок, використовуючи нативні можливості створення пулів зберігання цієї файлової системи. У такому пулі дані можуть бути розподілені між дисками без надлишковості (подібно до RAID 0), дзеркально відображені на двох або більше дисках (подібно до RAID 1) або організовані у RAID-Z, більш просунуте рішення, описане нижче.

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

  • RAID-Z – RAID-подібний функціонал, вбудований у файлову систему ZFS для підвищення ефективності зберігання даних та забезпечення відмовостійкості. Дані в пулі поділяються на фрагменти, які записуються на кілька дисків, з одним або кількома блоками парності, обчисленими для даних у цих блоках. Залежно від обраної конфігурації, масив може використовувати один блок парності для захисту від збою одного диска (RAID-Z1), два блоки парності для захисту від збою двох дисків (RAID-Z2) або три блоки парності, щоб витримати вихід з ладу трьох дисків (RAID-Z3).

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

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

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

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

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