Recovery-Software.ru

Файловая система Linux: XFS

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

Файловая система Linux: XFS

Содержание

  1. Что такое файловая система XFS?
  2. Структура файловой системы XFS
  3. Суперблок
  4. Информация о свободных блоках
  5. Информация о свободных и выделенных узлах информации
  6. B+ деревья
  7. Архитектурные особенности
  8. 64-битная файловая система
  9. Отложенное выделение.
  10. Изменение размера "на лету" (только расширение).
  11. Дефрагментация в реальном времени выполняется с помощью следующих инструментов:
  12. Создание и изменение размера в XFS
  13. Монтирование XFS
  14. Изменение размера XFS
  15. Преимущества XFS
  16. Проверка степени фрагментации в XFS
  17. Журналирование XFS
  18. Сравнение производительности XFS с другими файловыми системами.
  19. Недостатки файловой системы XFS
  20. Доступ к разделам XFS из Windows
  21. Установка XFS на SSD-накопитель
  22. Преимущества использования XFS на SSD
  23. Недостатки использования 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.

Группа выделения разделена на четыре других структуры:

Суперблок

Суперблок находится в начале группы выделения. Описание структуры 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 не была подходящей для хранения большого количества маленьких файлов (например, почтового сервера), так как она медленно обрабатывает метаданные, но постепенно улучшается. Например:

64-битная файловая система

Выделение пространства с помощью extent’ов (Extent — указатель на начало и количество последовательных блоков). В extent’ах выделяется пространство для хранения файлов и свободных блоков. B-деревья активно используются для хранения различных данных файловой системы: для списка блоков с сериями inode, списка extent’ов с содержимым файлов, файловых каталогов, списков свободных блоков extent’ов (свободные блоки индексируются как по размеру блока, так и по его расположению). Однако использование B-деревьев не является догмой — небольшой файл или каталог могут быть размещены непосредственно внутри inode.

Отложенное выделение.

При записи файла ему выделяется пространство в памяти, в то время как на диске выделяется пространство только при записи файла на диск. Таким образом, это оптимально распределяет дисковое пространство для файла, что уменьшает фрагментацию.

Изменение размера «на лету» (только расширение).

Размещение в нескольких линейных областях (по умолчанию 4) так называемых «групп выделения» (повышает производительность путем выравнивания активности запросов к разным дискам на массивах RAID-типа «строка», а также при асинхронном доступе к файловой системе на обычном диске).

Дефрагментация в реальном времени выполняется с помощью следующих инструментов:

Создание и изменение размера в 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:

Вы можете использовать любой из этих параметров для настройки вашей файловой системы

После монтирования вы можете просмотреть информацию о метаданных файловой системы:

$ 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 из 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 на SSD

Exit mobile version