我编写了一条规则来将我的 USB 记忆棒自动挂载到某个文件夹,但是当我拔下它时,该文件夹仍然挂载,当我ls
在那里时,我看到很多错误,例如:Directory bread (block: NNNN) failed
我尝试使用
SUBSYSTEM=="block", ACTION=="remove", RUN+="/bin/umount /media/disk"
它不起作用。
我的安装规则看起来像
SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/mount -t vfat <options> /dev/%k /media/disk"
答案1
这里有两个问题。
首先是你的 udev 规则不够精确。是的,它们可以启动插入/拔出 USB 闪存驱动器的操作,但当您的硬盘在启动时被识别时也可能会触发它们。
第二个问题的后果可能更严重:你应该总是卸载你的驱动器在拔掉插头之前。否则驱动器和系统都会受到影响。我亲眼见过人们以这种方式毁坏他们的闪存驱动器。
答案2
我已经在网络上看到了这种有缺陷的方法,并且它的范围太通用,正如之前的答案所提到的。动态性也不够,如果插入多个USB设备怎么办?这个问题很常见,解决方案也已经存在。您没有提到您的发行版,所以我无法告诉您哪些脚本可以打包。无论如何我都会提到它们,因为它们会向您展示更好的方法,您总是可以借用适用的部分。
首先,您应该真正考虑查看udisks
,如果您使用完整的 DE,您可能只需要单独使用它。仅适用于 WM...一个伟大的项目取代了已弃用的 HAL,并使用udisks
称为udisks-glue
.
如果您仍然决定不使用udisks
,请查看udev
名为 的脚本uam
。 Gentoo 有一个 ebuild,否则请查看源代码GitHub 位桶。
值得一提的是,Arch 的文档中还有很多很棒的 USB 自动挂载udev
示例维基百科
这些选项中的任何一个都是实现此目的的轻量级方法,并且实现完整、范围具体并经过副作用测试。
答案3
您正在寻找"precog"
行动。
正如 rozcietrzewiacz 所说,在驱动器仍安装时将其拔出是一个坏主意。根据定义,系统在驱动器被移除之前并不知道该驱动器已被移除。因此,在拔下文件夹之前,它无法自动卸载文件夹。因此,你需要告诉系统您计划通过以某种方式卸载驱动器(手动或某些安全删除选项)来拔出驱动器。
答案4
这是 Linux 内核仍然存在缺陷的一个领域。它缺乏卸载正在使用的文件系统的能力。如果某处的某个进程仍然在该磁盘上打开了一个文件,则无法卸载该文件。