XFS (Русский)

From ArchWiki
Jump to navigation Jump to search
Состояние перевода: На этой странице представлен перевод статьи XFS. Дата последней синхронизации: 1 апреля 2019. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

XFS — высокопроизводительная журналируемая файловая система, созданная Silicon Graphics, Inc. XFS особенно хорошо справляется с параллельным вводом-выводом благодаря структуре на основе заголовков для групп (allocation groups), что обеспечивает исключительную масштабируемость потоков ввода-вывода, пропускной способности файловой системы, размера файлов и файловой системы при работе с несколькими устройствами хранения.

Установка

Инструменты для управления разделами XFS находятся в пакете xfsprogs, который включён в базовую установку по умолчанию.

Повреждение данных

В случае повреждения данных по какой-либо причине придётся восстанавливать файловую систему вручную.

Восстановление файловой системы XFS

Сначала размонтируйте файловую систему XFS.

# umount /dev/sda3

После размонтирования запустите утилиту xfs_repair(8).

# xfs_repair -v /dev/sda3

Проверка метаданных "на лету" (scrub)

Важно: Эта программа является ЭКСПЕРИМЕНТАЛЬНОЙ, соответственно, её поведение и интерфейс могут измениться в любое время, см. xfs_scrub(8).

xfs_scrub запрашивает ядро очистить (scrub) все объекты метаданных в XFS.Записи метаданных сканируются на очевидно ошибочные значения, после чего перекрёстно ссылаются на остальные метаданные. Это делается для того, чтобы иметь достаточно уверенности в целостности всей файловой системы, анализируя отдельные записи метаданных на фоне остальных метаданных в файловой системе. Повреждённые метаданные можно восстановить из других метаданных при наличии неповреждённых избыточных структур данных.

Включите и запустите xfs_scrub_all.timer для периодической проверки метаданных всех файловых систем XFS "на лету".

Примечание: Для удобства, можно отредактировать xfs_scrub_all.timer: таймер выполняется каждое воскресенье в 3:10 и сразу же запускается, если последний запуск был пропущен (например, так как система была выключена).

Целостность

В xfsprogs 3.2.0 появился новый дисковый (on-disk) формат (v5), включающий в себя схему контрольных сумм метаданных — Self-Describing Metadata. Она основывается на CRC32 и обеспечивает, к примеру, дополнительную защиту от повреждения метаданных при непредвиденном отключении электропитания. Контрольная сумма включена по умолчанию начиная с xfsprogs 3.2.3. Если требуется монтируемый для чтения-записи раздел XFS на более старом ядре, данная функция легко отключается с помощью параметра -m crc=0 при вызове mkfs.xfs(8).

# mkfs.xfs -m crc=0 /dev/необходимый_раздел

Дисковый (on-disk) формат XFS v5 считается стабильным для промышленной эксплуатации начиная с ядра Linux 3.15.

Примечание: В отличие от Btrfs (Русский) и ZFS (Русский), контрольная сумма CRC32 применяется только к метаданным, а не к фактическим данным.

Производительность

Просто создайте файловую систему XFS, чтобы достичь оптимальной скорости:

# mkfs.xfs /dev/необходимый_раздел

В XFS все улучшения включены по умолчанию.

Смотрите также xfs(5) для получения информации о доступных параметрах монтирования.

Совет: При использовании XFS на устройствах с RAID (Русский), улучшить производительность можно с помощью largeio, swalloc, увеличенными значениями logbsize, allocsize и так далее. В следующих статьях предоставлена дополнительная информация об этих флагах:

Размер и ширина полосы (stripe)

Если файловая система будет использоваться на чередующемся RAID-массиве, можно значительно повысить скорость, указав размер полосы (stripe) в команде mkfs.xfs(8).

Смотрите также How to calculate the correct sunit,swidth values for optimal performance

Время доступа

В некоторых файловых системах можно повысить производительность, добавив параметр монтирования noatime в файле /etc/fstab. Для XFS стандартным поведением atime является relatime, которое почти не имеет накладных расходов по сравнению с noatime, но при этом сохраняет нормальные значения atime. Все файловые системы Linux теперь используют это в качестве значения по умолчанию (примерно с версии 2.6.30), но XFS использует relatime-поведение с 2006 года, поэтому нет никакой необходимости использовать noatime по соображениям производительности.

Кроме того, noatime подразумевает nodiratime, поэтому нет необходимости указывать nodiratime при уже заданном noatime.

Дефрагментация

Хотя основанная на экстентах природа XFS и используемая стратегия отложенного размещения значительно повышают устойчивость файловой системы к проблемам фрагментации, XFS предоставляет утилиту xfs_fsr (сокращение от "реорганизатора файловой системы XFS") для дефрагменентации файлов на смонтированной и активной файловой системе XFS. Также полезно периодически проверять фрагментацию XFS.

xfs_fsr(8) улучшает организацию смонтированных файловых систем. Алгоритм реорганизации работает с одним файлом за раз, сжимая или улучшая размещение экстентов файла (последовательных блоков данных файла).

Проверка уровня фрагментации

Проверить уровень фрагментации в данный момент можно следующей командой:

# xfs_db -c frag -r /dev/sda3

Выполнение дефрагментации

Используйте команду xfs_fsr(8), чтобы начать дефрагментацию:

# xfs_fsr /dev/sda3

B-дерево со свободными inode-ами

Начиная с Linux 3.16, в XFS появилось B-дерево для отслеживания свободных inode, что равноценно существующему B-дереву для распределения индексных дескрипторов, за исключением того, что отслеживаются inode-блоки по крайней мере с одним свободным inode. Это делается для того, чтобы ускорить поиск свободных inode-кластеров при распределении inode. Также это повышает производительность старых файловых систем, например, спустя месяцы или годы после добавления и удаления миллионов файлов на файловой системе. Использование этой функции не влияет на общий уровень надёжности ФС или возможность восстановления.

Данная функция основывается на новом дисковом (on-disk) формате XFS v5, который считается стабильным для промышленной эксплуатации начиная с ядра Linux 3.15. Она не изменяет существующие дисковые структуры, но добавляет новую, которая должна оставаться целостной в B-дереве для отслеживания свободных inode. По этой же причине более старые версии ядра монтируют файловые системы с B-деревом свободных inode только в режиме для чтения.

Также данная функция включена по умолчанию начиная с xfsprogs 3.2.3. Если требуется возможность записи на файловую систему при использовании более старого ядра, отключите её с помощью параметра finobt=0 при форматировании XFS-раздела. crc=0 указывается вместе с предыдущим параметром.

# mkfs.xfs -m crc=0,finobt=0 /dev/необходимый_раздел

или короче (finobt зависит от crc)

# mkfs.xfs -m crc=0 /dev/необходимый_раздел

Внешний журнал XFS

Использование внешнего лога (журнала метаданных), например, на SSD (Русский), может улучшить производительность [1]. См. mkfs.xfs(8) для получения информации о параметре logdev.

Важно: Учтите, что использование флеш-памяти для этих целей может ускорить износ диска. См. раздел Improving performance#Reduce disk reads/writes для получения информации о износе SSD.

Укажите опцию -l logdev=device,size=size команде mkfs.xfs для резервации внешнего журнала определённого размера при создании файловой системы XFS. Если пропустить параметр size, размер журнала будет зависеть от размера ФС. Укажите опцию -o logdev=device команде mount для монтирования XFS с использованием внешнего журнала.

Решение проблем

Квота корневой файловой системы

Параметры монтирования XFS (uquota, gquota, prjquota и т.д.) не выполняются во время повторного монтирования файловой системы. Чтобы включить квоту корневой файловой системы, параметр монтирования должен быть передан initramfs как параметр ядра rootflags=. Впоследствии его не следует указывать среди параметров монтирования в /etc/fstab для корневой (/) файловой системы.

Примечание: Существуют некоторые различия между квотой XFS и стандартной дисковой квотой Linux, также стоит прочитать статью http://inai.de/linux/adm_quota.

Смотрите также