Linux
umount sdcard 使 fat-fs 不干淨
當我在 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 卡。
作為您的第 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 埠拔下讀卡器,然後才從讀卡器中取出卡。