「F2FS」の版間の差分
(→既知の問題: GRUB のサポートを翻訳して追加) |
(トラブルシューティングを翻訳して追加) |
||
79行目: | 79行目: | ||
* {{ic|lazytime}} のように。アクセス時間や変更時間を同期的に更新しないようにします。IO性能とフラッシュの耐久性を向上させます。 |
* {{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 は [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]] に渡す必要があります。 |
||
90行目: | 90行目: | ||
== F2FS ファイルシステムの拡大 == |
== F2FS ファイルシステムの拡大 == |
||
− | ファイルシステムがアンマウントされている状態なら、パーティションを拡大してからファイルシステムをそれに合わせて拡大できます。[https://www.mail-archive.com/linux-f2fs-devel@lists.sourceforge.net/msg04247.html 縮小は現在サポートされていません] |
+ | ファイルシステムがアンマウントされている状態なら、パーティションを拡大してからファイルシステムをそれに合わせて拡大できます。[https://www.mail-archive.com/linux-f2fs-devel@lists.sourceforge.net/msg04247.html 縮小は現在サポートされていません] |
− | まず[[パーティショニング#パーティショニングツール|パーティションツール]]を使ってパーティションのサイズを変更します: 例えば、{{ic|parted}} コンソールで {{ic|print}} コマンドを実行したときのディスクの出力内容が以下のようになっている場合: |
+ | まず [[パーティショニング#パーティショニングツール|パーティションツール]] を使ってパーティションのサイズを変更します: 例えば、{{ic|parted}} コンソールで {{ic|print}} コマンドを実行したときのディスクの出力内容が以下のようになっている場合: |
Number Start End Size File system Name Flag |
Number Start End Size File system Name Flag |
||
107行目: | 107行目: | ||
{{Note|GPT を使っている場合、パーティションの GUID ({{ic|/dev/disk/by-partuuid/}} で確認可能) が変わってしまう可能性がありますが、ファイルシステムの UUID ({{ic|/dev/disk/by-uuid/}} で確認可能) は変わりません。}} |
{{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年4月5日 (水) 20:17時点における版
関連記事
F2FS (Flash-Friendly File System) はフラッシュ変換レイヤ (FTL) を備えた NAND ベースフラッシュメモリに最適化されたファイルシステムです。JFFS や UBIFS と異なり、書き込み分散を処理するのに FTL に依存しています。F2FS はカーネル 3.8 以上でサポートされています。
FTL は SCSI/SATA/PCIe/NVMe インターフェイスがある全てのフラッシュメモリに存在します [1]。スマートメディアカードやベアメタルな NAND フラッシュには存在しません [2]。
目次
既知の問題
fsck が失敗する
F2FS は fsck 実行に問題があり、突然の電源喪失の場合にデータ損失につながる可能性があります [3][4]
電力損失が頻繁に発生する場合は、別の ファイルシステム を検討してください。
fsck の長時間実行による起動の遅延
ブート間でカーネルバージョンが変更された場合、 fsck.f2fs ユーティリティは完全なファイルシステムチェックを実行しますが、完了するまでに時間がかかります [5]
これは、最近のコミット [6] のおかげで、将来的に軽減される可能性があります。
GRUB のサポート
GRUB はバージョン 2.0.4 から F2FS をサポートしていますが、extra_attr
フラグを有効にして作成した F2FS パーティションからブートファイルを正しく読み込むことができません (詳細は GRUB#サポートのないファイルシステム を参照してください。)
F2FS ファイルシステムの作成
この記事は、デバイスに パーティション がすでにセットアップされていることを前提としています。 f2fs-tools を インストール し mkfs.f2fs
を使用して、 /dev/sdxY
と呼ばれるターゲットパーティションをフォーマットします。
# mkfs.f2fs -l mylabel -O extra_attr,inode_checksum,sb_checksum /dev/sdxY
圧縮
圧縮を使用するには、 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,whint_mode=fs-based,atgc,gc_merge,lazytime /dev/sdxY /mnt/foo
compress_algorithm=zstd:6
はレベル6の圧縮に zstd を使用するよう指示します。compress_chksum
は圧縮されたブロックをチェックサムで検証するように指示します。(破損を防ぐため)whint_mode=fs-based
[7] ファイルの 'hotness' つまりこのデータの読み書きの頻度に応じて fs-log の管理を最適化しようとします。atgc,gc_merge
です。より良いガベージコレクタを有効にし、いくつかのフォアグラウンドガベージコレクションを非同期にすることを可能にする。lazytime
のように。アクセス時間や変更時間を同期的に更新しないようにします。IO性能とフラッシュの耐久性を向上させます。
廃棄する
デフォルトでは、 F2FS は continuous TRIM として動作するハイブリッド TRIM モードを使用してマウントされます。この実装では、RW IO 間の長い廃棄遅延を軽減するために、非同期廃棄スレッドが作成されます。候補をメモリーに保持し、スレッドはそれらをアイドル時間 [8] に発行します。この結果、 periodic TRIM を必要とするユーザは、暗黙的に /etc/fstab
に nodiscard
マウントオプションを設定するか、手動でマウントする場合は mount に渡す必要があります。
チェックと修復
f2fs ファイルシステムのチェックと修復は、 f2fs-tools で提供されている fsck.f2fs
を使って行います。使用可能なスイッチについては、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) を参照。
トラブルシューティング
一部のオプションで再マウントが不可能
fsck#ブート時のチェック で触れているように、カーネルはデフォルトでファイルシステムを読み取り専用状態に保ち、rw
カーネルパラメータ を渡すために明示的に必要です。または、systemd-remount-fs.service
を使用して systemd にファイルシステムを読み書き可能として再マウントさせます。
ファイルシステムを読み取り専用状態から読み取り/書き込み状態に再マウントする場合、mount -o remount,... /
の手順は複数の理由で失敗する可能性があり、ルートファイルシステムを読み取り専用になり、以下のエラーメッセージを表示してシステムが起動できなくなります:
Failed to start Remount Root and Kernel File Systems.
atgc
オプションが fstab ファイルで指定されているが、カーネルパラメータとして渡されていない場合、F2FS カーネルモジュールは、追加またはクリアされた atgc
オプションによる再マウントを許可しません [9][10]、次のいずれか:
- カーネルパラメータ
rootflags=atgc
をブートローダー設定に追加します。 - カーネルパラメータ
rw
をブートローダー設定に追加します。 - fstab から
atgc
マウントオプションを削除します。
linux 6.2 以降、チェック がファイルシステムが読み取り専用の場合、カーネルは flush_merge
を無効にしますが、チェックされるのは再マウント前のファイルシステムの状態です。FS#77596 で説明されているように、次のいずれか:
- カーネルパラメータ
rw
をブート ローダー設定に追加します。 - fstab から
flush_merge
マウントオプションを削除します。