卸载 SD 卡会使 fat-fs 不干净

卸载 SD 卡会使 fat-fs 不干净

当我在 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 卡。

答案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 卡,并生成一个干净的文件系统。

相关内容