Linux

umount sdcard 使 fat-fs 不干淨

  • December 24, 2017

當我在 USB 讀卡器中解除安裝 SD 快閃記憶體卡,然後拔出卡時,文件系統保持“臟”狀態。

系統:

  • RPi 或 xubuntu 16.04.3
  • 讀卡器是一些超級便宜的中國讀卡器。我嘗試了幾個不同的
  • 我嘗試了一堆不同的 SD 卡。

如何重現:

  1. 連接讀卡器
  2. 在第一個分區上插入帶有 vfat 的 SD 卡
  3. 等待系統檢測到 SD 卡
  4. 等待系統自動掛載文件系統或手動掛載
  5. 更新一個隨機文件,我這樣做:date >> /media/mogul/2E3E-AE54/d
  6. 解除安裝:sudo umount /dev/sdd1
  7. (佔位符,在這裡什麼都不做,但是)
  8. 從讀卡器中取出 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

  1. 讀取 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 埠拔下讀卡器,然後才從讀卡器中取出卡。

引用自:https://unix.stackexchange.com/questions/411452