2016-10-31 18 views
1

ファイルに対してfsync()を呼び出すと、ファイルが破損する可能性がありますか?例えばデータブロック間でfsync()のアトミック性

、私のファイルは、ディスクブロックに広がる言う:

A    B 
|---------| |--------| 
| Hello, | -> | World! | 
|---------| |--------| 
| 1234567 | | 89abcd | 
|---------| |--------| 

は、私は(非常に非効率的な方法で)を小文字にファイル全体の内容を変更したいと言います。だから、ファイルの1位に "H"を "h"に変更し、8位に "W"を "w"に変更しようとします。私はファイルにfsync()を呼び出します。このファイルは2つのディスクブロックに分散されています。

  1. 書き込みの順序は維持されていますか?
  2. 両方の書き込みがディスクに書き込まれるまでfsyncコールは任意の関連するメタデータとともに、戻りません、ディスク全体でアトミックにfsync()操作*

答えて

0

です。あなたのコンピュータがクラッシュした場合(通常は電源を切る)、ファイルが破損している場合は、ファイルシステムの管理者にバグレポートを記録してください。 fsyncが返された場合、データはディスク上に安全に保存されます。

ファイルシステムとディスクドライバが書き込みを並べ替えることができない理由はありません(重複していないと見なします。回転する媒体上にある)。第二に、fsyncは実際のハードウェアを扱うため、アトミックにする方法がありません。 は、ユーザーには原子的にも必要です(ファイルの最初のコピーを持つか、2番目のファイルは破損していません)。

関連する問題