XFS (Русский) - ArchWiki

Jump to content

# XFS (Русский)

From ArchWiki

Ссылки по теме

- Файловые системы

Состояние перевода: На этой странице представлен перевод статьи XFS. Дата последней синхронизации: 23 августа 2020. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

## Установка

Установите пакет xfsprogs для получения утилит XFS в пространстве пользователя. Данный пакет содержит средства, необходимые для управления файловой системой XFS.

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

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

### Восстановление файловой системы 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 не поддерживает[устаревшая ссылка 2021-11-19] уменьшение размера ФС.

XFS позволяет изменять размер файловой системы "на лету". Достаточно выполнить `xfs_growfs` с указанием точки монтирования, что расширит файловую систему до максимально возможного размера.

    # xfs_growfs /путь/к/точке/монтирования

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

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

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

В XFS все улучшения включены по умолчанию[устаревшая ссылка 2021-11-19] (англ.).

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

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

- https://www.beegfs.io/wiki/StorageServerTuning (англ.)
- https://help.marklogic.com/Knowledgebase/Article/View/505/0/recommended-xfs-settings-for-marklogic-server (англ.)

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

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

XFS иногда определяет "геометрию" программного RAID-массива, но если она изменяется или используется аппаратный RAID, то см. статью "How to calculate the correct sunit,swidth values for optimal performance[устаревшая ссылка 2021-11-19]" (англ.).

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

В некоторых файловых системах можно повысить производительность, добавив параметр монтирования `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 существует отдельная переменная sysctl для настройки интервала обратной записи (англ. writeback interval). По умолчанию в Arch используется значение "3000". Возможно также задать и большее значение, однако стоит учитывать, что слишком большое значение может привести к потери данных в некоторых случаях:

    /etc/sysctl.d/20-xfs-sync-interval.conf

    fs.xfs.xfssyncd_centisecs = 10000

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

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

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

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

### xfs_scrub_all отказывается работать, если пользователь "nobody" не может получить доступ к точке монтирования

При запуске `xfs_scrub_all` также запускается `xfs_scrub@.service` для каждой примонтированной файловой системы XFS. Данная служба запускается от пользователя `nobody` и соответственно, если `nobody` не может перейти в директорию, команда завершится со следующей ошибкой:

    xfs_scrub@точка_монтирования.service: Changing to the requested working directory failed: Permission denied
    xfs_scrub@точка_монтирования.service: Failed at step CHDIR spawning /usr/bin/xfs_scrub: Permission denied
    xfs_scrub@точка_монтирования.service: Main process exited, code=exited, status=200/CHDIR

Чтобы разрешить запуск службы, измените разрешения точки монтирования таким образом, чтобы у пользователя `nobody` были права на выполнение.

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

- XFS FAQ[устаревшая ссылка 2021-11-19] (англ.)
- Improving Metadata Performance By Reducing Journal Overhead[устаревшая ссылка 2021-11-19] (англ.)
- Статья об XFS на Википедии

Category:

- File systems (Русский)