在实际预制卸载之前有什么办法 "try umount" 吗?

Is there any way to "try umount" before actually preform umount?

在linux中可以管理多个挂载点。我想全部卸载或不卸载任何。由于存在 linux 无法卸载设备的情况(例如有人在挂载点上),我想添加一个功能来检查所有挂载点,并在我实际执行卸载操作之前查看设备是否可以卸载。

是否有像trylock这样的函数来测试设备是否可卸载?或者是否有任何功能可以检查是否有用户正在使用 lsof?

这样的挂载点

没有办法,AFAIK。没关系,因为你的想法有缺陷,这是 TOCTOU race condition 的经典案例。在检查 umount() 是否会成功和实际执行之间,任何其他过程都可能会改变结果。

您可以使用 fuser -m /mountpoint 查看是否有任何进程正在使用挂载点。

请注意,正如 Felix 指出的那样,某些进程很可能会在您检查之后但在您发出 umount 之前获取安装点。

This answer 描述得很好。虽然问题大相径庭,但答案是一样的

您永远无法知道将来的卸载是否会成功。当您检查它时,您可以发现它是否有效(甚至几乎没有,因为根据定义,检查操作不等同于卸载操作),但该信息在一纳秒后就没用了。

唯一可行的方法是,如果您找到某种方法来锁定挂载点,防止它在卸载之前被其他进程使用。