为什么懒惰的MNT_DETACH或`umount -l`不安全/危险?


10

我读过一些umount -l不安全的地方:

在@cas的回答中

如果您担心何时可以安全地拔出外置驱动器,请不要使用umount--lazy选项

@frostschutz的评论

umount --lazy是不安全的,不能保证安全。[...]

util-linux 通过Ruediger迈耶评论

您应该完全避免使用umount -l。只需杀死所有正在使用的进程,/tmp/mountpoint然后不带选项就卸载它-l

为什么umount -l不安全/危险?

有没有办法使它安全?

Answers:


12

懒惰的卸载会创建薛定ding的猫坐骑

  • 您不知道设备是否已真正卸载
  • 在某些情况下,“卸载”文件系统仍可访问
  • 在某些情况下无法访问“卸载”文件系统

有一种错误的安全感:似乎文件系统已被卸载,但实际上它只是从文件名称空间/层次结构中隐藏了。

  • 进程仍然可以通过打开的文件描述符进行写入
  • 可以通过相对路径名打开新文件或现有文件以供进程在挂载点内具有工作目录的进程进行写入

这意味着,如果您umount -l /media/hdd将不再能够访问/media/hdd/dir/file(绝对路径名),但是如果您的进程具有工作目录,/media/hdd那么它仍然能够创建可以读取/写入的新进程./dir/file(相对路径名)。

如果您尝试卸载设备,则会显示一条令人困惑的消息:

# umount --force --all-targets /dev/sdb2
umount: /dev/sdb2: not mounted

这使设备看起来好像没有挂满,但是仍然有进程正在写入磁盘。

由于存在多种可能导致umount阻塞的非显而易见的情况,即使未lsof +f -- /dev/device显示任何内容,文件系统仍可能不会被卸载。

您将永远不会知道文件系统是否真正卸载。无法找到答案。

可拆卸设备

如果您umount -l使用可移动磁盘,那么您将处于困境:您无法确定所有待处理的数据都已写入磁盘。

在a之后,您可以做的最好的事情umount -l确保完成所有写入并防止将来写入,但是您仍然不能保证已卸载它。

对于可移动设备,如果未正确卸载设备,则下次插入时可能会导致奇怪的行为:

  • 设备将获得递增的设备名称,即/dev/sdb成为/dev/sdc/dev/sdb即使该设备不再以文件形式存在于该内核日志消息中,也仍然可以引用/dev。(我知道解决此问题的唯一方法是重新启动。)

  • 可能会导致btrfs损坏。btrfs希望一次只存在一个具有给定UUID的文件系统。内核仍然在幻像设备和新设备上看到相同的UUID。(我必须重建我的btrfs备份硬盘)。

systemd 陷阱


“可以通过相对路径名在安装点内具有工作目录的进程中打开新文件或现有文件以进行写入,这是我所寻找的信息。您还有其他链接或参考吗?
乔纳森·莱因哈特

@乔纳森检查人umount。否则,我需要用谷歌搜索。如果这样做,请发表您的发现。
汤姆·黑尔

我最近读过umount(2)几次书。它只说“执行一次懒惰卸载:使挂载点不可用于新访问,立即将文件系统和其下挂载的所有文件系统彼此以及与挂载表断开连接,并在挂载点不再繁忙时实际执行卸载。” 但是很遗憾,这甚至比您提供的内容还少。
乔纳森·莱因哈特

umount(8)他说文件系统正忙,例如,当文件系统上有打开的文件,或者某个进程在其中有其工作目录,或者正在使用交换文件时。这听起来好像不是一个确定的列表,但可能与我能够找到的一样好。
乔纳森·莱因哈特

我对您所说的内容进行了详细说明,并在此答案中添加了其他一些示例。谢谢你的信息!
乔纳森·莱因哈特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.