Linux xfs что это

Bog BOS: Файловая система XFS (Linux)

Журналируемая файловая система xfs позволяет использовать блочные устройства размером более 16ТБ (пакеты xfsprogs и xfsdump), первоначально была разработана для SGI IRIX, поддерживает расширенные атрибуты файлов, выделение места экстентами, эффективное распараллеливание за счёт разбиения области данных на независимые отсеки. Является файловой системой по умолчанию в RHEL 7. Не очень любит мелкие файлы. Предпочтительна при большом количестве потоков доступа.

  • состоит из секций данных (содержит метаданные и может содержать журнал), журнала и секции для работы в реальном времени
  • секция данных делится на равные группы блоков (allocation groups), количество которых определяет уровень параллелизма при выделении места; каждая группа содержит суперблок, управление свободным пространством группы, таблицу inode (создаются по потребности), данные
  • размер блока в Linux — 4 КБ
  • выделение места происходит экстентами (до 8 GiB)
  • ранее не подходила для хранения большого количества мелких файлов (почтовый сервер) — медленно работает с метаданными; постепенно улучшается
  • открытые в момент неожиданного выключения компьютера файлы будут заполнены нулями (исправлено)
  • мгновенное создание и расширение файловой системы при нулевых накладных расходах (у ext4 — 1.5%, т.е. 269GB для 16ТБ) и примерно сравнимых с ext4 накладных расходах при хранении файлов (на 0.07% меньше для набора в 10TB из 10 миллионов файлов
  • 64-битные номера inode для файловой системы размером 2ТиБ и более, не все 32-битные программы это переживут ; исправлено в RHEL7

Ключи утилиты mkfs.xfs:

  • -L метка-файловой-системы # до 12 символов
  • -d su=размер-страйпа-RAID,sw=число-страйпов-RAID # можно указывать единицы объёма: k, m, g
  • -d agcount=число-групп-блоков
  • -d agsize=размер-группы-блоков # от 16 MiB до 1 TiB; можно указывать единицы объёма: k, m, g
  • -d unwritten=1 # помечать незаписанные экстенты, увеличивает безопасность (не даёт пользователям читать захваченные, но ещё не записанные части файлов), уменьшает фрагментацию?, замедляет работу; «unknown option -d unwritten=0»
  • -i attr=2 # версия политики размещения расширенных атрибутов (по умолчанию)
  • -i maxpct=процентов # максимальная доля, которую inode могут занимать на диске, по умолчанию — от 1% до 25% в зависимости от размера файловой системы
  • -i size=байт # размер фиксированной части inode, от 256 (по умолчанию) до 2048
  • -i align=1 # выравнивать блоки inode (по умолчанию)
  • -l internal=1 # журнал внутри
  • -l logdev=устройство-для-журнала # вынос журнала на отдельное устройство экономит до 10 IOPS
  • -l size=байт # размер журнала (от 512 до 64K блоков, по умолчанию — 128 MiB)
  • -l su=размер-страйпа-RAID # можно указывать единицы объёма: k, m, g
  • -l lazy-count=1 # не обновлять счётчики суперблока при каждом изменении метаданных, ускоряет (по умолчанию)
  • -m crc=1 # контрольные суммы метаданных, в RHEL 7.1
  • -s размер-сектора
  • -f # затирать обнаруженную на блочном устройстве файловую систему
  • -N # вывести параметры, но не создавать файловую систему
  • -K # не использовать TRIM во время создания файловой системы

Опции монтирования:

  • allocsize=байт # при увеличении файла место захватывается указанными кусками, лишнее потом освобождается; от 4KiB до 1TiB; по умолчанию — 64KiB
  • attr2 # ускоренная обработка атрибутов (по умолчанию)
  • barrier # использовать барьерную синхронизацию при записи метаданных (не нужно при наличии батарейки RAID контроллера или внешнего хранилища)
  • biosize=16 # размер блока в буферизованных запросах ввода/вывода в виде двоичного логарифма
  • grpid|bsdgroups # gid для создаваемого файла берётся от gid каталога
  • nogrpid|sysvgroups # gid для создаваемого файла берётся от процесса (по умолчанию), если каталог не имеет бита setgid
  • delaylog # ускоряет создание и удаление файлов в десятки раз (в F15 или RHEL6.2 по умолчанию) — но всё равно ext4 быстрее; опция nodelaylog не поддерживается с RHEL 6.5
  • dmapi # задействовать интерфейс DMAPI (Data Management API) для mtpt
  • filestreams # использовать алгоритм выделения свободного место, адаптированный для работы с несколькими параллельными потоками; значительно ускоряет как запись, так и чтение; может быть применён к отдельному каталогу с помощью атрибута filestreams
  • ihashsize=число # размер хеш-таблицы для inode в памяти
  • ikeep # опустевший кластер inode не удаляется (по умолчнию)
  • noikeep # после освобождения всех inode в кластере отдавать весь кластер в пул свободного места (noikeep)
  • inode64 | inode32 # 64-битные номера inode (NFS под CentOS4 и Solaris 8 монтируется нормально, но некоторые 32-битные программы не умеют работать с файлами с большими inode ); по умолчанию используются (использовались?) 32-битные inode, что приводит к их размещению только в первых 2ТБ диска, что вызывает сообщение о нехватке места при его формальном изобилии (у меня «кончилось место» при наличии свободных 20 ТБ); в CentOS 7.3 нормально использовалась файловая система на 35 ТБ (100 миллионов файлов, attr2,filestreams,inode32)
  • largeio # изображает устройство с большими секторами (swidth или allocsize)
  • nolargeio # изображает устройство с маленькими секторами
  • logbufs=число-буферов-журнала # от 2 до 8; по умолчанию — 2 для файловой системы с размером блока 4 KiB; больше буферов — быстрее запись
  • logbsize=размер-буфера-журнала # 16384 или 32768 (по умолчанию) или 65536 или 131072 или 262144
  • logdev=устройство-для-журнала
  • noalign
  • noatime
  • nodiratime
  • norecovery # не проигрывать журнал при монтировании
  • nouuid # не обращать внимания на дубли UUID
  • osyncisdsync # записывать файлы, открытые в режиме O_SYNC, как в режиме O_DSYNC; ускоряет работу; в новых версиях установлен по умолчанию, не отключаем
  • osyncisosync # записывать файлы, открытые в режиме O_SYNC, как в режиме O_SYNC
  • uquota/usrquota/uqnoenforce/quota/gquota/grpquota/gqnoenforce/pquota/prjquota/pqnoenforce
  • sunit=размер-страйпа-RAID-в-секторах
  • swidth=ширина-страйпа-RAID-в-секторах # размер-страйпа X число-дисков-данных
  • swalloc # округлять выделяемое место по swidth
Читайте также:  Киви для windows phone

Статистика и ручки управления:

  • /proc/fs/xfs/stat — статистика
  • /proc/sys/fs/xfs — ручки управления
    • age_buffer_centisecs — 1500, возраст метаданных для сброса на диск
    • error_level (?)
    • filestream_centisecs — 3000
    • inherit_noatime
    • inherit_nodefrag
    • inherit_nodump
    • inherit_nosymlinks
    • inherit_sync
    • irix_sgid_inherit
    • irix_symlink_mode — позволяет устанавливать права доступа символьных ссылок (отключено)
    • panic_mask (?)
    • rotorstep — 1, сколько файлов размещать в группе перед переходом к следующей
    • restrict_chown — запрещает передавать права на файл другим пользователям (отключено, нев в RHEL7)
    • speculative_prealloc_lifetime (?)
    • stats_clear (?)
    • xfsbufd_centisecs — 100, интервал сборки мусора в буферах метаданных
    • xfssyncd_centisecs — 3000, интервал сброса метаданных

Кстати, опыт показал, что xfs сбрасывает накопленные буфера с такой интенсивностью, что захлёбывается внешнее хранилише (RAID контроллер), поэтому рекомендуется обеспечить ранее начало сброса: 40000000 в /proc/sys/vm/dirty_bytes, 10000000 в /proc/sys/vm/dirty_background_bytes.

Проблема с излишней фрагментацией («XFS: . possible memory allocation deadlock») купируется сбросом буферов в slab («echo 2 > /proc/sys/vm/drop_caches»). У меня это произошло с индексным фйалом MySQL при добавлении ключа (файл 40ГБ оказался разбит на 3 миллиона кусочков).

xfs_info (скрипт для xfs_db).

xfs_admin (скрипт для xfs_db) позволяет изменить метку и UUID размонтированной фаловой системы.

xfs_check (скрипт для xfs_db) — проверка файловой системы, требуется размонтирование, требует 16 ГБ памяти (реально использовались 10 ГБ) для файловой системы в 7 TB (67%, 500 файлов); требует и реально использует 42 ГБ памяти для файловой системы в 20TB, быстр.

xfs_logprint — вывод и разбор журнала.

xfs_metadump (скрипт для xfs_db) — вывод метаданных в файл.

Определить уровень фрагментации файлов: «xfs_db -c frag -r блочное-устройство» (размонтирование не требуется, но иногда случается «Segmentation fault» ; показывает долю «лишних» экстентов).

Определить уровень фрагментации свободного пространства: «xfs_db -c freesp -r блочное-устройство» (размонтирование не требуется).

Утилита дефрагментирования файла или файловой системы xfs_fsr (в качестве параметра можно указать файл или блочное устройство; по умолчанию — все файлы на всех файловых системах); не требует размонтирования. По очереди копирует все фрагментированные файлы в непрерывный кусок свободной области (если есть), затем меняет ссылку на файл. Отображённые в память (map) файлы не обрабатываются. Команда chattr утилиты xfs_io позволяет пометить файлы, которые не надо дефрагментировать (атрибут f). На каждом проходе обрабатывается 10% самых фрагментированных файлов (или просто самых больших?). Информация о следующем к обработке файле хранится в /var/tmp/.fsrlast_xfs, т.е. может продолжать прерванную работу. Лучше запускать почаще, т.к. дефрагментировать сильно «загаженную» файловую систему утилита неспособна — свободное место фрагментируется в пыль, после чего становится невозможно дефрагментировать большие файлы. Опции:

  • -v
  • -t секунд (7200; максимальное время работы)

Утилита восстановления структуры файловой системы xfs_repair (после аварийного отключения компьютера требуется смонировать и размонтировать файловую систему перед вызовом xfs_repair; 1 ГБ ОП и 12 секунд на 7.5 ТБ и 500 файлов, быстра); ключи:

  • -L (обнулить журнал)
  • -n (только проверка)
  • -t секунд (интервал между отчётами)
  • -v

Утилиты xfsdump и xfsrestore могут помочь извлечь данные из файловой системы, которой не помогла xfs_repair (требуется монтирование).

Утилита xfs_growfs позволяет увеличить размер файловой системы без размонтирования ( уменьшение размера файловой системы невозможно ).

Прочее: xfs_bmap, xfs_freeze, xfs_io, xfs_mdrestore, xfs_mkfile, xfs_ncheck, xfs_quota.

Раздел под резервное копирование bacula поверх автономного дискового массива HP StorageWorks MSA P2000 G3 (FC)

  • подключить дисковый массив к контроллеру FibreChannel
  • создать 2 массива RAID-6 (12x2TB) по 20TB, LUN во весь размер на каждом (24 диска в 1 LUN не умеет)
  • создать логический том
  • создать файловую систему
  • монтирование (/etc/fstab)
  • настройки в /etc/rc.local
  • проверка скорости (линейная скорость ограничена здесь FC контроллером на 4Gb)
  • множество примеров скоростных характеристик в статье про RAID
Читайте также:  Canon pixma mg4240 драйвера для windows 10

Проверка деградации (чтение tarnull) после полутора лет эксплуатации под хранилище томов bacula (большие и очень большие файлы, XFS, LVM над LSI MegaRAID 9266-8i — 2 RAID-6 по 18 дисков, SAS 4TB, rdcache=NoRA, iopolicy=Direct):

  • 1 поток — 16911270150144 bytes (17 TB) copied, 60008.1 s, 282 MB/s
  • 2 потока — 10441797402624 bytes (10 TB) copied, 32280.2 s, 323 MB/s
  • 4 потока — 8016907730944 bytes (8.0 TB) copied, 15049.9 s, 533 MB/s
  • 6 потоков — 15313932386304 bytes (15 TB) copied, 22621.3 s, 677 MB/s
  • 8 потоков — 32895813025792 bytes (33 TB) copied, 42517.9 s, 774 MB/s
  • 10 потоков — 30828863160320 bytes (31 TB) copied, 34851.2 s, 885 MB/s (пока их ещё 10)
  • 12 потоков — 35113530294272 bytes (35 TB) copied, 39212.2 s, 895 MB/s (пока их ещё 6)
  • 16 потоков — 17077979054080 bytes (17 TB) copied, 13573.9 s, 1.3 GB/s (пока их ещё 16)
  • 20 потоков — 5592203657216 bytes (5.6 TB) copied, 3784.57 s, 1.5 GB/s (пока их 20)
  • 24 потока — 6714306854912 bytes (6.7 TB) copied, 8835.18 s, 760 MB/s (пока их 20)
  • 32 потока — 5862605193216 bytes (5.9 TB) copied, 8141.34 s, 720 MB/s (пока их 24)

Проверка деградации (чтение tarnull) после полутора лет эксплуатации под хранилище томов bacula (большие и очень большие файлы, XFS, LVM над LSI MegaRAID 9266-8i — 2 RAID-6 по 18 дисков, SAS 4TB, rdcache=RA, iopolicy=Cached):

  • 1 поток — 10104413880320 bytes (10 TB) copied, 9822.86 s, 1.0 GB/s
  • 2 потока — 16951939170304 bytes (17 TB) copied, 17398.4 s, 974 MB/s
  • 4 потока — 10740585988096 bytes (11 TB) copied, 7771.81 s, 1.4 GB/s
  • 6 потоков — 37457503453184 bytes (37 TB) copied, 27914.8 s, 1.3 GB/s
  • 8 потоков — 20083290144768 bytes (20 TB) copied, 14405.3 s, 1.4 GB/s
  • 10 потоков — 13290862280704 bytes (13 TB) copied, 9638.1 s, 1.4 GB/s
  • 12 потоков — 18429180379136 bytes (18 TB) copied, 15934.9 s, 1.2 GB/s
  • 16 потоков — 20072395440128 bytes (20 TB) copied, 22512.1 s, 892 MB/s
  • 20 потоков — 19661230964736 bytes (20 TB) copied, 24707.8 s, 796 MB/s (пока их 16)
  • 24 потока — 8341583560704 bytes (8.3 TB) copied, 9555.3 s, 873 MB/s (пока их 16)
  • 32 потока — 5574189121536 bytes (5.6 TB) copied, 7060.46 s, 789 MB/s (пока их 24)

Вывод: при восстановлении малым количеством потоков необходимо включать кеширование и предварительное чтение.

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

XFS

oss .sgi .com /projects /xfs /

Разработчики: Silicon Graphics
Выпущена: 1994
Постоянный выпуск: IRIX 5.3
Операционная система: IRIX, Linux, FreeBSD
Размер дистрибутива:
  • max filename size = 255 байт
  • max volume size = 16 эксбибайт
  • max file size = 8 эксбибайт — 1 байт
Веб-сайт

XFS — это 64-битовая высокопроизводительная журналируемая файловая система, созданная компанией Silicon Graphics, полностью основанная на уже проверенной временем технологии B-деревьев для собственной операционной системы IRIX. 1 мая 2001 года Silicon Graphics выпустила XFS под GNU General Public License. [1]

XFS отличается от других файловых систем тем, что она изначально была рассчитана для использования на дисках большого объёма (более 2 терабайт, см. например, RAID-массивы). Поддержка XFS была включена в ядро Linux версий 2.4 (начиная с 2.4.25, когда Марчело Тозатти (Marcelo Tosatti) посчитал её достаточно стабильной) и 2.6, и, таким образом, она стала довольно универсальной для Linux-систем. Инсталляторы дистрибутивов openSUSE, Gentoo, Mandriva, Slackware, Ubuntu, Fedora и Debian предлагают XFS как вариант файловой системы для установки. FreeBSD стала поддерживать XFS в режиме чтения в декабре 2005 года, с июня 2006 была представлена экспериментальная поддержка записи. Несмотря на это, её предполагалось использовать только для облегчения миграции с Linux, но не основной файловой системы. Поддержка XFS была удалена в FreeBSD 10. Дополнительным условием эффективности XFS является наличие качественного питания (внезапные отключения достаточно неприятны для неё) и больших объемов оперативной памяти на сервере, что позволяет раскрыть весь потенциал механизма отложенного размещения и прочих «ленивых» техник обильно реализованных в XFS. Сильная многопользовательская нагрузка на хранилище — позволяет продемонстрировать XFS свой инновационный механизм параллельной записи и низкую ресурсоемкость.

При этом важно понимать, что идеала не существует, и узким местом именно этой ФС являются операции над большим количество мелких файлов или удаление развесистых деревьев каталогов, — в этом случае, вы вряд ли увидите ту производительность, на которую рассчитывали. Что касается конкретных реализаций, то XFS прекрасно чувствует себя как на Linux, так и на FreeBSD, поэтому выбрать платформу для хранилища здесь есть из чего. [2]

Содержание

Особенности XFS

  • 64-битная файловая система.
  • Журналирование только метаданных (если не задать иное параметрами).
  • Выделение места экстентами (Extent — указатель на начало и число последовательных блоков). В экстентах выделяется место для хранения файлов, а также экстентами хранятся свободные блоки.
  • B-tree индексы активно используются для хранения различных данных файловой системы: для списка блоков с inode-ами, списка экстентов с содержимым файла, каталогов файлов, списков экстентов свободных блоков (свободные блоки проиндексированы и по размеру блока, и по расположению). Однако использование b-tree индексов не догма — небольшой файл или каталог может быть размещен прямо внутри inode.
  • Отложенное выделение места (Delayed allocation). При записи файла для него выделяется место в памяти, а на диске выделяется место только при записи файла на диск. Таким образом под файл оптимально выделяется место на диске, что уменьшает фрагментацию.
  • Изменение размера «на лету» (только увеличение).
  • Размещение в нескольких линейных областях (по умолчанию — 4 шт.) т. н. «allocation groups» (увеличивает производительность путём выравнивания активности запросов как к разным дискам на RAID-массивах типа «stripe», так и при асинхронном обращении к файловой системе на обычном диске.)
  • Дефрагментация «на лету».
  • API ввода-вывода реального времени (для приложений жёсткого или мягкого реального времени, например, для работы с потоковым видео).
  • Интерфейс (DMAPI) для поддержки иерархического управления носителями (HSM).
  • Инструменты резервного копирования и восстановления (xfsdump и xfsrestore).
  • «Индексные блоки» inode выделяются динамически (по мере надобности) и неиспользуемые inode могут освобождаться (высвобождая место для хранения данных).
  • Малые «накладные расходы» — размер служебных структур данных. На вновь созданной файловой системе XFS на служебные нужды тратится порядка 0,54 %. Это достигается малым количеством заголовков для групп (allocation groups), а также за счет динамического выделения inode.

Преимущества

  • Реализована поддержка очень больших файлов;
  • Не смотря на то, что официально XFS везде позиционируется как настоящая 64-битная ФС, стратегия дискового драйвера реализована так, что он везде, где это только возможно, избегает использования 64-битного режима адресации, используя обычную 32-битную адресацию, для чего активно используются AGs (allocation group, AG);
  • XFS официально — журналируемая файловая система, — но опять же, с той лишь оговоркой, что фиксируются лишь изменения метаданных, включая операции с суперблоком, AGs, inodes, каталогами и свободным пространством. При этом XFS вообще никак не журналирует пользовательские данные;
  • Нужно отметить ярко выраженное следствие применения механизма отложенного размещения, о котором мы упомянули выше: его эффективность прямо пропорциональна имеющейся величине оперативной памяти (RAM), что опять-таки очень выгодно при современных тенденциях серверного оборудования;

Недостатки

  • Невозможно уменьшить размер существующей файловой системы.
  • Восстановление удалённых файлов в XFS — очень сложный процесс, поэтому на данный момент для этого существует всего лишь несколько программных продуктов, например «Raise Data Recovery for XFS» для ОС Windows.
  • Возможность потери данных во время записи при сбое питания, так как большое количество буферов данных хранится в памяти при том что метаданные записываются в журнал (на диск) оперативно. Это характерно и для других файловых систем с журналированием метаданных.
  • Сравнительно низкая скорость создания и удаления каталогов.

Создание файловой системы XFS

Чтобы создать файловую систему XFS, используйте команду . Все параметры по умолчанию являются оптимальными для общего пользования. При использовании на блочном устройстве, содержащем существующую файловую систему, используйте опцию , чтобы принудительно перезаписать файловую систему.После того, как создана файловая система XFS, её размер уже не может быть уменьшен. Тем не менее, он может быть увеличен с помощью команды xfs_growfs ⁠ Пример 6.1. команда вывода Ниже приведен пример команды :

Источник

Читайте также:  Не загружается windows после установки vipnet
Оцените статью