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

Jump to content

# F2FS (Русский)

From ArchWiki

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

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

F2FS (Flash-Friendly File System) — это файловая система которая в отличии от JFFS и UBIFS, предназначена для накопителей с флэш-памятью на основе технологии NAND, оснащенных flash-transition layer (FTL).

FTL-контроллер есть во всех накопителях с интерфейсом SCSI/SATA/PCIe/NVMe [1], и отвечает за распределение данных, обеспечивая более эффективное использование пространства и продление срока службы накопителя.

Примечание F2FS имеет ограниченную обратную совместимость между версиями ядра и f2fs-tools. Данные на разделах могут оказаться недоступными, если ядро, использованное для их создания, включало более новые функции, чем текущее. Это может проявиться при откате с ядра linux до linux-lts.

## Известные проблемы

### Потеря данных при внезапном отключении питании

Из-за архитектурных особенностей[2] и несовершенности механизмов восстановления fsck, F2FS склонна терять файлы после внезапного отключения.

Если перебои с электричеством или жесткие перезагрузки происходят часто, стоит рассмотреть альтернативные Файловые системы.

### Ограниченная поддержка GRUB

GRUB поддерживает файловую систему F2FS с версии 2.0.4. Однако он не может правильно считывать загрузочные файлы с раздела F2FS, если тот создан с включенным флагом `extra_attr`.

## Создание файловой системы

Установите f2fs-tools и используйте `mkfs.f2fs` для форматирования целевого раздела:

    # mkfs.f2fs -l метка -i -O extra_attr,inode_checksum,sb_checksum,lost_found,flexible_inline_xattr /dev/раздел

Примечание

- `-i` увеличивает базовый процент инодов предотвращая их нехватку.
- `inode_checksum`, `sb_checksum` и `lost_found` - опции, позволяющие fsck.f2fs обнаруживать и исправлять некоторые типы повреждений файловой системы.

Смотрите mkfs.f2fs(8) для получения информации обо всех доступных вариантах.

### Рекомендуемые опции монтирования

Ниже будут рассмотрены опции, которые могут улучшить внутреннюю работу и повысить надёжность файловой системы, однако обязательно используемыми они не являются..

- `gc_merge` Асинхронная обработка запросов GC. Это позволяет устранить медленную работу при ограниченных ресурсах ввода-вывода и центрального процессора.
- `inline_data,inline_dentry` Встраивание маленьких файлов и каталогов внутрь inode. Уменьшает фрагментацию, уменьшает WAF и ускоряет операции ввода-вывода этих файлов.
- `flush_merge` Уменьшение задержек при множественных запросах FSYNC.
- `atgc` Использование Age Threshold GC вместо классического. Существенно снижает WAF и задержки созданные работой GC.

  Примечание Перед использование ознакомьтесь с #Failed to start Remount Root and Kernel File Systems.

- `data_flush` При создании CP фиксирует не только метаданные, но обычные данные в кэше. Обеспечивает защиту от "нулевых файлов" при внезапном обесточивании.
- `checkpoint_merge` Объединяет запросы на создание CP и задает им более высокий приоритет для уменьшения задержек.
- `discard_unit=section` Увеличивает минимальный порог для работы механизма discard с блока до сегмента. Уменьшает задержки и снижает нагрузку на контроллер NVME.
- `age_extent_cache` Продвинутые эвристики оценки возраста файлов для работы GC, хранимые в RAM кэше.
- `nat_bits` Оптимизация bitmap. Значительно ускоряет массовые операции с метеданными при более низкой нагрузке на процессор.

#### Реализация discard

По умолчанию F2FS монтируется с использованием гибридного режима, который ведет себя как непрерывный TRIM. Эта реализация создает асинхронные потоки для уменьшения задержек. Он сохраняет кандидатов в памяти, и выдает их во время простоя [3].
Пользователям желающим периодический_TRIM потребуется неявно установить параметр монтирования `nodiscard`.

### Сжатие

Примечание

- Реализованное сжатие в F2FS направлено на увеличение срока службы накопителя путем сокращения операций ввода-вывода.
- При использовании алгоритма LZ4 возможно добиться небольшого ускорения операций чтения.
  - По умолчанию LZ4 использует самый быстрый уровень сжатия и не требует его определения вручную.
- Сжатое пространство по умолчанию не предоставляется пользователю, для возможности дальнейшей записи данных в тот же диапазон.
  - Однако, команда `f2fs_io release_cblocks файл` позволяет высвободить зарезервированное пространство до тех пор, пока файл неизменяем.

Чтобы использовать сжатие, добавьте при форматировании опцию `compression`.

    # mkfs.f2fs -l метка -O extra_attr,inode_checksum,sb_checksum,lost_found,flexible_inline_xattr,compression /dev/раздел

По умолчанию F2FS сжимает только явно указанные каталоги/файлы с помощью:

- Атрибута файла `+c` на каталоге/файле;

- Опции монтирования `compress_extension` с указанием расширения файла.

Совет

Для каждого отдельного расширения опцию нужно прописывать полностью.

Пример: `compress_extension=txt,compress_extension=log`

#### Опции монтирования для настройки сжатия

Помимо `compress_extension`, есть еще ряд опций которое можно использовать при монтировании:

`compress_algorithm` Выбор алгоритма сжатия (ZSTD,LZ4,lzo и lzo-rle). Для ZSTD и LZ4 доступна настройка уровней — ZSTD: 1-22, LZ4: 3-16.

`compress_chksum` Создание контрольных сумм для данных внутри сжатого кластера.

`compress_cache` Обеспечивает попадание сжатых блоков в кэш, для ускорения операций случайного чтения.

### Шифрование

Начиная с ядра 4.2, F2FS поддерживает шифрование файлов fscrypt на уровне каталогов, и в разных каталогах могут использоваться разные ключи шифрования. Это отличается как от dm-crypt (Русский), который представляет собой шифрование на уровне блочного устройства, так и от eCryptfs (Русский), который представляет собой многоуровневую криптографическую файловую систему. Чтобы использовать встроенную поддержку шифрования в F2FS, ознакомьтесь со статьей fscrypt.

Создайте файловую систему с помощью:

     # mkfs.f2fs -l метка -O extra_attr,inode_checksum,sb_checksum,encrypt /dev/раздел

Или добавьте возможность шифрования позже с помощью: `fsck.f2fs -O encrypt /dev/раздел`.

## Проверка и ремонт

Проверка и восстановление файловой системы F2FS выполняются с помощью `fsck.f2fs`, предоставляемого пакетом f2fs-tools. Чтобы проверить файловую систему, выполните:

    # fsck.f2fs /dev/раздел

В зависимости от результата, смотрите fsck.f2fs(8). Например для принудительного устранения ошибок используйте:

    # fsck.f2fs -f /dev/раздел

## Увеличение раздела

Когда файловая система размонтирована, ее можно увеличить, если расширить раздел. Уменьшение в настоящее время не поддерживается.

Сначала используйте инструменты разметки чтобы изменить размер раздела: предположим, что команда `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/раздел

где `/dev/раздел` том, который будет увеличивать целевой объем F2FS.
Смотрите раздел resize.f2fs(8) о поддерживаемых параметрах.

Примечание При использовании GPT, GUID раздела (отображается в `/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 не разрешит повторное монтирование[4][5].

Для решения проблемы:

- добавьте параметр ядра `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`.

Category:

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

F2FS (Русский)
Add topic