よくLinuxで挿抜したUSBメモリをwindowsに挿入するとこちらのように
「スキャンして修復しますか?」
というメッセージが表示されます。
今回このメッセージ表示する原因と対策方法が分かりましたのでまとめておこうと思います!!
■メッセージ発生原因
どうやら、USBメモリやSDカード内にVolumeDirty フラグ(ダーティ・ビット)と呼ばれるビットが存在し、このビットが1(ON)を検知してwindowsにて
「スキャンして修復しますか?」
というメッセージを表示させていたようです。
【VolumeDirty フラグ(ダーティ・ビット)とは?】
各ボリュームごとに備えられている特別なステータス・ビットであり、OSの起動時(正確には、ボリュームのマウント時)にセットされ、OSの終了時にクリアされる。もしシステムが突然の障害や電源断、リセットなどにより、稼働途中で強制的に終了、再起動したりすると、ダーティ・ビットはセットされたままになる。
この状態でシステムを起動すると、ダーティ・ビットがセットされたままなので、システムに異常が発生したことが分かる(正常終了していれば必ずクリアされているはずだから)。
するとOSはchkdskを実行し、ファイル・システムの整合性、一貫性を検査する。
※参考:https://ameblo.jp/55saori/entry-12113543690.html
要するに書き込み・読み出し中に何等かの原因により、ダーティ・ビットがONになったままになってしまい、windows側に挿入するとこのようなメッセージが表示されるようです。
■なぜダーティ・ビットがONになったままなのか?
ですが、、、
なぜLinuxで挿入するとダーティ・ビットがONになったままになってしまうのでしょうか??
どうやらダーティ・ビットをON/OFFのタイミングがLinuxとWindowsで異なるようです。
・Windowsの場合:ファイル書き込み・読み出し時にダーティ・ビットをONにし、ファイルを閉じたり書き込みが完了次第ダーティ・ビットをOFFにする
・Linuxの場合:USBメモリやSDカードマウント時にダーティ・ビットをONし、アンマウント時にダーティ・ビットをOFFにする
要するに、Linux側でちゃんとアンマウント処理を実施しなかった場合に次回windowsに挿入するとダーティ・ビットが立ってしまっているためにスキャンが必要になってしまいます。
Windowsの場合には確かにファイルが壊れている可能性があるので、ダーティ・ビットがONであればチェックするのは当然ですね😅
windowsとLinuxでON/OFFのタイミングが全く異なりますね。。
ではなぜLinuxもWindowsと同様のON/OFFとしないのでしょうか?🤔
あくまで想定の域ですが、Windowsのように読み書き時にダーティ・ビットをON/OFFしようとするとLinuxカーネルがファイルの読み書きに対して追従しなければならず複雑な処理が必要になってしまいます。
一方、Linuxの場合にはマウント/アンマウントしなければUSBメモリ・SDカードへの書き込み・読み出しが行えません。
ですので、
「マウント/アンマウントで切り替えてしまえばよくない? こっちの方が制御簡単だよね?」
となったのではないかな?と思います。
※参考:https://unix.stackexchange.com/questions/230181/why-does-linux-mark-fat-as-dirty-simply-due-to-mounting-it
■解決策
上でも記載した通り、
USBメモリやSDカードをしっかりとアンマウントしましょうね
というのが解決策になります!!
だけど、
ちゃんとやっているんだけどメッセージが出てしまうよ
という方。
自分もそうでした。。。なぜかアンマウントしているはずなのですがメッセージが出てしまうのですよね😥
自分の場合には自動マウントが原因でした。
どうやら自動マウントを行う上でsystemdがUSBメモリやSDカードのデバイスをマウントした状態にしてしまっているようでした。
このため、別途下記を実行することで解決させることが出来ました。
sudo umount /dev/sd*