USBカードリーダーからSDフラッシュカードをマウント解除してからカードを取り外すと、ファイルシステムは「汚れた」ままになります。
システム:
- RPiまたはxubuntu 16.04.3
- カードリーダーは非常に手頃な中国のカードリーダーです。私はいくつかの他のことを試しました
- いろんなSDカードを使ってみました。
再現方法:
- カードリーダーの接続
- vfatを含むSDカードを最初のパーティションに挿入します。
- システムがSDカードを検出するのを待ちます。
- システムがファイルシステムを自動的にマウントするか、手動でマウントするのを待ちます。
- ランダムファイルを更新するには:
date >> /media/mogul/2E3E-AE54/d
- 削除:
sudo umount /dev/sdd1
- (プレースホルダー、ここでは何もしないでください)
- カードリーダーからSDカードを取り外します。
ここで手順2を繰り返します。 dmesgに注目すると、次のようになります。
[357207.805594] FAT-fs (sdd1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
(最新のLinuxサポートdmesg -w
)
今、私がumount
- SDカードから任意のバイトを読み込みます。例:
dd if=/dev/sdd1 skip=1000000 ibs=1 count=1 of=/dev/null
ファイルシステムがまだ存在しているようです。
これは私に少し遅れているようです。基本的なものを見逃していますか?
よりエレガントなソリューションはありますか?
カードリーダーを使用したくありませんが、取り出しeject
てumount, since
電源を切ると、カードリーダーを再挿入するまでシステムは新しいSDカードを検出しません。
答え1
ステップ7で以下を試してください。
echo 1 | sudo tee /sys/block/sdd/device/delete
またはrootとして実行している場合
echo 1 > /sys/block/sdd/device/delete
これは、デバイスがすぐに削除される予定であることをカーネルに通知し/dev/sdd
、ファイルシステムの破損を防ぐために、カードに残っているすべての書き込みバッファを制御されたフラッシュでトリガーする必要があります。
これにより、このコマンドと同様にリーダーの電源が切れることがありますeject
。そのような場合、デバイスがすぐに削除されるという意味ではなく、バッファをフラッシュすることが代替策になる可能性があります。これは次のコマンドを使用して達成できますblockdev
。
sudo blockdev --flushbufs /dev/sdd
それでも役に立たない場合は、カードリーダーがホットスワップ可能なカードをサポートしていない可能性があります。これは安い読者にとって可能です。このタイプのカードリーダーを使用する唯一の安全な方法は、まずUSBポートからカードリーダーを取り外してから、カードリーダーからカードを取り外すことです。
答え2
手順7でコマンドを実行すると、sync
バッファキャッシュがSDカードに書き込まれ、クリーンなファイルシステムが作成されます。