Знайомство з файловою системою XFS

thumb

Сучасне ядро Linux підтримує широке розмаїття типів файлових систем, і кожна з них має власний підхід до розміщення та отримання даних з цифрового носія. Такий стан речей, звичайно, відкриває багато можливостей. Але водночас він накладає додаткову відповідальність на користувачів, яким необхідно мати принаймні базове уявлення про їх особливості. Крім ext4, яка використовується за замовчуванням для більшості дистрибутивів, XFS залишається одним з кращих варіантів і вимагає більш детального розгляду. Тож що це за файлова система, і чим вона відрізняється від інших форматів?

Введення до XFS

XFS – одна з найнадійніших файлових систем, застосовуваних в Linux. Спочатку її розробляла компанія Silicon Graphics Inc. і випустила в 1994 році на своїй UNIX-платформі під назвою IRIX. Пізніше файлову систему передали спільноті розробників, що працює з відкритими вихідними кодами, які додали її до ядра у 2001 році. Відтоді вона дійшла до всіх основних дистрибутивів Linux. Ті, що базуються на Red Hat, наприклад, CentOS, RHEL та Rocky Linux, під час встановлення навіть обирають цей формат за замовчуванням.

Створена з урахуванням вимог до пристроїв великої місткості, XFS найбільш відома своєю високою продуктивністю при роботі з величезними обсягами даних. Ця файлова система зазвичай зустрічається на серверах, дискових масивах і рідше – на ПК звичайних користувачів. Її популярність також зросла через широке застосування сховищ NAS, більша частка яких поставляється з XFS від виробника, включаючи такі бренди, як Buffalo LinkStation і TeraStation, NetGear, LaCie, Iomega та інші.

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

1-е покоління XFS – проста SGI XFS для операційної системи IRIX на базі UNIX;

2-е покоління XFS – більш стара XFS розширеного формату для Linux, наразі застосовуються в основному в пристроях NAS;

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

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

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

Базова структура файлової системи

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

Саму ж файлову систему можна поділити на три окремі частини:

  • Область даних

Область даних містить метадані файлової системи й дані файлів користувача. Дисковий простір в ній додатково поділяється на рівні групи розподілу. Мінімальний розмір групи розподілу становить 16 МБ, а максимальний – близько 1 ТБ. Кожна група розподілу автономно контролює використання простору у власних межах. Таким чином, різні процеси можуть виконувати розподіл по всій файловій системі паралельно та не заважати один одному.

Управління вільними екстентами в групі розподілу здійснюється за допомогою пари B+ дерев. Їх записи містять інформацію про адресу початкового блоку області вільного простору та його довжину в блоках. Перше B+ дерево індексується за показником адреси, тоді як друге – за показником довжини.

Розташування інодів у групі розподілу також індексується за допомогою B+ дерева. Його записи містять зміщення для кожного сегменту з 64 інодів та відмітку для кожного іноду в сегменті, яка вказує, чи знаходиться він у використанні.

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

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

  • Область журналу

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

  • Область реального часу

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

Переваги та недоліки XFS

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

  • Менша фрагментація та розкидання файлів

XFS докладає всіх зусиль, щоб зберігати файли якомога більш послідовно. Концепція екстентів дозволяє ефективно розподіляти вільні діапазони суміжних блоків, в той час як B+ дерева спрощують пошук вільних екстентів. Якщо файл має "пробіли", XFS просто пропускає їх, не витрачаючи простір для зберігання порожніх блоків. Використання відкладеного виділення дає їй уявлення про кінцевий розмір файлу. Знаючи, скільки блоків потрібно виділити, XFS часто вдається помістити весь файл в один екстент, за умови, що суцільний простір наявний для його зберігання, або, принаймні, розподілити його по набагато більшим екстентам, що в іншому випадку було б неможливо. Крім того, буферизація файлів з коротким терміном служби знижує вплив таких файлів на фрагментацію та зменшує частоту оновлень метаданих.

  • Придатність для багатокомпонентних систем зберігання

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

Менеджер томів XLV, який використовує XFS, служить додатковим рівнем абстракції між файловою системою та фізичними пристроями зберігання в її основі. Він надає XFS підтримку чергування для підвищення продуктивності введення-виведення, дзеркалювання для більшої надійності, а також об'єднання для створення дуже великих логічних томів. Крім того, XLV дозволяє оперативно виконувати переналаштування тому, коли він змонтований та активний. Наприклад, можна збільшити розмір тому або дефрагментувати його практично без простою.

  • Швидкі паралельні операції вводу-виводу

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

  • Високі шанси на відновлення

XFS використовує журнал для метаданих, що спрощує її відтворення після збоїв у системі або перебоїв в подачі живлення. Дані користувача, в разі їх втрати, також мають високі шанси на відновлення, хоча і за допомогою зовнішніх інструментів, таких як UFS Explorer або Recovery Explorer. Коли файл видаляється, файлова система частково стирає інформацію про його інод та оновлює B+ дерево вільних екстентів. Інформація про ім'я цього файлу від'єднується від відповідного запису директорії. Одначе, за допомогою евристики програмне забезпечення здатне знайти ім'я, розмір і позицію цього файлу. Імовірність того, що його буде відновлено, близька до 100%, а зі справжнім ім'ям – до 80%. У разі випадкового форматування файлової системи інформацію про використовувані екстенти буде знищено, а групи розподілу буде оновлено. Однак інформація про файли користувача залишиться в сховищі, використовуючи яку програмне забезпечення має 100%-ву ймовірність повернути їх.

Проте у цієї надійної файлової системи є кілька проблемних місць. Перш за все, XFS не використовує контрольні суми. Тому вона не може гарантувати, що дані, які зберігаються в ній, завжди залишатимуться цілими. Деякі файли можуть непомітно зазнавати ушкодження, а дефектні блоки можна виявити занадто пізно, що призведе до серйозної втрати даних. Крім того, XFS не реєструє жодних змін до даних користувача, як це відбувається з її внутрішніми структурами. А отже, несподіване завершення роботи операційної системи може привести до втрати інформації з нещодавно створених або змінених файлів. З іншого боку, немає можливості повністю відключити ведення журналу, що може вплинути на термін служби твердотільних накопичувачів. І зрештою, ця файлова система не здатна похвалитися широкою сумісністю. Цей факт може стати проблемою у випадку зовнішнього пристрою або системи із подвійним завантаженням, оскільки такі середовища, як Windows і macOS, не мають вбудованої підтримки XFS.

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

Останнє оновлення: 20 липня 2022

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