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

Зміст
- Що таке файлова система XFS?
- Структура файлової системи XFS
- Суперблок
- Інформація про вільні блоки
- Інформація про вільні та виділені інформаційні вузли
- B+ дерева
- Особливості архітектури
- 64-бітна файлова система
- Відкладене виділення.
- Зміна розміру "на льоту" (тільки розширення).
- Дефрагментація на льоту виконується за допомогою цих інструментів:
- Створення та зміна розміру в XFS
- Монтування XFS
- Зміна розміру XFS
- Переваги XFS
- Перевірка ступеня фрагментації в XFS
- Журналювання в XFS
- Порівняння продуктивності XFS з іншими файловими системами.
- Недоліки файлової системи XFS
- Доступ до розділів XFS з Windows
- Встановлення XFS на SSD-диск
- Переваги використання XFS на SSD
- Недоліки використання XFS на SSD
Що таке файлова система XFS?
XFS — це високопродуктивна, масштабована файлова система з журналюванням, яка має всі переваги сучасних файлових систем, такі як ведення журналу метаданих для швидкого відновлення. Вона підтримує групування потоків введення/виведення, що значно покращує продуктивність читання та запису. Однак вона ефективна лише для великих файлів. Ви також можете збільшити розмір файлової системи або виконати дефрагментацію, навіть якщо вона змонтована.
XFS вважається розширеною файловою системою. Це високопродуктивна файлова система з 64-бітними журналами. Підтримка XFS була включена в ядро Linux приблизно в 2002 році. XFS підтримує максимальний розмір файлової системи до 8 ексабайт для 64-бітної файлової системи.
Проте XFS має деякі обмеження. Наприклад, розділ цієї файлової системи не можна зменшити, а продуктивність знижується при роботі з великою кількістю файлів. RHEL 7.0 використовує XFS як файлову систему за замовчуванням.
Структура файлової системи XFS
Вся файлова система XFS поділена на так звані Групи Розподілу, аналогічні Групам Блоків у Ext2FS.
Розмір/кількість та інші характеристики Груп Розподілу містяться у суперблоці, а суперблок знаходиться на початку кожної з Груп Розподілу (тобто це так само, як у Ext2FS), тому перейдемо безпосередньо до опису його структури.
Принаймні перші 0x800 байтів (2048 байтів, 2 Кб) кожної Групи Розподілу мають однаковий формат. І нульова (читати потрібно все з нуля) Група Розподілу (а з нею і нульовий суперблок) розташована прямо на початку пристрою. Ось важлива відмінність від абсолютної більшості інших файлових систем: коли файлова система XFS була розроблена для платформи IRIX, розробники навіть не думали про будь-які завантажувачі на початку диска, тому немає сенсу намагатися встановити завантажувач на розділ XFS.
Група Розподілу поділена на чотири інші структури:
- Суперблок
- Інформація про вільні блоки
- Інформація про виділені та вільні інформаційні вузли
- Блоки, виділені для розширення B-дерева
Суперблок
Суперблок знаходиться на початку Групи Розподілу. Ви можете знайти визначення структури struct xfs_sb, яка його описує, у файлі /usr/include/xfs/xfs_sb.h
Ви можете цитувати цей файл, як зазвичай робите в таких випадках, але описувати структуру в цьому випадку незручно, оскільки назви типів, такі як xfs_drfsbno_t, нічого не говорять про їхній розмір.
Тому краще записувати структури у форматі, який буде зручнішим для вас.
Ми будемо використовувати 5 полів для опису структури:
- Зміщення від початку структури (у шістнадцятковій системі числення)
- Розмір поля в бітах
- Назва елемента в структурі
- Деяке типове значення (яке береться після форматування деякого тестового образу)
- Коментар
Інформація про вільні блоки
Інформація про вільні блоки у групі розподілу знаходиться в ній зі зміщенням 0x0200.
Опис структури xfs_agf розташований у файлі /usr/include/xfs/xfs_ag.h.
Було вирішено зберігати список вільних блоків не у вигляді бітової карти, а у вигляді B-дерева з елементами “Початковий блок фрагмента вільних блоків”/”Розмір фрагмента”. Причому не в одному B-дереві, а у двох дубльованих: один елемент сортується за номером початкового блоку фрагмента, а другий — за розміром цих фрагментів вільного простору.
Це дозволяє швидко знаходити групу вільних блоків найбільш підходящого розміру.
Інформація про вільні та виділені інформаційні вузли
Подібно до вільних блоків, вільні та виділені інформаційні вузли Груп Виділення описуються в структурі xfs_agi (див. також /usr/include/xfs/xfs_ag.h для визначення) на зсуві 0x400.
Інформаційні вузли виділяються групами по 64 одиниці. Інформація про заповненість/завантаженість інформаційних вузлів цієї групи зберігається в тій самій бітовій карті (64-бітове число).
Однак, оскільки кожна наступна група інформаційних вузлів не обов’язково розташована за попередньою, ця інформація все ж повинна зберігатися в B-дереві.
Ця схема дозволяє усунути обмеження на кількість інформаційних вузлів, характерне для багатьох інших файлових систем. У XFS повідомлення “Недостатньо місця” є однозначним, воно не може означати “таблиця інформаційних вузлів переповнена” під час створення файлу.
B+ дерева
XFS використовує B+ дерева всюди. Вони застосовуються для індексації пакетів інодів, списків вільних екстентів, елементів каталогів та записів файлів.
B+ дерева в XFS мають досить традиційну структуру: у внутрішніх вузлах зберігаються лише ключі та вказівники на нащадків, а листки містять ключі та дані.
Оскільки в XFS існує кілька типів дерев, загальний код обробляє лише стандартні заголовки блоків (xfs_btree.h).
Після заголовка розташовані масиви даних. Для внутрішніх вузлів це:
- Два списки – ключі та вказівники на нащадків, що зростають у середині. Для листків це масив записів, відсортованих у порядку зростання.
- Формат ключів і записів, відповідно, визначається типом дерева.
Особливості архітектури
Як згадувалося вище, XFS складається з секцій даних (які містять метадані та можуть містити журнали), журналу та секції реального часу.
Секція даних поділена на рівні групи блоків (групи виділення), кількість яких визначає рівень паралелізму у виділенні простору; кожна група містить суперблок, управління вільним простором групи, таблицю інодів (створюється за потреби).
Розмір блоку в Linux становить 4 КБ. Виділення простору здійснюється за допомогою екстентів (до 8 ГБ).
XFS раніше не підходила для зберігання великої кількості маленьких файлів (наприклад, на поштовому сервері), оскільки повільно обробляла метадані, але поступово покращується. Наприклад:
- файли, відкриті під час раптового вимкнення комп’ютера, будуть заповнені нулями (виправлено);
- миттєве створення та розширення файлової системи без додаткових витрат (ext4 має 1.5%, тобто 269 ГБ для 16 ТБ) і приблизно такі ж витрати, як у ext4, на зберігання файлів (на 0.07% менше для набору з 10 ТБ з 10 мільйонами файлів);
- 64-бітні номери інодів для файлової системи розміром 2 ТБ і більше, не всі 32-бітні програми це витримають (виправлено);
64-бітна файлова система
Виділення простору за допомогою екстентів (Екстент – вказівник на початок і кількість послідовних блоків). У екстентах простір виділяється для зберігання файлів та вільних блоків. Індекси B-дерева активно використовуються для зберігання різних даних файлової системи: для списку блоків з серією inode, списку екстентів з вмістом файлів, каталогів файлів, списків екстентів вільних блоків (вільні блоки індексуються як за розміром блоку, так і за розташуванням). Однак використання індексів B-дерева не є догмою – невеликий файл або каталог може бути розміщений безпосередньо всередині inode.
Відкладене виділення.
Коли файл записується, йому виділяється простір у пам’яті, тоді як на диску простір виділяється лише тоді, коли файл записується на диск. Таким чином, простір на диску виділяється оптимально, що зменшує фрагментацію.
Зміна розміру “на льоту” (тільки розширення).
Розміщення в кількох лінійних областях (за замовчуванням 4) так званих “груп виділення” (підвищує продуктивність шляхом узгодження активності запитів до різних дисків у RAID-масивах типу “stripe”, а також при асинхронному доступі до файлової системи на звичайному диску).
Дефрагментація на льоту виконується за допомогою цих інструментів:
- API для вводу-виводу в реальному часі (для жорстких або м’яких реального часу додатків, таких як потокове відео).
- Інтерфейс (DMAPI) для підтримки ієрархічного управління медіа (HSM).
- Інструменти резервного копіювання та відновлення (xfsdump і xfsrestore).
- Індексують блоки inode, які виділяються динамічно (за потреби), і невикористані inode можуть бути звільнені (звільняючи місце на диску).
- Маленькі “накладні витрати” – розмір службових структур даних. На новоствореній файловій системі XFS близько 0.54% витрачається на службові потреби. Це досягається завдяки невеликій кількості заголовків для груп (групи виділення) та динамічному виділенню inode.
Створення та зміна розміру в XFS
Припустимо, що у вас вже є готовий розділ для створення файлової системи. Якщо ні, ви можете створити його за допомогою Gparted або утиліти fdisk. Припустимо, що розділ, на якому ви хочете створити файлову систему XFS, це /dev/sda11. Ви можете зробити це за допомогою стандартної утиліти mkfs. Команда виглядає так:
$ sudo mkfs.xfs /dev/sda11
Якщо на вказаному розділі вже існує файлова система, ви повинні використовувати опцію -f, щоб перезаписати її:
$ sudo mkfs.xfs -f /dev/sda11
Під час створення утиліта відобразить поточну інформацію про файлову систему та таблицю метаданих.
Монтування XFS
Тепер нам потрібно змонтувати розділ, який ми щойно створили. Ви можете створити окрему папку для монтування або змонтувати розділ у /mnt. Наприклад, ми можемо створити папку /mnt/db. Потім ви можете змонтувати розділ, як і всі інші файлові системи, за допомогою команди mount:
$ sudo mkdir /mnt/db
$ sudo mount /dev/sda11 /mnt/db
$ sudo mount | grep sda11
Тепер ви можете записувати файли на цей розділ. Більшість параметрів файлової системи встановлюються за допомогою mount. Давайте розглянемо основні параметри монтування, специфічні для XFS:
- inode64 – якщо у вас є пристрій більший за 2 ТБ, вам потрібно використовувати цей параметр монтування для покращення файлової системи;
- nobarrier – XFS має бар’єр запису даних, щоб важливі дані не були втрачені під час несподіваного перезавантаження. Якщо ви впевнені, що ваше обладнання повністю надійне, бар’єр слід вимкнути для підвищення продуктивності;
- logdev – дозволяє вести журнал файлової системи у зовнішньому файлі;
- sunit – встановлює розмір одного блоку даних для RAID-масивів. Розмір за замовчуванням становить 512 байт;
- norecovery – за замовчуванням, кожного разу, коли файлову систему монтують, вона перевіряється та виправляється, якщо була змонтована неправильно. Цей параметр вимикає цю процедуру;
- quota – увімкнення підтримки квот на дисковий простір для користувачів.
Ви можете використовувати будь-який з цих параметрів для налаштування вашої файлової системи.
Після монтування ви можете переглянути інформацію про метадані файлової системи:
$ sudo xfs_info /dev/sda11
Якщо ви хочете, щоб цей розділ монтувався автоматично, вам потрібно налаштувати xfs у fstab для монтування. Все, що вам потрібно зробити, це додати рядок:
$ sudo vi /etc/fstab
/dev/sda11 /mnt/db xfs defaults 0 0
Зміна розміру XFS
Ви можете змінити розмір файлової системи XFS на льоту, прямо коли вона змонтована. Спочатку перевіримо поточний розмір розділу:
$ df –h
Далі розмір XFS збільшується у два етапи. Є один нюанс щодо розширення розміру онлайн: вам потрібно збільшити розмір розділу в таблиці розділів, і єдиний спосіб зробити це без демонтування — це використання LVM. В інших конфігураціях вам все ж доведеться демонтувати. Спочатку змініть розмір розділу за допомогою, наприклад, Gparted, а потім збільште розмір файлової системи. Це можна зробити навіть якщо файлова система змонтована. Виконайте команду:
$ xfs_growfs /mnt/db
Щоб переконатися, що все працює, знову перевіряємо розмір файлової системи за допомогою команди:
$ df –h
Перед розширенням розміру файлової системи слід пам’ятати, що стиснути файлову систему ніколи не можна.
Переваги XFS
XFS є відмінною файловою системою, яка демонструє чудову продуктивність при роботі з великими файлами. Окрім швидкої роботи з великими файлами та можливості динамічного зміни розміру, варто також відзначити наявність вбудованого дефрагментатора та журналювання метаданих для швидкого відновлення.
Для реорганізації розташування файлів (дефрагментації) використовується команда xfs_fsr. Її можна застосовувати як для всього розділу, так і для окремого файлу. Для виконання дефрагментації необхідно мати достатньо вільного місця на розділі для копіювання будь-якого файлу. Після завершення операції кожен файл займатиме один екстент.
Для дефрагментації всього розділу використовується команда:
xfs_fsr -v /dev/
Дефрагментація окремого файлу виконується командою:
xfs_fsr -v
Опція -v відображає додаткову інформацію.
Перевірка ступеня фрагментації в XFS
Ви можете отримати інформацію про фрагментацію розділу за допомогою команди:
xfs_db -r -c frag /dev/
Опція -r є обов’язковою для перевірки розділу, який наразі змонтовано та використовується. Опція -c frag потрібна безпосередньо для відображення інформації про фрагментацію розділу.
Результат виглядає наступним чином:

Журналювання в XFS
Як і більшість сучасних файлових систем, XFS підтримує журналювання метаданих для швидкого відновлення у разі аварійного перезавантаження. Подібно до ReiserFS, XFS використовує логічне журналювання. Це означає, що журналювання не виконується за блоками файлів (як у ext3), а у ефективному форматі на диску, де змінюються лише метадані. Для XFS логічне журналювання особливо рекомендується. На високопродуктивному обладнанні (яке зазвичай використовується для XFS) журналювання є найбільш суперечливим ресурсом. Використання просторово-ефективного логічного журналювання мінімізує непродуктивне споживання ресурсів. Крім того, XFS дозволяє зберігати журнал на іншому блоковому пристрої (розділі, “дешевому” диску). Ця функція зберігає дорогі ресурси і “працює” ще більше для підвищення швидкості XFS.
Як і в ReiserFS, XFS журналює лише метадані і не робить цього для самих даних. Це означає, що в XFS (як і в ReiserFS) можливо втратити дані, які були змінені до аварійного перезавантаження. Однак журнал XFS має дві властивості, які зменшують ймовірність втрати даних у порівнянні з ReiserFS.
XFS гарантує, що будь-які “незаписані” блоки заповнюються нулями. Оскільки блоки з нульовими байтами у системних файлах ігноруються, усувається потенційна загроза безпеці.
Проблема втрати даних в XFS мінімізується тим, що операція скидання змін метаданих, які очікують обробки на диску в XFS, виконується частіше, ніж у ReiserFS, наприклад (особливо при високій інтенсивності I/O операцій). Як наслідок, після аварії втрати в XFS будуть меншими, ніж за тих самих умов у ReiserFS. Зазначимо, що частіший запис метаданих сам по собі не усуває проблему, але лише провокує частіші скидання диска та даних.
Порівняння продуктивності XFS з іншими файловими системами.
До недавнього часу вибір файлової системи для Linux був обмеженим. Ті, хто прагнув високої продуктивності, надавали перевагу ReiserFS, а ті, хто дбав про цілісність даних, обирали ext3. З появою підтримки XFS для Linux вибір став не таким очевидним. Велике питання, яке виникло, полягало в тому, чи є ReiserFS лідером продуктивності за будь-яких умов?
Нещодавно наші експерти порівняли продуктивність XFS, ReiserFS та ext3. Але, перш за все, слід зазначити, що результати показують лише загальну динаміку залежності продуктивності файлової системи від навантаження на однопроцесорну систему.
Тестування показало, що XFS є дуже швидкою файловою системою. XFS постійно лідирує в тестах з маніпуляцією великими файлами. Цей результат цілком передбачуваний, оскільки вона була розроблена саме для цієї мети. Також були помічені відносно повільні операції видалення файлів. У цьому аспекті вона поступилася як ReiserFS, так і ext3.
В інших тестах продуктивність XFS була близькою до ReiserFS і завжди кращою, ніж у ext3. Приємною особливістю XFS є те, що вона не генерує надмірну активність диска. XFS намагається кешувати якомога більше даних, і “причиною” скидання на диск є заповнення пам’яті, а не часовий інтервал. Коли дані записуються на диск, це не має значного впливу на інші IO-операції. На відміну від цього, у ext3 (режим “data=ordered”) періодичні скидання даних на диск викликають проблеми з інтерактивністю і, при високих IO-операціях, навіть перевантаження диска.
Недоліки файлової системи XFS
На жаль, XFS має також і недоліки. Серед найзначніших можна виділити такі:
- Є неможливим зменшення розміру існуючої файлової системи. Якщо розділ на диску заповнений XFS, його не можна зменшити (це важливо враховувати при розподілі диска).
- Відновлення видалених файлів у XFS є дуже складним процесом, тому наразі існує лише кілька програмних продуктів для цього, наприклад, “RS Partition Recovery”.
- Можлива втрата даних під час запису у випадку відключення живлення, оскільки велика кількість буферів даних зберігається в пам’яті, тоді як метадані журналюються (на диску) оперативно. Це також стосується інших файлових систем з журналюванням метаданих.
- Відносно повільне створення та видалення каталогів (недолік, який можна значно зменшити за допомогою належного налаштування файлової системи).
Доступ до розділів XFS з Windows
На жаль, операційна система Windows не має вбудованої утиліти для відкриття файлових систем, відмінних від NTFS або FAT. Тому, наприклад, щоб відкрити флеш-накопичувач, вам доведеться скористатися або стороннім програмним забезпеченням, або встановити Linux на віртуальну машину. Другий варіант менш зручний, тому ми розглянемо додаток Linux File Systems for Windows від Paragon Software. З цією програмою ви можете переглядати, редагувати, копіювати та видаляти файли на вашому розділі XFS. Додаток існує у двох версіях: платній та безкоштовній. Безкоштовна версія надає користувачеві 10 днів для тестування програми.
Ви також можете скористатися додатком XFS Explorer. Існують безкоштовна та платна версії. У безкоштовній версії ви можете переглядати файли розміром до 3 МБ. Якщо вам потрібно працювати з великими файлами, доведеться придбати платну версію.
Встановлення XFS на SSD-диск
XFS може працювати з великими обсягами даних краще, ніж будь-яка інша файлова система, і робить це надійно. Саме тому XFS може бути чудовим кандидатом для встановлення на SSD-диски. Оскільки сучасні обчислення стають дедалі складнішими, файли даних стають все більш вимогливими. Логічно розглянути можливість встановлення цієї файлової системи на SSD-диск.
XFS, як і Ext4, є журналованою файловою системою. Але, на відміну від Extended 4, неможливо вимкнути журналювання, що може створити значне навантаження на диск. Проте XFS підтримує стандартні функції SSD і навіть дефрагментацію.
Переваги використання XFS на SSD
- XFS відомий своєю здатністю легко керувати великими обсягами даних. Використовуючи XFS на вашому SSD, ви можете бути впевнені, що ваші файли захищені.
- Переваги продуктивності XFS на SSD означають, що ви можете передавати та отримувати доступ до файлів і даних набагато швидше, ніж з іншими файловими системами.
- XFS має функцію дефрагментації SSD, яка є дуже корисною і допоможе зберегти ваш диск у робочому стані протягом тривалого часу.
Недоліки використання XFS на SSD
- XFS є журналюючою файловою системою, і цю функцію не можна вимкнути. Неможливість вимкнення журналювання може викликати занепокоєння, якщо ви стурбовані обмеженнями на читання/запис SSD.
- Крім того, при використанні файлової системи XFS спостерігається збільшене зношування SSD. Тому вам доведеться прийняти рішення – швидша робота з великими файлами чи довший термін служби SSD.