Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Linuxで挿抜したUSBメモリやSDカードをwindowsに挿入するとスキャンして修復しますか?と聞かれる原因とその対策

よくLinuxで挿抜したUSBメモリwindowsに挿入するとこちらのように
「スキャンして修復しますか?」
というメッセージが表示されます。
f:id:Elsammit:20210223101924p:plain

今回このメッセージ表示する原因と対策方法が分かりましたのでまとめておこうと思います!!



■メッセージ発生原因

どうやら、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のタイミングがLinuxWindowsで異なるようです。
 ・Windowsの場合:ファイル書き込み・読み出し時にダーティ・ビットをONにし、ファイルを閉じたり書き込みが完了次第ダーティ・ビットをOFFにする
 ・Linuxの場合:USBメモリやSDカードマウント時にダーティ・ビットをONし、アンマウント時にダーティ・ビットをOFFにする

要するに、Linux側でちゃんとアンマウント処理を実施しなかった場合に次回windowsに挿入するとダーティ・ビットが立ってしまっているためにスキャンが必要になってしまいます。

Windowsの場合には確かにファイルが壊れている可能性があるので、ダーティ・ビットがONであればチェックするのは当然ですね😅
windowsLinuxでON/OFFのタイミングが全く異なりますね。。

ではなぜLinuxWindowsと同様の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*

■最後に

別にファイルが壊れているわけではなかったし、そこまで作業に問題があったわけではなかったので問題なかったのですが、
以前から疑問だった内容が分かりかなりすっきりしました。

やはりLinuxwindowsで異なる点は多いですね。
Linuxwindowsを両方使用しているので、しっかりと差分を理解していきたいと思います!!