- XFS (Русский)
- Contents
- Установка
- Повреждение данных
- Восстановление файловой системы XFS
- Проверка метаданных «на лету» (scrub)
- Целостность
- Администрирование
- Изменение размера
- Производительность
- Размер и ширина полосы (stripe)
- Время доступа
- Дефрагментация
- Проверка уровня фрагментации
- Выполнение дефрагментации
- B-дерево со свободными inode-ами
- Внешний журнал XFS
- Интервал синхронизации
- Решение проблем
- Квота корневой файловой системы
- xfs_scrub_all отказывается работать, если пользователь «nobody» не может получить доступ к точке монтирования
- What is xfs in linux
- Contents
- Preparation
- Creation
- Checksumming
- Free inode btree
- Reverse mapping btree
- Big timestamps
- Performance
- Stripe size and width
- Access time
- Discard
- Defragmentation
- Inspect fragmentation levels
- Perform defragmentation
- Deduplication
- Reflink copies
- Deduplication
- External XFS Journal
- Sync interval
- Administration
- Resize
- Online Metadata Checking (scrub)
- Repair
- Troubleshooting
- Root file system quota
- xfs_scrub_all fails if user «nobody» can not access the mountpoint
XFS (Русский)
XFS — высокопроизводительная журналируемая файловая система, созданная Silicon Graphics, Inc. XFS особенно хорошо справляется с параллельным вводом-выводом благодаря структуре на основе заголовков для групп (allocation groups), что обеспечивает исключительную масштабируемость потоков ввода-вывода, пропускной способности файловой системы, размера файлов и файловой системы при работе с несколькими устройствами хранения.
Contents
Установка
Установите пакет xfsprogs для получения утилит XFS в пространстве пользователя. Данный пакет содержит средства, необходимые для управления файловой системой XFS.
Повреждение данных
В случае повреждения данных по какой-либо причине придётся восстанавливать файловую систему вручную.
Восстановление файловой системы XFS
Сначала размонтируйте файловую систему XFS.
После размонтирования запустите утилиту xfs_repair(8) .
Проверка метаданных «на лету» (scrub)
xfs_scrub запрашивает ядро очистить (англ. scrub) все объекты метаданных в XFS.Записи метаданных сканируются на очевидно ошибочные значения, после чего перекрёстно ссылаются на остальные метаданные. Это делается для того, чтобы иметь достаточно уверенности в целостности всей файловой системы, анализируя отдельные записи метаданных на фоне остальных метаданных в файловой системе. Повреждённые метаданные можно восстановить из других метаданных при наличии неповреждённых избыточных структур данных.
Включите и запустите xfs_scrub_all.timer для периодической проверки метаданных всех файловых систем XFS «на лету».
Целостность
В xfsprogs 3.2.0 появился новый дисковый (англ. on-disk) формат (v5), включающий в себя схему контрольных сумм метаданных — Self-Describing Metadata. Она основывается на CRC32 и обеспечивает, к примеру, дополнительную защиту от повреждения метаданных при непредвиденном отключении электропитания. Контрольная сумма включена по умолчанию начиная с xfsprogs 3.2.3. Если требуется монтируемый для чтения-записи раздел XFS на более старом ядре, данная функция легко отключается с помощью параметра -m crc=0 при вызове mkfs.xfs(8) .
Дисковый (англ. on-disk) формат XFS v5 считается стабильным для промышленной эксплуатации начиная с ядра Linux 3.15.
Администрирование
Изменение размера
XFS позволяет изменять размер файловой системы «на лету». Достаточно выполнить xfs_growfs с указанием точки монтирования, что расширит файловую систему до максимально возможного размера.
Производительность
Просто создайте файловую систему XFS, чтобы достичь оптимальной скорости:
Смотрите также xfs(5) для получения информации о доступных параметрах монтирования.
Размер и ширина полосы (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_fsr(8) , чтобы начать дефрагментацию:
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 указывается вместе с предыдущим параметром.
или короче ( finobt зависит от crc )
Внешний журнал XFS
Использование внешнего лога (журнала метаданных), например, на SSD (Русский), может улучшить производительность [1]. См. mkfs.xfs(8) для получения информации о параметре logdev .
Укажите опцию -l logdev=device,size=size команде mkfs.xfs для резервации внешнего журнала определённого размера при создании файловой системы XFS. Если пропустить параметр size , размер журнала будет зависеть от размера ФС. Укажите опцию -o logdev=device команде mount для монтирования XFS с использованием внешнего журнала.
Интервал синхронизации
В XFS существует отдельная переменная sysctl для настройки интервала обратной записи (англ. writeback interval). По умолчанию в Arch используется значение «3000». Возможно также задать и большее значение, однако стоит учитывать, что слишком большое значение может привести к потери данных в некоторых случаях:
Решение проблем
Квота корневой файловой системы
Параметры монтирования XFS ( uquota , gquota , prjquota и т.д.) не выполняются во время повторного монтирования файловой системы. Чтобы включить квоту корневой файловой системы, параметр монтирования должен быть передан initramfs как параметр ядра rootflags= . Впоследствии его не следует указывать среди параметров монтирования в /etc/fstab для корневой ( / ) файловой системы.
xfs_scrub_all отказывается работать, если пользователь «nobody» не может получить доступ к точке монтирования
При запуске xfs_scrub_all также запускается xfs_scrub@.service для каждой примонтированной файловой системы XFS. Данная служба запускается от пользователя nobody и соответственно, если nobody не может перейти в директорию, команда завершится со следующей ошибкой:
Чтобы разрешить запуск службы, измените разрешения точки монтирования таким образом, чтобы у пользователя nobody были права на выполнение.
Источник
What is xfs in linux
XFS is a high-performance journaling file system created by Silicon Graphics, Inc. XFS is particularly proficient at parallel IO due to its allocation group based design. This enables extreme scalability of IO threads, filesystem bandwidth, file and filesystem size when spanning multiple storage devices.
Contents
Preparation
For XFS userspace utilities install the xfsprogs package. It contains the tools necessary to manage an XFS file system.
Creation
To create a new filesystem on device use:
In general, the default options are optimal for common use. [1][2]
Checksumming
xfsprogs 3.2.0 has introduced a new on-disk format (v5) that includes a metadata checksum scheme called Self-Describing Metadata. Based upon CRC32 it provides for example additional protection against metadata corruption during unexpected power losses. Checksum is enabled by default when using xfsprogs 3.2.3 or later. If you need read-write mountable xfs for older kernel, it can be easily disabled using the -m crc=0 switch when calling mkfs.xfs(8) :
The XFS v5 on-disk format is considered stable for production workloads starting in Linux Kernel 3.15.
Free inode btree
Starting in Linux 3.16, XFS has added a btree that tracks free inodes. It is equivalent to the existing inode allocation btree with the exception that the free inode btree tracks inode chunks with at least one free inode. The purpose is to improve lookups for free inode clusters for inode allocation. It improves performance on aged filesystems i.e. months or years down the track when you have added and removed millions of files to/from the filesystem. Using this feature does not impact overall filesystem reliability level or recovery capabilities.
This feature relies on the new v5 on-disk format that has been considered stable for production workloads starting Linux Kernel 3.15. It does not change existing on-disk structures, but adds a new one that must remain consistent with the inode allocation btree; for this reason older kernels will only be able to mount read-only filesystems with the free inode btree feature.
The feature enabled by default when using xfsprogs 3.2.3 or later. If you need a writable filesystem for older kernels, it can be disable with the finobt=0 switch when formatting an XFS partition. You will need crc=0 together:
or shortly (because finobt depends on crc ):
Reverse mapping btree
The reverse mapping btree is at its core a secondary index of storage space usage that effectively provides a redundant copy of primary space usage metadata. This adds some overhead to filesystem operations, but its inclusion in a filesystem makes cross-referencing very fast. It is an essential feature for repairing filesystems online because we can rebuild damaged primary metadata from the secondary copy. [5]
The feature graduated from EXPERIMENTAL status in Linux 4.16 and is production ready. However, online filesystem checking and repair is (so far) the only use case for this feature, so it will remain opt-in at least until online checking graduates to production readiness.
The reverse mapping btree maps filesystem blocks to the owner of the filesystem block. Most of the mappings will be to an inode number and an offset, though there will also be mappings to filesystem metadata. This secondary metadata can be used to validate the primary metadata or to pinpoint exactly which data has been lost when a disk error occurs.
See also [6] and [7] for more information.
To try out this feature or future-proof new filesystems, pass the -m rmapbt=1 parameter during filesystem creation:
Big timestamps
Starting in Linux 5.10, XFS supports using refactored timestamp and inode encoding functions to handle timestamps as a 64-bit nanosecond counter and bit shifting to increase the effective size. This now allows XFS to run well past the Year 2038 problem (where storing the time since 1970 in seconds will no longer fit in a signed 32-bit integer and thus wraparound) to now the Year 2486. Making a new XFS file-system with *bigtime* enabled allows a timestamp range from December 1901 to July 2486 rather than December 1901 to January 2038. For preserving backwards compatibility, the big timestamps feature is not currently enabled by default. [8]
The feature will also allow quota timer expirations from January 1970 to July 2486 rather than January 1970 to February 2106.
To try out this feature or future-proof new filesystems, pass the -m bigtime=1 parameter during filesystem creation:
Starting from xfsprogs 5.11, this can also be enabled on existing (unmounted) filesystems:
Performance
The default values already used are optimised for best performance in the first place. mkfs.xfs will detect the difference between single disk and MD/DM RAID setups and change the default values it uses to configure the filesystem appropriately.
In most cases, the only thing you need to to consider for mkfs.xfs is specifying the stripe unit and width for hardware RAID devices. (see #Stripe size and width)
For mount options, the only thing that will change metadata performance considerably are the logbsize and delaylog mount options. Increasing logbsize reduces the number of journal IOs for a given workload, and delaylog will reduce them even further. The trade off for this increase in metadata performance is that more operations may be «missing» after recovery if the system crashes while actively making modifications.
As of kernel 3.2.12, the default i/o scheduler, CFQ, will defeat much of the parallelization in XFS.
Therefore for optimal performance, in most cases you can just follow #Creation.
Stripe size and width
If this filesystem will be on a striped RAID you can gain significant speed improvements by specifying the stripe size to the mkfs.xfs(8) command.
XFS can sometimes detect the geometry under software RAID, but in case you reshape it or you are using hardware RAID see how to calculate the correct sunit,swidth values for optimal performance.
Access time
On some filesystems you can increase performance by adding the noatime mount option to the /etc/fstab file. For XFS filesystems the default atime behaviour is relatime , which has almost no overhead compared to noatime but still maintains sane atime values. All Linux filesystems use this as the default now (since around 2.6.30), but XFS has used relatime-like behaviour since 2006, so no-one should really need to ever use noatime on XFS for performance reasons. [9]
See Fstab#atime options for more on this topic.
Discard
Despite XFS supporting async discard[10] since kernel 4.7[11][12], xfs(5) still recommends that you use the fstrim application to discard unused blocks rather than the discard mount option because the performance impact of this option is quite severe.
Defragmentation
Although the extent-based nature of XFS and the delayed allocation strategy it uses significantly improves the file system’s resistance to fragmentation problems, XFS provides a filesystem defragmentation utility (xfs_fsr, short for XFS filesystem reorganizer) that can defragment the files on a mounted and active XFS filesystem. It can be useful to view XFS fragmentation periodically.
xfs_fsr(8) improves the organization of mounted filesystems. The reorganization algorithm operates on one file at a time, compacting or otherwise improving the layout of the file extents (contiguous blocks of file data).
Inspect fragmentation levels
To see how much fragmentation your file system currently has:
Perform defragmentation
To begin defragmentation, use the xfs_fsr(8) command:
Deduplication
The reflink feature, available since kernel version 4.9 and enabled by default since mkfs.xfs version 5.1.0, allows creating fast reflink’ed copies of files as well as deduplication after the fact, in the same way as btrfs:
Reflink copies
Reflink copies initially use no additional space:
Until either file is edited, and a copy-on-write takes place. This can be very useful to create snapshots of (large) files.
Deduplication
Existing filesystems can be deduped using tools like duperemove .
External XFS Journal
Using an external log (metadata journal) on for instance a SSD may be useful to improve performance [13]. See mkfs.xfs(8) for details about the logdev parameter.
To reserve an external journal with a specified size when you create an XFS file system, specify the -l logdev=device,size=size option to the mkfs.xfs command. If you omit the size parameter, a journal size based on the size of the file system is used. To mount the XFS file system so that it uses the external journal, specify the -o logdev=device option to the mount command.
Sync interval
XFS has a dedicated sysctl variable for setting the writeback interval with a default value of 3000.
Administration
Resize
XFS can be resized online, after the partition has been altered. Just run xfs_growfs with the mount point as first parameter to grow the XFS filesystem to the maximal size possible.
Online Metadata Checking (scrub)
xfs_scrub asks the kernel to scrub all metadata objects in the XFS filesystem. Metadata records are scanned for obviously bad values and then cross-referenced against other metadata. The goal is to establish a reasonable confidence about the consistency of the overall filesystem by examining the consistency of individual metadata records against the other metadata in the filesystem. Damaged metadata can be rebuilt from other metadata if there exists redundant data structures which are intact.
Enable/start xfs_scrub_all.timer to periodic check online metadata for all XFS filesystems.
Repair
If you cannot mount an XFS file system, you can use the xfs_repair -n command to check its consistency. Usually, you would only run this command on the device file of an unmounted file system that you believe has a problem. The xfs_repair -n command displays output to indicate changes that would be made to the file system in the case where it would need to complete a repair operation, but will not modify the file system directly.
If you can mount the file system and you do not have a suitable backup, you can use xfsdump to attempt to back up the existing file system data, However, the command might fail if the file system’s metadata has become too corrupted.
You can use the xfs_repair command to attempt to repair an XFS file system specified by its device file. The command replays the journal log to fix any inconsistencies that might have resulted from the file system not being cleanly unmounted. Unless the file system has an inconsistency, it is usually not necessary to use the command, as the journal is replayed every time that you mount an XFS file system.
First unmount the filesystem, then run the xfs_repair(8) tool:
If the journal log has become corrupted, you can reset the log by specifying the -L option to xfs_repair.
If you cannot mount the file system or you do not have a suitable backup, running xfs_repair is the only viable option unless you are experienced in using xfs_db.
xfs_db provides an internal command set that allows you to debug and repair an XFS file system manually. The commands allow you to perform scans on the file system, and to navigate and display its data structures. If you specify the -x option to enable expert mode, you can modify the data structures.
For more information, see the xfs_db(8) and xfs_repair(8) , and the help command within xfs_db.
Troubleshooting
Root file system quota
XFS quota mount options ( uquota , gquota , prjquota , etc.) fail during re-mount of the file system. To enable quota for root file system, the mount option must be passed to initramfs as a kernel parameter rootflags= . Subsequently, it should not be listed among mount options in /etc/fstab for the root ( / ) filesystem.
xfs_scrub_all fails if user «nobody» can not access the mountpoint
When running xfs_scrub_all , it will launch xfs_scrub@.service for each mounted XFS file system. The service is run as user nobody , so if nobody can not navigate to the directory, it will fail with the error:
To allow the service to run, change the permissions of the mountpoint so that user nobody has execute permissions.
Источник