[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

14.4 sync: キャッシュされた書き込みを永続的な記憶装置に同期する

sync は、メモリ中のファイルやファイルシステムを永続的な記憶装置に同期する。

書式:

 
sync [option] [file]…

sync は、メモリ中にバッファされているデータがあれば、それをディスクに書き出す。 そうした書き出しには、スーパーブロックの変更、inode の変更、遅延読み書きを含むことができる (が、それだけに止まらない)。 この機能はカーネルによって実装されていなければならない。sync プログラムは、システムコールの sync, syncfs, fsync, fdatasync を実行する以外、何もしないのである。

カーネルは、(比較的遅い) ディスクの読み書きをできるだけしないで済ますために、 メモリにデータを保持している。このことによって、動作速度が向上するが、 コンピュータがクラッシュした場合、データが失われたり、 ファイルシステムが壊れたりという結果が生じかねない。sync コマンドは、 カーネルに命じて、メモリ上にあるデータを永続的な記憶装置に書き出させるのである。

引数を指定すると、デフォルトでは指定されたファイルのみが fsync(2) システムコールを使って同期されることになる。

1 個以上のファイルを指定した場合は、以下のオプションを使って同期方法を変更することができる。 使用できるオプションについては、次の章も参照していただきたい。 共通オプション.

-d
--data

fdatasync(2) を使用して、ファイルのデータと、ファイルシステムの整合性を維持するのに必要なメタデータのみを同期する。

-f
--file-system

指定したファイルが存在するファイルシステムに対して I/O 待ちになっているすべてのデータを syncfs(2) システムコールを使用して、同期する。 注意していただきたいが、たとえば ‘/dev/sda’ といったデバイスノードを引数として渡すときは、 このオプションを普通は指定しないはずである。 そんなことをすると、‘/dev/sda’ で参照されるファイルシステムではなく、 デバイスノードが存在するファイルシステムの同期が行われてしまうからだ。 また、システムによっては、個々のデバイスノードやファイルを引数として渡すのと、全く引数を使用しないのとでは、 同期のあり方が違うかもしれないことにも気をつけていただきたい。 すなわち、fsync(2) に渡される引数がある場合は、書き込みバリア (write barrier) が使われることによって、引数を指定しなかったときに使用されるグローバルな sync(2) よりも、 より確実な保証をもたらすかもしれないのである。

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。


This document was generated on June 7, 2022 using texi2html 1.82.