よく、非常に重要なディスク変更を伴う作業などで
$ sync $ sync $ sync
ってやれみたいな話を聞きますが、これって
$ sync # 一息入れる
っていうのと何か違ったりするのかなみたいな疑問を未だに持っています。
sync の意味
そもそも sync(8) は、ディスクへの確実な書き込みを実行するためのコマンドです。
例えば write(2) は、一般にディスク書き込みは伴わず、あくまでカーネル内のバッファ変更のみが実施された状態で制御を戻します。従って、ここでシステムが異常終了した場合、あるいはディスク故障が発生した場合は、ユーザアプリとして書き込んだはずのデータが失われることになります。
sync(8)は、このカーネルのバッファ変更(dirty buffer)のみがなされた状態から、強制的にディスクに書き出すように促すためのコマンドです*1 *2。別に 3 回 sync を発行しなくとも、ちょっと待ってやれば良いんじゃないのかな。あるいは「待つ」ということを忘れてしまうヒューマンエラーを防ぐために、3 回 sync しろって教えているんでしょうか。
まぁ脚注に書いたような事情もあるので、Linux については 1 回で良いと思います。