Файловые системы используются для управления записью данных на диск, контроля доступа к этим данным и хранения информации и метаданных о файлах. Файловые системы постоянно проходят обзоры для предоставления большего функционала и становятся более эффективными с каждым разом.
Содержание
- Что такое файловая система 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-битная файловая система
Выделение пространства с помощью extent’ов (Extent — указатель на начало и количество последовательных блоков). В extent’ах выделяется пространство для хранения файлов и свободных блоков. B-деревья активно используются для хранения различных данных файловой системы: для списка блоков с сериями inode, списка extent’ов с содержимым файлов, файловых каталогов, списков свободных блоков extent’ов (свободные блоки индексируются как по размеру блока, так и по его расположению). Однако использование B-деревьев не является догмой — небольшой файл или каталог могут быть размещены непосредственно внутри inode.
Отложенное выделение.
При записи файла ему выделяется пространство в памяти, в то время как на диске выделяется пространство только при записи файла на диск. Таким образом, это оптимально распределяет дисковое пространство для файла, что уменьшает фрагментацию.
Изменение размера «на лету» (только расширение).
Размещение в нескольких линейных областях (по умолчанию 4) так называемых «групп выделения» (повышает производительность путем выравнивания активности запросов к разным дискам на массивах RAID-типа «строка», а также при асинхронном доступе к файловой системе на обычном диске).
Дефрагментация в реальном времени выполняется с помощью следующих инструментов:
- 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/da11
$ 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. Ее можно использовать как для всего раздела, так и для отдельного файла. Для выполнения дефрагментации необходимо иметь достаточно свободного места на разделе для копирования любого файла. По завершении операции каждый файл будет занимать один extent.
Для дефрагментации всего раздела используется команда:
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 позволяет хранить журнал на другом блочном устройстве (разделе, «дешевом» диске). Эта функция позволяет экономить дорогостоящие ресурсы и еще больше увеличивает скорость XFS.
Как и в ReiserFS, XFS журналирует только метаданные, а не данные сами по себе. Это означает, что в XFS (как и в ReiserFS) может быть потеряны данные, которые были изменены перед аварийной перезагрузкой. Однако, у XFS есть два свойства журнала, которые снижают вероятность потери данных по сравнению с ReiserFS.
XFS гарантирует, что любые «незаписанные» блоки заполняются нулями. Поскольку блоки с нулевыми байтами в системных файлах игнорируются, устраняется уязвимость безопасности.
Проблема потери данных в XFS минимизируется тем, что операция сброса изменений метаданных, ожидающих обработки на диске, в XFS происходит чаще, чем в ReiserFS, например (особенно при интенсивных операциях ввода-вывода). В результате, после сбоя в XFS будет меньше потерь, чем в тех же условиях в ReiserFS. Обратите внимание, что более частая запись метаданных сама по себе не устраняет проблему, а только провоцирует более частые сбросы диска и данных.
Сравнение производительности XFS с другими файловыми системами.
До недавнего времени выбор файловой системы для Linux был невелик. Те, кто предпочитал высокую производительность, выбирали ReiserFS, а те, кому важна целостность данных, предпочитали ext3. С появлением поддержки XFS для Linux выбор стал не таким простым. Возник вопрос, является ли ReiserFS лидером по производительности во всех условиях?
Недавно наши эксперты провели сравнение производительности XFS, ReiserFS и ext3. Но, прежде всего, следует отметить, что результаты показывают только общую динамику зависимости производительности файловой системы от нагрузки на систему с одним процессором.
Тестирование показало, что XFS — это очень быстрая файловая система. XFS является постоянным лидером в тестах с манипуляцией больших файлов. Этот результат вполне предсказуем, так как она была разработана именно для этой цели. Также была замечена относительно медленная операция удаления файлов. В этом плане она уступает как ReiserFS, так и ext3.
В других тестах производительность XFS была близка к производительности ReiserFS и всегда превосходила ext3. Приятной особенностью XFS является то, что она не генерирует избыточную активность на диске. XFS пытается кэшировать как можно больше данных, и «причиной» сброса на диск является заполнение памяти, а не временной интервал. Когда данные записываются на диск, это не оказывает значительного влияния на другие операции ввода-вывода. В отличие от этого, в ext3 (режим «data=ordered») периодические сбросы данных на диск вызывают проблемы с интерактивностью и даже диск-трэшингом при высоких операциях ввода-вывода.
Недостатки файловой системы 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.