ext4およびxfsで実際にジャーナル処理されるファイルシステムメタデータ操作は何ですか?


9

どのファイルシステムメタデータ操作が実際にext4およびxfsファイルシステムジャーナルに永続化されるかについて、単純でストレートな答えを見つけることができません。私はことに注意してくださいません POSIXが「アトミック」であることを宣言して何を問い合わせます。ジャーナルを有効にして実行することにより、アトミックファイルシステム操作のどのサブセットが逆方向に曲がることなく常に実行できるため、どのようなサブセットが効果的に耐久性があるかについて、さらに心配しますfsync(2)

私はかなり確かな数の操作:

  • creat(2)
  • link(2)
  • unlink(2)
  • rename(2)
  • mkdir(2)
  • rmdir(2)

私は完全にはわかりません:

  • symlink(2)

シンボリックリンクのコンテンツを格納するsymlink(2)簡単な方法fsync(2)fdatasync(2)基になるデータブロックがないため、このケースが最も厄介です 。ジャーナルが私のためにこれを処理することを知ることは、安心です。

回答:


1

パフォーマンス上の理由から、デフォルトでは、ext4はジャーナルを介してファイルシステムメタデータのみを書き込みます。

ファイルシステムを調整していない限り、XFSはすべてのメタデータトランザクションもジャーナル処理すると思います。


ええ、でも具体的には「メタデータ」とは何ですか?ディレクトリのブロック:確かに。iノード自体:はい。iノード自体に収まるほどターゲットが小さいシンボリックリンク:おそらく?ターゲットが補助ブロックに波及するシンボリックリンク:??????

リンクが役立つ
asdmin

1

常に逆方向に曲がったり、fsync(2)したりする必要がなく、ジャーナルを有効にして実行することにより、アトミックファイルシステム操作のどのサブセットが効果的に永続的であるかについて、私はもっと心配しています。

無し。クラッシュ後も変更が確実に保持されるようにするには、ピリオドをfsyncする必要があります。ジャーナリングは、クラッシュが発生した場合に、リストされた操作が半分だけ完了することを保証するだけです。


ファイルとディレクトリをfsyncして、ブロックが回転する錆びにぶつかったかどうかを確実に知る必要があることを知っているが、こぼれた場合にシンボリックリンクをサポートするブロックをfsyncできる方法を見つけることができないiノード。その時点で私の唯一の手段は、ジャーナルに依存するか、重要なことのために二度とシンボリックリンクを使用しないことです。
rboyer

@ naelyn、fsync()は、高速でないシンボリックリンクを含む、ファイルに関連するすべてのブロックをフラッシュします。
psusi 2014年

1
高速でないシンボリックリンクのブロックをフラッシュするfsyncで使用する適切なファイル記述子を開くにはどうすればよいですか?
rboyer

@naelyn、そうそう...いい点... linux-fsdevelメーリングリストでそのことについて質問する必要があるかもしれない...ハードリンクを含む私はあなたがそれを含むディレクトリを開いて同期すると思います、おそらくシンボリックリンクは同じように機能しますか?
psusi 2014年

0

ext4ジャーナルはブロック番号で動作し、動作ではないことに気づいていますか?「メタデータ」は、問題のブロックを変更するために使用した操作に関係なく、特定のiノードの実際のデータブロック以外のものになります。


0

xfstestsが表示され、それに含まれるすべてのシンボリックリンクを持続するディレクトリに()というのfsyncを特徴とします。

私はこれを確認していません。何かを見逃している可能性があります。

xfstestsは、Linuxファイルシステムの多くの開発者によって使用されています。このテストは「汎用」ディレクトリにあります。これは、すべての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).
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.