mog*_*gul 3 linux unmounting usb-drive
当我在 USB 读卡器中卸载 SD 闪存卡,然后拔出卡时,文件系统保持“脏”。
系统:
如何重现:
date >> /media/mogul/2E3E-AE54/d
sudo umount /dev/sdd1
现在从第 2 步开始重复。注意你的 dmesg,它会说:
[357207.805594] FAT-fs (sdd1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
(较新的 linux 支持dmesg -w
)
现在,如果我在 umount
dd if=/dev/sdd1 skip=1000000 ibs=1 count=1 of=/dev/null
文件系统似乎幸存下来。
这对我来说似乎有点骇人听闻,我是否缺少一些基本的东西?
你有更优雅的解决方案吗?
我不喜欢使用eject
,但也只使用umount, since
eject` 来关闭读卡器的电源;在我重新插入读卡器之前,系统不会检测到新的 SD 卡。
作为您的第 7 步,请尝试以下操作:
echo 1 | sudo tee /sys/block/sdd/device/delete
Run Code Online (Sandbox Code Playgroud)
或者如果您以 root 身份运行,只需
echo 1 > /sys/block/sdd/device/delete
Run Code Online (Sandbox Code Playgroud)
这会向内核发出设备/dev/sdd
即将被移除的信号,并且应该触发对卡的任何剩余写入缓冲区的受控刷新,以避免文件系统损坏。
这可能会导致读取器与eject
命令类似的断电;如果是这样,另一种方法是只刷新缓冲区而不意味着即将移除设备。这可以通过以下blockdev
命令实现:
sudo blockdev --flushbufs /dev/sdd
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,那么恐怕读卡器可能不支持热拔卡。这对于廉价的读者来说是可能的。使用这种读卡器的唯一安全方法可能是首先从 USB 端口拔下读卡器,然后才从读卡器中取出卡。