F2FS (Русский)
F2FS (Flash-Friendly File System) — это файловая система, предназначенная для флэш-памяти на основе технологии NAND, оснащенной flash-transition layer (FTL). В отличие от JFFS и UBIFS, она использует FTL для распределения записи. Поддерживается начиная с версии ядра 3.8.
FTL-контроллер есть во всех флеш-накопителях с интерфейсом SCSI/SATA/PCIe/NVMe [1], в отличие от обычной флеш-памяти NAND и карт памяти SmartMediaCard [2].
Известные проблемы
Сбои fsck
В файловой системе F2FS есть проблема с fsck. Она может вызвать потерю данных при неожиданном отключении питания [3][4].
Если перебои с электричеством происходят часто, стоит рассмотреть альтернативные Файловые системы.
Поддержка GRUB
GRUB поддерживает файловую систему F2FS с версии 2.0.4. Однако он не может правильно считывать загрузочные файлы с раздела F2FS, если тот создан с включенным флагом extra_attr (подробнее см. GRUB#Неподдерживаемые файловые системы).
Создание файловой системы F2FS
В этой статье предполагается, что на устройстве уже установлены Partitioning (Русский). Установите f2fs-tools. Используйте mkfs.f2fs для форматирования целевого раздела, называемого "/dev/sdXY":
# mkfs.f2fs -l mylabel -i -O extra_attr,inode_checksum,sb_checksum /dev/sdxY
- Опция
-iвключена, чтобы обеспечить больше места для индексных индексов. -
extra_attr,inode_checksumиsb_checksum- это опции, которые помогают fsck.f2fs обнаруживать и устранять некоторые типы повреждений файловой системы. Смотрите mkfs.f2fs(8) для получения информации обо всех доступных вариантах.
Сжатие
- Реализованное сжатие в F2FS направлено на сокращение операций ввода-вывода.
- При использовании алгоритма LZ4 возможно небольшое ускорение операций чтения.
- Сжатое пространство по умолчанию не предоставляется пользователю, чтобы избежать возможную нехватку места при последующей записи данных в тот же диапазон.
- Однако, команда
f2fs_io release_cblocks файлпозволяет высвободить зарезервированное пространство до тех пор, пока файл неизменяем.
- Однако, команда
Чтобы использовать сжатие, добавьте опцию compression.
# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,compression /dev/sdxY
По умолчанию F2FS сжимает только явно указанные каталоги/файлы с помощью:
-
Атрибута файла
+cна каталоге/файле;
- Опции монтирования
compress_extension, с указанием расширения файла.
Для каждого отдельного расширения опцию нужно прописывать полностью.
Пример:
compress_extension=txt,compress_extension=log
Шифрование
Начиная с Linux 4.2, F2FS изначально поддерживает шифрование файлов. Шифрование применяется на уровне каталогов, и в разных каталогах могут использоваться разные ключи шифрования. Это отличается как от dm-crypt (Русский), который представляет собой шифрование на уровне блочного устройства, так и от eCryptfs (Русский), который представляет собой многоуровневую криптографическую файловую систему. Чтобы использовать встроенную поддержку шифрования в F2FS, ознакомьтесь со статьей fscrypt.
Создайте файловую систему с помощью
# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,encrypt /dev/sdxY
или добавьте возможность шифрования позже с помощью fsck.f2fs -O encrypt /dev/sdxY.
Монтирование файловой системы F2FS
Файловая система может быть смонтирована вручную или с помощью других механизмов:
# mount /dev/sdxY /mnt/foo
Рекомендуемые опции монтирования
Поскольку F2FS предназначен для использования на флэш-устройствах, рекомендуется использовать сжатие. Его необходимо включить во время mkfs.f2fs.
Чтобы немного улучшить работу, можно использовать несколько вариантов монтирования:
# mount -o compress_algorithm=zstd:6,compress_chksum,atgc,gc_merge,lazytime /dev/sdxY /mnt/точка монтирования
-
compress_algorithm=zstd:6Указывает F2FS использовать zstd для сжатия на уровне 6, что обеспечит хорошую степень сжатия. -
compress_chksumУказывает файловой системе проверять сжатые блоки с помощью контрольной суммы (чтобы избежать повреждения). -
atgc,gc_mergeВключите улучшенный сборщик мусора и сделайте некоторые сборки мусора переднего плана асинхронными.
- Примечание Смотрите #Failed to start Remount Root and Kernel File Systems.
-
lazytimeУказывает не обновлять время доступа или внесения изменений синхронно. Повышает производительность ввода-вывода и долговечность флэш-памяти.
Реализация discard
По умолчанию F2FS монтируется с использованием гибридного режима, который ведет себя как непрерывный TRIM. Эта реализация создает асинхронные потоки для уменьшения задержек. Он сохраняет кандидатов в памяти, и выдает их во время простоя [5].
Пользователям желающим периодический_TRIM потребуется неявно установить параметр монтирования nodiscard в /etc/fstab или передать его в mount при монтировании вручную.
Проверка и ремонт
Проверка и восстановление файловой системы F2FS выполняются с помощью fsck.f2fs, предоставляемого пакетом f2fs-tools. Чтобы проверить файловую систему, выполните:
# fsck.f2fs /dev/sdXY
В зависимости от результата, смотрите fsck.f2fs(8). Например для принудительного устранения ошибок используйте:
# fsck.f2fs -f /dev/sdxY
Увеличение раздела
Когда файловая система размонтирована, ее можно увеличить, если расширить раздел. Уменьшение в настоящее время не поддерживается.
Сначала используйте инструменты разметки чтобы изменить размер раздела: предположим, что команда print выводится в консоли parted следующим образом:
Number Start End Size File system Name Flag 1 1049kB 106MB 105MB fat32 EFI system partition boot, esp 2 106MB 11,0GB 10,9GB ext4 3 11,0GB 12,3GB 1322MB f2fs 4 31,0GB 31,3GB 261MB ext4
Чтобы изменить размер раздела f2fs так, чтобы он занимал все пространство до четвертого, просто укажите resizepart 3 31 ГБ и exit.
Теперь разверните файловую систему, чтобы заполнить новый раздел, используя:
# resize.f2fs /dev/sdxY
где /dev/sdxY том, который будет увеличивать целевой объем F2FS.
Смотрите раздел resize.f2fs(8) о поддерживаемых параметрах.
/dev/disk/by-partuuid/) может измениться, но UUID (отображается в /dev/disk/by-uuid/) должен остаться прежним.Решение проблем
Failed to start Remount Root and Kernel File Systems
Как упоминалось в Fsck_(Русский)#Проверка_при_загрузке, ядро по умолчанию поддерживает файловые системы в состоянии, доступном только для чтения, и необходимо либо явно передать rw в параметр ядра, либо systemd повторно подключает файловые системы для чтения и записи с помощью systemd-remount-fs.service.
При повторном подключении файловой системы из состояния только для чтения в состояние для записи mount -o remount,... / может завершиться ошибкой по нескольким причинам, что сделает корневую файловую систему доступной только для чтения, либо приведет к невозможности загрузки системы с ошибкой сообщение:
Failed to start Remount Root and Kernel File Systems.
Если параметр atgc указан в файле fstab, но не был передан в качестве параметра ядра, модуль ядра F2FS не разрешит повторное монтирование[6][7].
Для решения проблемы:
- добавьте параметр ядра
rootflags=atgcв конфигурацию вашего загрузчика, - добавьте параметр ядра
rwв конфигурацию вашего загрузчика, - удалите параметр монтирования
atgcиз fstab.
Начиная с версии linux 6.2, в ядре выполняется проверка, опции flush_merge, если файловая система доступна только для чтения. Как объясняется в FS#77596, перед повторным монтированием также проверяется её состояние.
Для решения проблемы:
- добавьте параметр ядра
rwв конфигурацию вашего загрузчика, - удалите параметр монтирования
flush_mergeиз fstab.
Cannot set file attributes for '/var/log/journal'
Cannot set file attributes for '/var/log/journal', maybe due to incompatibility in specified attributes, previous=0x10001000, current=0x10001000, expected=0x10801000, ignoring.
Если ваш журнал содержит такую запись, её можно спокойно проигнорировать: это связано с тем, что Systemd_(Русский)#systemd-tmpfiles пытается использовать функцию NOCOW, не поддерживаемую F2FS.
Для исправления этого создайте /etc/tmpfiles.d/journal-nocow.conf со следующими содержанием:
#h /var/log/journal - - - - +C #h /var/log/journal/%m - - - - +C #h /var/log/journal/remote - - - - +C
И перезагрузите службы systemd
systemctl daemon-reload.