最近、ext4ファイルシステムの適切な使用法をテストしています。私の専門家は何ですか:ext4とfallocateの使い方
システムがクラッシュしたとき、データは書戻しOKでしたが、損失はできませんでしたが、メタデートできます。
私の使用法は次のとおりです。 fallocate(fd、0、0、4 * 1024 * 1024); // 4MB
2. fsync(fd)を呼び出すと、データとメタデータをディスクに書き込むことができます。
3.関数を呼び出して4kサイズのファイルをランダムに書き出します。 O_DRICTフラグ付きで、fsyncは呼び出さない。私は返信をOKでログに記録します。
4.ログに記録されたオフセットを確認します。しかし、私はいくつかのオフセットでは、4kのデータを読み取る、0です。オフセットは、ホールファイルのように使用されていないようです。
私の質問は、ということです。
< 1.なぜfallocateを呼び出して、ファイルのメタデータにfsyncはまだ は、いくつかのブロックを示しているようだ後に使用するので、それはnullを返し読んだときにされていません。それは私の理解です。
< 2.他のAPIを呼び出して、ファイルが空でないスペースを割り当てることができます。その後、O_DIRECTを使用してデータを書き込むと、システムがクラッシュしてもデータが失われないことを確認できます。
Thanks.