F2FS - Arch Linux 中文维基

跳至內容

# F2FS

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 F2FS，最近一次同步於 2022-08-17，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- File systems

F2FS (Flash-Friendly File System) 是一個為配備了 Flash Transition Layer 的 NAND 快閃記憶體開發的文件系統，與 JFFS 或 UBIFS 不同，它依靠 FTL 來處理寫入分發。 Linux從內核3.8開始支持 F2FS 。

警告：若運行的內核版本比創建F2FS文件系統的內核版本低，則文件系統可能無法使用。例如，使用linux包提供的內核創建文件系統，當系統需要降級到linux-lts包提供的內核時，就可能出現問題。詳見FS#69363。

## 已知問題

### fsck錯誤

F2FS的fsck不完善，可能在系統突然斷電後導致數據丟失[1][2]。

如果經常遭遇突然斷電，建議使用其它文件系統。

### GRUB 支持

儘管GRUB從2.0.4版本開始就支持F2FS，但它無法從啟用了`extra_attr`flag的F2FS分區中正確讀取啟動文件。（詳見GRUB#不支持的文件系統）

## 創建 F2FS 文件系統

本文假定設備已分區。

首先，安裝f2fs-tools包軟體包。

用`mkfs.f2fs`命令創建一個文件系統（`/dev/sdxY` 是想要設置成 F2FS 的分區。）：

    # mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum /dev/sdxY

注意：推薦至少要設置上例中的選項，這些選項能幫助`f2fs.fsck`檢測並修復某些文件系統損壞。對於所有可用的選項，見mkfs.f2fs(8)。

### 壓縮

注意：與其它支持inline compression的文件系統不同，F2FS的壓縮默認情況下並不會提供額外的可用空間。不論是否啟用壓縮，F2FS都會保留相同數目的block，這主要是為了減少寫入放大以延長快閃記憶體壽命，同時可能帶來微小的性能提升。詳見內核文檔中的Compression Implementation。可以通過iotcl系統調用傳遞`F2FS_IOC_RELEASE_COMPRESS_BLOCKS`命令將對應文件未使用的空間暴露出來，但這將使該文件不可變。

要使用壓縮，添加`compression`選項，例如：

    # mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,compression /dev/sdxY

掛載文件系統時，指定`compress_algorithm=(lzo|lz4|zstd|lzo-rle)`掛載選項。此外，`compress_extension=txt`掛載選項可自動壓縮所有創建的txt文件。

要指定F2FS壓縮某一文件或目錄，使用：

    $ chattr -R +c [FOLDER]

### 文件層面的加密

從Linux內核4.2開始，F2FS原生支持文件加密。F2FS的加密是目錄層級的，不同的目錄可以使用不同的密鑰。這不同於 dm-crypt（塊設備層級）或eCryptfs（嵌套在已有文件系統上）。要使用F2FS的原生加密支持，用如下命令創建文件系統：

     # mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,encrypt /dev/sdxY

對於已有的文件系統，可使用`fsck.f2fs -O encrypt /dev/sdxY`啟用加密。關於如何使用加密，見fscrypt。

## 掛載F2FS文件系統

既可以手動掛載文件系統，也可以使用其它掛載機制：

    # mount /dev/sdxY /mnt/foo

### 推薦的掛載選項

因為F2FS是設計為在快閃記憶體設備上使用的，建議啟用壓縮。要啟用壓縮，必須在使用`mkfs.f2fs`創建文件系統時就指定相應選項。 可以使用以下掛載選項略微提升性能：

    # mount -o compress_algorithm=zstd:6,compress_chksum,atgc,gc_merge,lazytime /dev/sdxY /mnt/foo

- `compress_algorithm=zstd:6`：使用zstd壓縮等級6進行壓縮, 可提供很好的壓縮率。
- `compress_chksum`：使用校驗碼檢查壓縮的block，可防止數據損壞。
- `atgc,gc_merge`：啟用更好的GC方式，異步執行某些前台GC。
- `lazytime`：不使用同步方式更新文件的訪問與修改時間，可提升IO性能與快閃記憶體壽命。

### discard實現方式

默認情況下，F2FS使用混合型TRIM模式（類似continuous TRIM）。該實現方式使用異步的discard線程來緩解RW IO的高discard延遲。其在內存中維護一個discard操作的等待隊列，並在空閒時執行它們（詳見[3]）。若要使用periodic TRIM，則需要指定`nodiscard`掛載選項。

## 檢查與修復

檢查與修復F2FS文件系統需要使用f2fs-tools包提供的`fsck.f2fs`工具。要檢查一個F2FS文件系統，執行：

    # fsck.f2fs /dev/sdxY

根據結果選擇不同的選項來修復不一致問題（詳見fsck.f2fs(8)），例如：

    # fsck.f2fs -f /dev/sdxY

## 擴容 F2FS 文件系統

如果文件系統未被掛載，且對應的分區已經被拓展，則可以擴容文件系統。但目前不支持收縮。 首先使用分區工具調整分區大小。例如，假設`parted`控制台中`print`命令的輸出如下：

    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`對應分區（3號）占據4號分區前的所有空閒空間，執行`resizepart 3 31GB`。使用`exit`退出`parted`。

然後擴容文件系統來填充新的分區，使用以下命令:

    # resize.f2fs /dev/sdxY

`/dev/sdxY`是要擴容的 F2FS 分區。可用的選項見 resize.f2fs(8)。

注意：如果使用 GPT，分區的 GUID (可通過`/dev/disk/by-partuuid/`查看) 可能會改變，但是文件系統的 UUID (可通過`/dev/disk/by-uuid/`查看) 應該保持不變。
分類：​

- 文件系統

F2FS
新增話題