当我在 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 步,请尝试以下操作:
或者如果您以 root 身份运行,只需
这向内核发出设备
/dev/sdd
即将被删除的信号,并且应该触发将任何剩余的写入缓冲区受控刷新到卡,以避免文件系统损坏。这可能会导致阅读器掉电,类似于
eject
命令;如果是这样,另一种方法是只刷新缓冲区,而不意味着即将删除设备。这可以通过以下blockdev
命令来实现:如果这没有帮助,那么我担心读卡器可能不支持热拔卡。这对于便宜的阅读器是可能的。使用这种读卡器的唯一安全方法是先从 USB 端口拔下读卡器,然后才从读卡器中取出卡。
在第 7 步发出命令
sync
会将缓冲区缓存写入 SD 卡,并生成干净的文件系统。