どのファイルシステムメタデータ操作が実際にext4およびxfsファイルシステムジャーナルに永続化されているかについての簡単で直接的な答えを見つけることができません。私はnot POSIXが「アトミック」であると宣言しているものについて問い合わせていることに注意してください。アトミックファイルシステム操作のサブセットが、後方に曲がることなくジャーナルを有効にして実行することにより、効果的に耐久性があるかどうかについてもっと心配していますfsync(2)
常に。
操作私はかなり確実に数えます:
creat(2)
link(2)
unlink(2)
rename(2)
mkdir(2)
rmdir(2)
私が完全に確信していない操作:
symlink(2)
symlink(2)
の場合が最も厄介です。これは、シンボリックリンクのコンテンツを格納する基になるデータブロックをfsync(2)
またはfdatasync(2)
する簡単な方法がないように思われるためです。ジャーナルが私のためにこれを処理することを知っていることは安心です。
パフォーマンス上の理由から、ext4はデフォルトでジャーナルを介してファイルシステムメタデータのみを書き込みます。
ファイルシステムを微調整していない限り、XFSはすべてのメタデータトランザクションもジャーナルに記録すると思います。
私は、ジャーナルを有効にして実行することにより、アトミックファイルシステム操作のどのサブセットが効果的に耐久性があるかについて、常に後戻りしてfsync(2)を曲げる必要がないことを懸念しています。
無し。クラッシュ後も変更が持続することを確認したい場合は、fsync、periodを実行する必要があります。ジャーナリングは、クラッシュが発生した場合に、リストした操作がいずれも実行されないことを保証するだけですhalf。
xfstestsappearsは、ディレクトリ上のfsync()がそれに含まれるすべてのシンボリックリンクを保持する必要があることを主張します。
私はこれを確認していません。何かを逃した可能性があります。
xfstestsは、Linuxファイルシステムの多くの開発者によって使用されています。このテストは「generic」ディレクトリにあります。これは、すべてのLinuxファイルシステムに適用する必要があることを意味します。 (または、少なくとも、すべてのブロックデバイスファイルシステム。テストは、特別な仮想ブロックデバイスを使用して機能します)。
https://github.com/kdave/xfstests/blob/master/tests/generic/348
# Test creating a symlink, fsync its parent directory, power fail and mount
# again the filesystem. After these steps the symlink should exist and its
# content must match what we specified when we created it (must not be empty
# or point to something else).
ext4ジャーナル はブロック番号で動作し、動作ではないことをご存知ですか? 「メタデータ」は、問題のブロックを変更するために使用した操作に関係なく、特定のiノードの実際のデータブロック以外のものになります。