質問: 同期すべき哲学に真実はありますか。同期;同期;同期しますか? 2000年にシスコに勤務してlinuxを初めて紹介されたとき、ファイルシステムの破損やデータの損失を防ぐためにバッファをディスクにフラッシュするために使用されるsyncコマンドのメリットを教えられました。同僚だけでなく、大学の友人からも、syncを「一度」ではなく、「数回」または「数回」、つまり5〜10回実行するように言われました。それ以来、この習慣を続けてきましたが、何かメリットはありますか?これを聞いた人はいますか?そして最も重要なこととして、誰かがsyncを効果的に実行するために2回以上実行する必要があるという考えに対して/に対して良い根拠/経験的証拠を提供できますか?
回答: 「sync; sync; sync」のように1つのコマンドラインですべてを同期するのではなく、複数回同期するほうが安全な古いunixシステムは確かにありました。 80年代半ば、これは次のように蒸留されました。 システムをシャットダウンすると、3回同期する必要があります。それ以上でもそれ以下でもありません。同期数は3つ、同期数は3つとする。 4回目の同期は行わないでください。2回目の同期は行わないでください。ただし、3回目の同期に進む場合を除きます。 3回はどこから来たのか本当にわからないけど、たぶん楽しかった。しかし、路上での言葉はそれを2回行う。 「同期;同期」ではなく、シェルの2つの別々の行として。たとえば、v7 unixの時代には、ファイルシステムの修復はそれほど楽しくありませんでした。ファイルシステムがどのように機能するか、およびdcheck、ncheck、icheckなどのプログラムの特異性について多くのことを理解して、手動で行う必要がありました。 fsckがあったとしても、信頼できるものとは限りませんでした。これは「雪の上り坂を双方向に歩いた」という話のように聞こえ始めています。まあ、リブートやシャットダウンのような特別なコマンドはありませんでした。システムを再起動したいときは、ファイルシステムを同期で同期し、コンソールでctrl-pを押して停止しました。syncコマンドが終了したとき、カーネルは同期をスケジュールしていましたが、すべてのバッファー(すべての重要なファイルシステムスーパーブロックを含む)が必ずしもディスクに到達したわけではありませんでした。したがって、同期を実行し、安全になる前に停止するのは非常に簡単でした。もう一度同期を実行するのは簡単で、時間がかかり、すべてを理解したり、「count to 10」などのあいまいな指示を処理したりする必要がなく、直感的な魅力がありました。v7のmanページにupdateのbugセクションもありました: 更新が実行されている場合、同期が実行された直後にcpuが停止すると、ファイルシステムが損傷する可能性があります。これは、npr要求が失敗したときにゼロを書き込むdecハードウェアが原因の一部です。修正は、sync(1)が一時的にシステム時間を少なくとも30秒増やして、更新の実行をトリガーすることです。これにより、30秒の猶予が与えられ、cpuが停止します。 (ちなみに、これはv7マニュアルの第1巻の最後の部分でした)時間の経過とともに、システムのシャットダウンと再起動のためのファイルシステムツールとプログラムは、これに対処することを回避するために改善されました。システムが不思議なふるまいをするとき、民俗学、ブードゥー教、そしてシステム魔法がそれに入ります。 2回同期すると、ファイルシステムを元に戻すためにビットピンセットを外す必要がほとんどなくなるため、儀式の一部になりました。何度もやったら、何も考えずにやります。その後、誰かがそれに気づき、その理由を尋ねます。そして、答えは「常にそのようにしてください。それはより安全です」のようなものです。私はこれが信頼できると主張するつもりはありません、そして私はいくつかの詳細について間違っているかもしれません。しかし、それは起源にかなり近いと思います。