sync と 取り外しポリシー
sync (POSIX)
UNIX には,sync と呼ばれる標準ユーティリティが存在しています.Ubuntu 24.04 (Linux man-pages 6.7 / 2023/10/31) では,sync(2) について次のように端的に説明しています.
sync, syncfs - commit filesystem caches to disk
データは,見かけ上はディスクに書き込まれていても,実際には完全に書き込まれていない(キャッシュされている)場合があります.これは,ディスクI/O転送の回数を減らすため(ディスクの寿命を不必要に損耗させないため)の仕組みです.しかし,タイミングが悪いと,データが未だ書き込まれていない状態でユーザがディスクを取り外すことになります.そのため,sync を利用して,キャッシュを強制的に書き込むように指示したうえで,取り外すことが推奨されています.
以下のような使い方をします(引用元).
$ dd if=CentOS-Userland-9-stream-aarch64-RaspberryPI-Minimal-4-sda.raw of=/dev/da1 bs=1M conv=sync
$ sync
$ sync
$ sync
余談ですが,sync は「指示を出す」コマンドであるために,一般的な仕様では,sync 自身が正常終了したあとでもキャッシュのコミットが終了していない場合があります.
According to the standard specification (e.g., POSIX.1-2001), sync() schedules the writes, but may return before the actual writing is done. (man page より)
そのため,以下の流派があるようです.
$ sync # sync を3回実行する流派
$ sync
$ sync
$ sync
$
$ # 何もせず数秒待つ流派
ただし,現在の Linux は、sync(2) がディスク書き出しが実施されるまで制御を返さないことを保証しています.
However Linux waits for I/O completions, and thus sync() or syncfs() provide the same guarantees as fsync() called on every file in the system or filesystem respectively. (man page より)
Linux においては,一度待つだけで良いかもしれません.
また,macOS あるいは Linux などでデスクトップ環境を利用している皆さんは,OSないしファイラーで GUI でも,適切に取り外し操作をすることができます.適宜,こちらを利用しましょう.
安全な取り外しポリシー (Windows)
sync
が存在することからわかることは,いきなり USB メモリを抜かないほうが良いということです.
そんなことはすでにみなさんもわかっているはずです.多くの人が触れたことのあるはずの Windows でも,わたしたちは律儀に「ハードウェアの安全な取り外し」という操作をしました.Windows XP なんかは,忘れると吹き出しを出してお怒りになりましたね.これは,sync が存在する理由と同じように,Windows も書き込むものに対してキャッシュしていたからです(もちろん,キャッシュだけでなく,今まさにデバイスに書き込みが行われていないかチェックする役割も担っています).
しかし,Windows 10 1809 以降は,デバイスをいきなり取り外すことが許されるようになりました(公式サポートページ).
というのも,このバージョンからは,既定で「データを書き込む前にキャッシュせず,直接書き込む」ように挙動が変更されたからです.
実運用では,低速なデバイスでは,以前のように よしなに してくれたほうが良い,と考える人もいるでしょう.以前の仕組みに戻すには,「ディスクの管理」からデバイスのラベルを右クリックし,「プロパティ」の「ポリシー」タブを選択し、「高パフォーマンス」のラジオボタンを選択します.この設定はデバイス単位で保存されます.
当然ですが,「高パフォーマンス」を選択したときは,以前のように「ハードウェアの安全な取り外し」を忘れず実行する必要があります.
また、どちらを選択しても,ファイルの転送中に取り外すことは当然できません。コピー(あるいは移動)中を示すウィンドウがないか、取り外す前にしっかりと確認してください。
「ハードウェアの安全な取り外し」は役目を終えたのか
結論から言うと、いいえ、だと筆者は考えます。
例えば、リムーバブルディスクに存在する Word ファイルを開いたままこの操作をすると、何らかのアプリケーションがリムーバブルディスクのファイルにアクセスしていることから、今は取り外さない方がいいことを教えてくれます。
ユーザから見て,リムーバブルディスクへアクセス(コピー,移動)されているかどうかを判断することは難しいです.しかし,この手順を踏むことで,意図しないデータの破壊や消失を防ぐことができます.
ただ,偶然取り外してしまった事故に,以前ほど神経質になる必要はありません.たいていの場合,それは安全に取り外されています.
おわりに
おわりです.
Discussion