Linux / コマンド / sync - バッファに残った書き込みデータの保存を要求

syncは、メモリに残っているファイルやファイルシステムの書き込みデータを記憶装置に反映するようカーネルに要求します。ファイルをコピーした直後、記憶装置を取り外す前に書き込み完了を待つときに使用できます。

Linuxは性能向上のため、書き込みを一時的なバッファに保持することがあります。syncはカーネルの機能を呼び出し、永続ストレージへの反映を要求します。引数なしならシステム全体、GNU実装でファイルを指定した場合はそのファイルのデータとメタデータが対象です。アプリ内の未保存の編集内容まで保存する操作ではないため、先にアプリ側で保存します。Linuxのsync・syncfsの説明では、Linuxは入出力の完了を待つとされています。

基本的な文法

sync [オプション] [ファイル ...]

インストールされている実装とオプションは、配布版によって異なる場合があります。man syncで現在のシステムの説明を確認してください。

使用例

保留中の書き込み同期

現在のシステムの書き込みデータを記憶装置に反映するよう要求します。

sync

特定のファイル同期

既に保存したreport.txtという1つのファイルを指定する例です。実在する対象パスに置き換えてください。成功時は通常無出力ですが、存在しないファイルやアクセスできないファイルではエラーになるため、終了状態も確認します。

sync report.txt

ファイルが属するファイルシステム同期

ファイルパスが属するファイルシステムの保留中の書き込みを対象とします。

sync -f /mnt/data/report.txt

出力がない場合の意味

syncはカーネルに保留中のファイルシステム書き込みをストレージに送るよう要求します。成功すると、通常画面には何も表示されません。

sync
echo $?

例の出力:

0

0は直前のsyncコマンドが正常に終了したシェル終了状態です。これだけではデバイスハードウェア上のすべてのキャッシュが永続的に保存されたり、バックアップが完全であることは保証されません。外付けディスクを取り外すときは書き込み作業を終え、umountで正常にマウントを解除してから取り外してください。

主なオプションと形式

オプション・形式 説明
引数 なし システム全体の保留中の書き込みを同期します。
ファイル GNU実装では指定したファイルを同期します。
-d ファイルのデータと整合性に必要なメタデータを同期します。
-f 指定したファイルが属するファイルシステムを同期します。

使用する際の注意点

syncが成功しても、外部ストレージデバイスをすぐに抜くよりも、umountでファイルシステムを正常にアンマウントしてください。ハードウェアキャッシュやデバイスエラーを含めた絶対的なデータ保証と解釈してはいけません。sync -fでは、ブロックデバイスノードの代わりに、該当ファイルシステム内のファイルパスを指定することが意図されています。

よくある質問

USBドライブを抜く前にsyncだけでいいですか?

いいえ。syncは書き込みの同期を要求しますが、マウントを解除するわけではありません。作業が終わったら正常にumountしてください。

公式ドキュメント

オプションの正確な動作や実装ごとの違いは、syncに関する公式ドキュメントで確認できます。