ファイルの長さがランダムに0バイトになるという既知のext4問題はありますか?

ファイルの長さがランダムに0バイトになるという既知のext4問題はありますか?

私たちの会社では、Linux 3.4を実行するAndroidデバイスを作成していますが、時には(まれですが)ext4 emmcファイルシステムのファイル長が突然ゼロになることがわかりました。通常、ファイルに書き込むときに不適切なシャットダウンが発生したと思われますが、この場合、ファイルは最初の起動時に一度書き込まれ、再び書き込まれないことがわかります。

この問題を引き起こす可能性があるext4コードのバグを知っている人はいますか? ext4はまだ活発に開発されているようです。おそらく、一部のシステム管理者がこの問題に遭遇し、それを解決するパッチまたはカーネルバージョンを知っていますか?

ベストアンサー1

ファイルに書き込む場合、ファイルを開いて書き込むのに時間がかかることがあります。

いつファイル開いているオプションを使用すると、O_CREAT|O_WRONLY|O_TRUNCopenを呼び出すとすぐにゼロバイトのファイルが取得されます。この時間と書き込みフラッシュの間で電源が切れると、0バイトのファイルが得られます。これはファイルシステムとは関係ありません。効果的なオープンと書き込みは単一の原子操作ではないため、結果が悪い可能性があります。

緩和方法は、一時ファイル(同じファイルシステム)でオープン/書き込み操作を実行し、名前を変更するこれは原子性が保証されます。これにより、未定義の状態で終了しません。

MMCフラッシュのパフォーマンスが低下し、ハードウェアレベルの書き込みが正しく完了しない可能性もありますが、その可能性は低く、ケースバイステップのツールが必要です。

通常、2つのプロセスまたはスレッドが同時に同じファイルに書き込むことは非常にまれです。 「同じファイルに同時に書き込まないでください。そうする必要がある理由は思い出せず、これを防ぐためのいくつかの方法を考えることができます。

私はAndroidについての詳細を知らず、libcs​​が異なると私が説明したものとは異なる結果が出ると疑います。

おすすめ記事