私はユーザーとして、およびなどのコマンドを使用してcp
ファイルmv
システムとmkdir
対話するのに時間を費やしているとしますrm
。fsync
通常動作中は、これらのコマンドは呼び出されません。
fsyncなしでファイルシステムを無期限に実行できますか?これは私のデータが危険にさらされますか?最後のfsyncからどのくらいの時間が経過したかを確認する必要がありますか?
答え1
短い答えは次のとおりです。はい、はい、そしていいえです。
はい、ファイルシステムはアプリケーション呼び出しなしで無期限に実行できますfsync
。ファイルシステムは、データが(最終的に)ディスクに保存されることを確認するためにファイルシステムに依存せず、他のメカニズムがある。呼び出しがないと、fsync
データがやや危険になる可能性があります。たとえば、ファイルをコピーして元のファイルを削除してもシステムの電源が切れると、削除によってそのファイルがディスクに保存される可能性が高くなりますが、コピーは不完全になります。
通常、オペレーティングシステムがディスクにデータを保存しようとする速度を制御するために変更できるいくつかの構成設定がありsync
、これにより未解決のデータが記録されます。 (すべての場合、オペレーティングシステムはデータがディスクコントローラに到達することを確認するだけで、ディスクにバッファフラッシュを要求できます。データが実際にディスクに保存されるという絶対的な保証はありません。)
Linux で調整できる設定は該当するドキュメントにあり/proc/sys/vm
ます。admin-guide/sysctl/vm.rst
- 探すdirty_
。さまざまな設定により、オペレーティングシステムがディスクへのデータ書き込みを開始する前に書き込むデータの量または待ち時間を指定できます。ここに介入できる2つのメカニズムがあります。バックグラウンドスレッドが保留中のデータをディスクに書き込むようにし(dirty_background_...
)、プロセスがあまりにも多くのデータを生成し始めると、オペレーティングシステムは書き込み内容をディスクにフラッシュします(効果的に同じ機能を導入fsync
)。 2つのメカニズムがあるのは、オペレーティングシステムがI / Oパフォーマンスと処理パフォーマンスのバランスを維持したいからです。実行中のプロセスがあまりにも速くデータを書き込めない限り、バックグラウンドスレッドは起動したらそれを処理します。書き込みディスクが追いつかないほど多くのデータが入ると速度が遅くなり、システムが記録中の保留中のデータに追いつくのに役立ち、あまりにも多くのデータを書き込むのを防ぎます。
データが心配な場合は、呼び出されたことをfsync
確認せずに実行してくださいsync
。
(それは無視してください/proc/sys/vm/dirtytime_expire_seconds
。それはまったく違う話です。)