「F2FS」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(他言語へのリンクを修正)
 
(4人の利用者による、間の39版が非表示)
1行目: 1行目:
 
[[Category:ファイルシステム]]
 
[[Category:ファイルシステム]]
[[en:F2fs]]
+
[[en:F2FS]]
[[it:F2fs]]
+
[[ko:F2FS]]
[[ru:F2fs]]
+
[[zh-hans:F2FS]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ファイルシステム}}
 
{{Related|ファイルシステム}}
 
{{Related articles end}}
 
{{Related articles end}}
[[Wikipedia:F2FS|F2FS]] (Flash-Friendly File System) は NAND フラッシュメモリに最適化されたファイルシステムです。F2FS はカーネル 3.8 からサポートされています。
 
   
  +
[[Wikipedia:ja:F2FS|F2FS]] (Flash-Friendly File System) はフラッシュ変換レイヤ (FTL) を備えた NAND ベースフラッシュメモリに最適化されたファイルシステムです。JFFS や UBIFS と異なり、書き込み分散を処理するのに FTL に依存しています。F2FS はカーネル 3.8 以上でサポートされています。
== F2FS パーティションの作成 ==
 
F2FS パーティションを作成するには、[[公式リポジトリ]]から {{Pkg|f2fs-tools}} パッケージを[[Pacman|インストール]]する必要があります。
 
   
  +
FTL は SCSI/SATA/PCIe/NVMe インターフェイスがある全てのフラッシュメモリに存在します [http://accelazh.github.io/ssd/A-Summary-On-SSD-And-FTL]。スマートメディアカードやベアメタルな NAND フラッシュには存在しません [http://www.linux-mtd.infradead.org/archive/tech/nand.html]。
パーティションの作成:
 
# mkfs.f2fs /dev/sdxY
 
''/dev/sdxY'' の部分は F2FS のフォーマット対象ボリュームです。
 
== F2FS パーティションのマウント ==
 
マウントする前に F2FS カーネルモジュールをロードする必要があるかもしれません。root で次を実行してください:
 
   
  +
{{Warning|F2FS パーティションに含まれるデータは、実行中のマシンのカーネルのバージョンがパーティションの作成に使用されたカーネルのバージョンよりも ''古い'' 場合、使用できなくなる可能性があります。例えば、 F2FS パーティションが {{pkg|linux}} で提供されるメインラインカーネル上に作成されているにもかかわらず、システムが {{pkg|linux-lts}} で提供される古いシリーズのカーネルにダウングレードする必要がある場合、この問題が出てきます。 {{Bug|69363}} を参照してください}}
# modprobe f2fs
 
   
  +
== 既知の問題 ==
これでパーティションをマウントすることができます:
 
  +
=== fsck が失敗する===
   
  +
F2FS は fsck 実行に問題があり、突然の電源喪失の場合にデータ損失につながる可能性があります [https://www.usenix.org/system/files/atc19-jaffer.pdf][https://web.archive.org/web/20200925120546/https://archived.forum.manjaro.org/t/record-fsync-data-failed-on-f2fs-file-system-how-to-fix-foregt-the-help-i-reinstalled-its-just-easier/121051]
# mount -t f2fs /dev/sdxY /mnt
 
   
  +
電力損失が頻繁に発生する場合は、別の [[ファイルシステム]] を検討してください。
== Arch Linux を F2FS パーティション上にインストール ==
 
最新のインストールメディア (2013.04.01) では F2FS パーティション上にシステムをインストールすることが可能です:
 
   
  +
=== fsck の長時間実行による起動の遅延 ===
#インストールメディアで arch を実行している間に[[公式リポジトリ]]から {{Pkg|f2fs-tools}} をインストール。
 
  +
#上述の通りに {{ic|f2fs}} カーネルモジュールをロード。
 
  +
ブート間でカーネルバージョンが変更された場合、 ''fsck.f2fs'' ユーティリティは完全なファイルシステムチェックを実行しますが、完了するまでに時間がかかります [https://bbs.archlinux.org/viewtopic.php?id=245702]
#上述の通りに root パーティションを F2FS を使って作成。
 
  +
#{{ic|/boot}} パーティションを ext4 (やその他のサポートされているファイルシステム) として作成。
 
  +
これは、最近のコミット [https://www.mail-archive.com/linux-f2fs-devel@lists.sourceforge.net/msg17224.html] のおかげで、将来的に軽減される可能性があります。
#[[ビギナーズガイド#パーティションのマウント|公式インストールガイド]]通りにシステムをマウント・インストール・chroot。
 
  +
#(インストールしたシステムで) {{ic|f2fs}} を {{ic|/etc/mkinitcpio.conf}} の modules セクションに追加。
 
  +
=== GRUB のサポート ===
#その後 initramfs イメージを再生成するのを忘れずに:
 
  +
::{{ic|# mkinitcpio -p linux}}
 
  +
GRUB はバージョン 2.0.4 から F2FS をサポートしていますが、{{ic|extra_attr}} フラグを有効にして作成した F2FS パーティションからブートファイルを正しく読み込むことができません (詳細は [[GRUB#サポートのないファイルシステム]] を参照してください。)
  +
  +
=== 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.
  +
  +
F2FS がサポートしていないファイルシステムの機能を [[systemd-tmpfiles]] が使おうとしているためです。
  +
  +
== F2FS ファイルシステムの作成 ==
  +
この記事は、デバイスに [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0 パーティション] がすでにセットアップされていることを前提としています。 {{Pkg|f2fs-tools}} を [[インストール]] し {{ic|mkfs.f2fs}} を使用して、{{ic| ''/dev/sdxY''}} と呼ばれるターゲットパーティションをフォーマットします。
  +
  +
# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum ''/dev/sdxY''
  +
  +
{{Note|上記の例は、 {{ic|f2fs.fsck}} が特定の種類のファイルシステムの破損を検出して修正するのに役立つ最小限の推奨オプションセットです。使用可能なすべてのオプションについては、{{man|8|mkfs.f2fs}} を参照してください。}}
  +
  +
=== 圧縮 ===
  +
  +
{{note|インライン圧縮を行う他のファイルシステムとは異なり、f2fs 圧縮はデフォルトで追加のフリースペースを公開せず、代わりに圧縮が有効かどうかに関わらず同じ数のブロックを確保します。主な目的はフラッシュの寿命を延ばすために書き込みを減らすことであり、 潜在的には [https://lz4.github.io/lz4/ 性能が少し向上する] ことである。カーネルドキュメントの [https://www.kernel.org/doc/html/latest/filesystems/f2fs.html#compression-implementation Compression Implementation] を参照してください。{{ic|F2FS_IOC_RELEASE_COMPRESS_BLOCKS}} はファイルごとに未使用領域を公開するために使うことができますが、その過程でファイルが不変になってしまいます。}}
  +
  +
圧縮を使用するには、 {{ic|compression}} オプションを含めます。例:
  +
  +
# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,'''compression''' ''/dev/sdxY''
  +
  +
ファイルシステムをマウントするときは、 {{ic|<nowiki>compress_algorithm=(lzo|lz4|zstd|lzo-rle)</nowiki>}} を指定します。 {{ic|<nowiki>compress_extension=txt</nowiki>}} を使用すると、デフォルトですべての txt ファイルが圧縮されます。
  +
  +
F2FS にファイルまたはディレクトリを圧縮するように指示するには、次を使用します。
  +
  +
$ chattr -R +c [フォルダ]
  +
  +
=== ファイルベースの暗号化サポート ===
  +
  +
Linux 4.2以降、 F2FS はファイル暗号化をネイティブにサポートしています。暗号化はディレクトリレベルで適用され、ディレクトリごとに異なる暗号化キーを使用できます。これは、ブロックデバイスレベルの暗号化である [[dm-crypt]] と、スタック暗号化ファイルシステムである [[eCryptfs]] の両方とは異なります。 F2FS のネイティブ暗号化サポートを使用するには、 [[fscrypt]] の記事を参照してください。次のファイルシステムを作成します
  +
  +
# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum,'''encrypt''' ''/dev/sdxY''
  +
  +
または、後で {{ic|fsck.f2fs -O encrypt /dev/sdxY}} を使用して暗号化機能を追加します。
  +
  +
== F2FS ファイルシステムのマウント ==
  +
  +
ファイルシステムは、手動または他のメカニズムを介してマウントできます。
  +
  +
# mount /dev/sdxY /mnt/foo
  +
  +
=== 推奨のマウントオプション ===
  +
  +
F2FS はフラッシュデバイスで使用することを想定しているため、圧縮を行うのがよいでしょう。{{ic|mkfs.f2fs}} の時点で有効にしておく必要があります。
  +
いくつかのマウントオプションを使用することで、少し改善することができます。
  +
  +
# mount -o compress_algorithm=zstd:6,compress_chksum,atgc,gc_merge,lazytime /dev/sd''xY'' /mnt/''mountpoint''
  +
  +
* {{ic|1=compress_algorithm=zstd:6}} はレベル6の圧縮に [[w:Zstandard|zstd]] を使用するよう指示します。これにより、かなり優れた圧縮率が得られます。
  +
* {{ic|compress_chksum}} (破損を防ぐため) 圧縮されたブロックをチェックサムで検証するように指示します。
  +
* {{ic|atgc,gc_merge}} より優れたガベージコレクターを有効にし、一部のフォアグラウンドガベージコレクションを非同期にできるようにします。
  +
:{{Note|[[F2FS#一部のオプションで再マウントが不可能|一部のオプションで再マウントが不可能]] を参照して下さい。}}
  +
* {{ic|lazytime}} アクセス時間や変更時間を同期的に更新しないようにします。IO性能とフラッシュの耐久性を向上します。
  +
  +
=== 廃棄する ===
  +
  +
デフォルトでは、 F2FS は [https://wiki.archlinux.org/index.php/Solid_state_drive#Continuous_TRIM continuous TRIM] として動作するハイブリッド TRIM モードを使用してマウントされます。この実装では、RW IO 間の長い廃棄遅延を軽減するために、非同期廃棄スレッドが作成されます。候補をメモリーに保持し、スレッドはそれらをアイドル時間 [https://sourceforge.net/p/linux-f2fs/mailman/message/36957687] に発行します。この結果、 [https://wiki.archlinux.org/index.php/Solid_state_drive#Periodic_TRIM periodic TRIM] を必要とするユーザは、暗黙的に {{ic|/etc/fstab}} に {{ic|nodiscard}} マウントオプションを設定するか、手動でマウントする場合は [[mount]] に渡す必要があります。
  +
  +
== チェックと修復 ==
  +
  +
F2FS ファイルシステムのチェックと修復は、{{pkg|f2fs-tools}} によって提供される {{ic|fsck.f2fs}} を使用して実行します。ファイルシステムをチェックするには、次のコマンドを実行します。
  +
# fsck.f2fs ''/dev/sdxY''
  +
  +
結果に応じて、不整合を修復するために使用できるスイッチについては、{{man|8|fsck.f2fs}} を参照してください。
  +
例えば:
  +
# fsck.f2fs -f ''/dev/sdxY''
  +
  +
== F2FS ファイルシステムの拡大 ==
  +
  +
ファイルシステムがアンマウントされている状態なら、パーティションを拡大してからファイルシステムをそれに合わせて拡大できます。[https://www.mail-archive.com/linux-f2fs-devel@lists.sourceforge.net/msg04247.html 縮小は現在サポートされていません]
  +
  +
まず [[パーティショニング#パーティショニングツール|パーティションツール]] を使ってパーティションのサイズを変更します: 例えば、{{ic|parted}} コンソールで {{ic|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
  +
  +
{{ic|f2fs}} パーティションを拡大して4番目のパーティションまでの全ての領域を使い切るには 、{{ic|resizepart 3 31GB}} を実行してから {{ic|exit}} します。それから以下のコマンドでファイルシステムを拡張して新しいパーティションを埋めます:
  +
  +
# resize.f2fs /dev/sdxY
  +
  +
{{ic|''/dev/sdxY''}} は拡大する F2FS ボリュームに置き換えてください。利用可能なオプションは {{man|8|resize.f2fs}} を参照。
  +
  +
{{Note|GPT を使っている場合、パーティションの GUID ({{ic|/dev/disk/by-partuuid/}} で確認可能) が変わってしまう可能性がありますが、ファイルシステムの UUID ({{ic|/dev/disk/by-uuid/}} で確認可能) は変わりません。}}
  +
  +
== トラブルシューティング ==
  +
  +
=== 一部のオプションで再マウントが不可能 ===
  +
  +
[[fsck#ブート時のチェック]] で触れているように、カーネルはデフォルトでファイルシステムを読み取り専用状態に保ち、{{ic|rw}} [[カーネルパラメータ]] を渡すために明示的に必要です。または、{{ic|systemd-remount-fs.service}} を使用して systemd にファイルシステムを読み書き可能として再マウントさせます。
  +
  +
ファイルシステムを読み取り専用状態から読み取り/書き込み状態に再マウントする場合、{{ic|mount -o remount,... /}} の手順は複数の理由で失敗する可能性があり、ルートファイルシステムを読み取り専用になり、以下のエラーメッセージを表示してシステムが起動できなくなります:
  +
  +
Failed to start Remount Root and Kernel File Systems.
  +
  +
{{ic|atgc}} オプションが fstab ファイルで指定されているが、カーネルパラメータとして渡されていない場合、F2FS カーネルモジュールは、追加またはクリアされた {{ic|atgc}} オプションによる再マウントを許可しません [https://github.com/systemd/systemd/issues/22982][https://github.com/systemd/systemd/issues/26763]、次のいずれか:
  +
  +
* [[カーネルパラメータ]] {{ic|1=rootflags=atgc}} をブートローダー設定に追加します。
  +
* [[カーネルパラメータ]] {{ic|rw}} をブートローダー設定に追加します。
  +
* fstab から {{ic|atgc}} マウントオプションを削除します。
  +
  +
{{Pkg|linux}} 6.2 以降、[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=967eaad1fed5f6335ea97a47d45214744dc57925 チェック] がファイルシステムが読み取り専用の場合、カーネルは {{ic|flush_merge}} を無効にしますが、チェックされるのは再マウント前のファイルシステムの状態です。{{Bug|77596}} で説明されているように、次のいずれか:
  +
  +
* [[カーネルパラメータ]] {{ic|rw}} をブート ローダー設定に追加します。
  +
* fstab から {{ic|flush_merge}} マウントオプションを削除します。

2023年11月29日 (水) 00:19時点における最新版

関連記事

F2FS (Flash-Friendly File System) はフラッシュ変換レイヤ (FTL) を備えた NAND ベースフラッシュメモリに最適化されたファイルシステムです。JFFS や UBIFS と異なり、書き込み分散を処理するのに FTL に依存しています。F2FS はカーネル 3.8 以上でサポートされています。

FTL は SCSI/SATA/PCIe/NVMe インターフェイスがある全てのフラッシュメモリに存在します [1]。スマートメディアカードやベアメタルな NAND フラッシュには存在しません [2]

警告: F2FS パーティションに含まれるデータは、実行中のマシンのカーネルのバージョンがパーティションの作成に使用されたカーネルのバージョンよりも 古い 場合、使用できなくなる可能性があります。例えば、 F2FS パーティションが linux で提供されるメインラインカーネル上に作成されているにもかかわらず、システムが linux-lts で提供される古いシリーズのカーネルにダウングレードする必要がある場合、この問題が出てきます。 FS#69363 を参照してください

既知の問題

fsck が失敗する

F2FS は fsck 実行に問題があり、突然の電源喪失の場合にデータ損失につながる可能性があります [3][4]

電力損失が頻繁に発生する場合は、別の ファイルシステム を検討してください。

fsck の長時間実行による起動の遅延

ブート間でカーネルバージョンが変更された場合、 fsck.f2fs ユーティリティは完全なファイルシステムチェックを実行しますが、完了するまでに時間がかかります [5]

これは、最近のコミット [6] のおかげで、将来的に軽減される可能性があります。

GRUB のサポート

GRUB はバージョン 2.0.4 から F2FS をサポートしていますが、extra_attr フラグを有効にして作成した F2FS パーティションからブートファイルを正しく読み込むことができません (詳細は GRUB#サポートのないファイルシステム を参照してください。)

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.

F2FS がサポートしていないファイルシステムの機能を systemd-tmpfiles が使おうとしているためです。

F2FS ファイルシステムの作成

この記事は、デバイスに パーティション がすでにセットアップされていることを前提としています。 f2fs-toolsインストールmkfs.f2fs を使用して、 /dev/sdxY と呼ばれるターゲットパーティションをフォーマットします。

# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum /dev/sdxY
ノート: 上記の例は、 f2fs.fsck が特定の種類のファイルシステムの破損を検出して修正するのに役立つ最小限の推奨オプションセットです。使用可能なすべてのオプションについては、mkfs.f2fs(8) を参照してください。

圧縮

ノート: インライン圧縮を行う他のファイルシステムとは異なり、f2fs 圧縮はデフォルトで追加のフリースペースを公開せず、代わりに圧縮が有効かどうかに関わらず同じ数のブロックを確保します。主な目的はフラッシュの寿命を延ばすために書き込みを減らすことであり、 潜在的には 性能が少し向上する ことである。カーネルドキュメントの Compression Implementation を参照してください。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 [フォルダ]

ファイルベースの暗号化サポート

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/mountpoint
  • compress_algorithm=zstd:6 はレベル6の圧縮に zstd を使用するよう指示します。これにより、かなり優れた圧縮率が得られます。
  • compress_chksum (破損を防ぐため) 圧縮されたブロックをチェックサムで検証するように指示します。
  • atgc,gc_merge より優れたガベージコレクターを有効にし、一部のフォアグラウンドガベージコレクションを非同期にできるようにします。
ノート: 一部のオプションで再マウントが不可能 を参照して下さい。
  • lazytime アクセス時間や変更時間を同期的に更新しないようにします。IO性能とフラッシュの耐久性を向上します。

廃棄する

デフォルトでは、 F2FS は continuous TRIM として動作するハイブリッド TRIM モードを使用してマウントされます。この実装では、RW IO 間の長い廃棄遅延を軽減するために、非同期廃棄スレッドが作成されます。候補をメモリーに保持し、スレッドはそれらをアイドル時間 [7] に発行します。この結果、 periodic TRIM を必要とするユーザは、暗黙的に /etc/fstabnodiscard マウントオプションを設定するか、手動でマウントする場合は mount に渡す必要があります。

チェックと修復

F2FS ファイルシステムのチェックと修復は、f2fs-tools によって提供される fsck.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 パーティションを拡大して4番目のパーティションまでの全ての領域を使い切るには 、resizepart 3 31GB を実行してから exit します。それから以下のコマンドでファイルシステムを拡張して新しいパーティションを埋めます:

# resize.f2fs /dev/sdxY

/dev/sdxY は拡大する F2FS ボリュームに置き換えてください。利用可能なオプションは resize.f2fs(8) を参照。

ノート: GPT を使っている場合、パーティションの GUID (/dev/disk/by-partuuid/ で確認可能) が変わってしまう可能性がありますが、ファイルシステムの UUID (/dev/disk/by-uuid/ で確認可能) は変わりません。

トラブルシューティング

一部のオプションで再マウントが不可能

fsck#ブート時のチェック で触れているように、カーネルはデフォルトでファイルシステムを読み取り専用状態に保ち、rw カーネルパラメータ を渡すために明示的に必要です。または、systemd-remount-fs.service を使用して systemd にファイルシステムを読み書き可能として再マウントさせます。

ファイルシステムを読み取り専用状態から読み取り/書き込み状態に再マウントする場合、mount -o remount,... / の手順は複数の理由で失敗する可能性があり、ルートファイルシステムを読み取り専用になり、以下のエラーメッセージを表示してシステムが起動できなくなります:

Failed to start Remount Root and Kernel File Systems.

atgc オプションが fstab ファイルで指定されているが、カーネルパラメータとして渡されていない場合、F2FS カーネルモジュールは、追加またはクリアされた atgc オプションによる再マウントを許可しません [8][9]、次のいずれか:

linux 6.2 以降、チェック がファイルシステムが読み取り専用の場合、カーネルは flush_merge を無効にしますが、チェックされるのは再マウント前のファイルシステムの状態です。FS#77596 で説明されているように、次のいずれか:

  • カーネルパラメータ rw をブート ローダー設定に追加します。
  • fstab から flush_merge マウントオプションを削除します。