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

# XFS (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

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

Состояние перевода: На этой странице представлен перевод статьи 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 не поддерживает уменьшение размера ФС.

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

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

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

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

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

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

Смотрите также 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" (англ.).

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

В некоторых файловых системах можно повысить производительность, добавив параметр монтирования `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 (англ.)
- Improving Metadata Performance By Reducing Journal Overhead (англ.)
- Статья об XFS на Википедии

Category:

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