ソフトアップデートは、クラッシュや停電発生時にファイルシステムのメタデータの整合性を維持するためのアプローチです。ソフトアップデートは、ファイルシステムのメタデータの更新間の依存関係を追跡し、適用することで機能します。ソフトアップデートは、より一般的に使用されているファイルシステムのジャーナリングアプローチの代替手段です。
ソフトアップデートでは、ディスク上のファイルシステムの不整合を生じさせない、または発生する不整合がストレージスペースのリーク(どのファイルにも使用されていないにもかかわらず、割り当て済みとしてマークされる領域)のみとなるような、非同期メタデータ書き込みのみが許可されます。ソフトアップデートでは、フラッシュされていない、または部分的にロールバックされた可能性のある別のブロックに依存するメタデータブロックの一部を、書き込み時に一時的に「ロールバック」することで、順序付けされた同期メタデータ書き込みを回避します。
実際には、ブロックはいつでもフラッシュされる可能性があり、ソフトアップデートコードは常にディスクに一貫性のあるメタデータを提供します(どのブロックが物理的にフラッシュされたかがわかっている限り)。その後のリカバリは、ファイルシステムが次にマウントされた際に、孤立した割り当て領域をガベージコレクションするためにファイルシステムのバックグラウンドウォークを実行するだけで済みます。これにより、ファイルシステムはすべてのメタデータブロックまたはすべてのレコードをフラッシュすることなく、特定のファイルを選択的にフラッシュできます。
ディスクへの書き込み開始前にメタデータ依存関係グラフからリンクが解除されたデータは、ディスクに書き込む必要がありません。例えば、ファイルを作成し、短期間使用した後削除した場合、ディスクアクティビティが全く発生しない可能性があります。
ソフト アップデートでは、メタデータを不揮発性ストレージに定期的にフラッシュする必要があります。
FreeBSDはUFSファイルシステムのソフトアップデートをサポートしており[ 1 ]、長年にわたりインストール時にデフォルトで有効になっています。ソフトアップデートは、ファイルシステム作成時にnewfsコマンドのオプションを使って手動で有効または無効にすることができます。[ 2 ] その後は、コマンドのオプションを使っていつでも有効または無効にすることができますtunefs。[ 3 ]fsck FreeBSD 9.0では、クラッシュ後のガベージコレクションの バックグラウンド処理を省くため、ソフトアップデートにジャーナリング機能が追加されました。 [ 4 ] [ 5 ]
OpenBSDはリリース7.4(2023年)までFFSファイルシステムのソフトアップデートをサポートしていましたが、その後無効になりました。[ 6 ]
NetBSDは6.0リリース(2012年)までソフトアップデートをサポートしていましたが、その時点でWAPBLジャーナリングに置き換えられ、ソフトアップデートは廃止されました。[ 7 ]
ジャーナリングもソフト アップデートもデータが失われないことを保証するものではありませんが、ファイル システムの一貫性が維持されることは保証します。
ソフト アップデートを備えたファイル システムの利点は、ログの再生が行われないため、クラッシュ後すぐにマウントできることです。