私は現在Ubuntu Linuxを使用していますが、他のオペレーティングシステムでもこの現象が発見されました。明らかに、誰でもこのsync
コマンドを実行できます。ところで、なぜそうなのでしょうか?欠点は、不要なディスク書き込みによるシステム速度の低下です。
すべてのユーザーがこれを実行できるのはなぜですかsync
?
答え1
権限のないユーザーがシステムを遅くする方法はいくつかあります。同期を実行するのはより効率的な方法とは異なります。一方、ファイルシステムデータをディスクにコミットするのはかなり合法的な要求であるため、ユーザー(およびそのプロセス)がそれを行うことを禁止するのは過度です。
とにかく、私は「不要なディスクの書き込み」の声明に同意しません。これらの書き込みはもちろん必要であり、とにかく短い時間が経過すると自動的に発生します。
同期呼び出しが実装に応じて特定のタスクを実行するという保証もありません。通話同期、はい、POSIX規格で定義されているようには、オペレーティングシステムにファイルシステムキャッシュをフラッシュさせる「推奨事項」にすぎず、フラッシュがすぐに発生するように強制する必要はありません。より正確には、これらの呼び出しはオペレーティングシステムにキャッシュフラッシュをスケジュールするように要求しますが、Linux実装ではキャッシュフラッシュが返されるのを待っても、スケジュールされた時間より前にキャッシュフラッシュが発生するという保証はありません。
また、syncを何度も何度も呼び出してもシステムの速度が大幅に遅くなりません。キャッシュがフラッシュされ、ファイルに積極的に書き込むプロセスがない場合、キャッシュは空であるため、同期が機能しないためです。
ユーザーがシステムで同期を実行できないようにするには、次のコマンドを実行します。
mv /bin/sync /bin/.sync
ln /bin/true /bin/sync
これは、ユーザーがほとんど気付かず、同期を実行してからストレージデバイス(USBサムドライブなど)をアンマウントせずに削除しない限り、悪影響を与えません。しかし、これらのユーザーはとにかく非常に愚かな行動をしました。
以前の /bin/sync 対 /bin/true リンクはお勧めできません。sync
状況によっては動作します。たとえば、これが近づく深刻なシャットダウン(電源不足、システムパニックなど)が心配な場合は、ファイルシステムの内容を保存するのに役立ちます。これが私が正当な要求と呼ばれるものです。
答え2
sync
システムが損傷することはありません。速度が遅くなる可能性がありますが、ディスクにアクセスするプログラムを実行する以上のものではありません。なぜ制限するのですか?
すべてのユーザーがsync
。これは、システムがクラッシュしたり電源を切ったりしても、特定のタスクを順番に実行する必要がある場合に必要です。たとえば、電子メールを受信するメール転送エージェントを考えてみましょう。電子メールを含むファイルをスプールに書き込んだ後、送信sync
システムに応答して電子メールを受信したことを知らせる前に呼び出されます。呼び出されずにsync
受信通知を送信した後、ファイルをディスクにコミットする前に受信システムの電源がオフになると、電子メールが失われます。
オペレーティングシステムは、効率を高めるためにディスクの書き込みを遅らせます。彼らはアプリケーションが実際にいつ書くべきかを知る方法はありません。したがって、アプリケーションにはオペレーティングシステムに今書くように指示する方法があります。sync(1)
そしてsync(2)
そしてfsync(2)
。