有没有办法在实际执行瓶装之前先“尝试装瓶”?

时间:2018-07-26 10:19:15

标签: c linux mount

在Linux中可以管理多个挂载点。我想全部卸载它们,或者什么都不卸载。由于在某些情况下linux无法卸载设备(例如有人在挂载点上),因此我想添加一个功能来检查所有挂载点,并在实际执行umount操作之前查看是否可以挂载设备。

是否有诸如trylock之类的功能来测试设备是否可挂载?或者是否有任何功能可以检查是否有任何用户正在使用挂载点,例如lsof

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

This answer很好地描述了它。尽管问题完全不同,但是答案是相同的。

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

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

答案 2 :(得分:1)

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

请注意,正如Felix指出的那样,很有可能某些过程将在您检查之后但在发出umount之前抢占挂载点。