在Linux中可以管理多个挂载点。我想全部卸载它们,或者什么都不卸载。由于在某些情况下linux无法卸载设备(例如有人在挂载点上),因此我想添加一个功能来检查所有挂载点,并在实际执行umount操作之前查看是否可以挂载设备。
是否有诸如trylock
之类的功能来测试设备是否可挂载?或者是否有任何功能可以检查是否有任何用户正在使用挂载点,例如lsof
?
答案 0 :(得分:3)
没有办法,AFAIK。没关系,因为您的想法有缺陷,这是TOCTOU race condition的经典案例。在检查umount()
是否成功到实际执行之间,任何其他过程都可能改变结果。
答案 1 :(得分:2)
This answer很好地描述了它。尽管问题完全不同,但是答案是相同的。
您永远无法知道将来的卸载是否会成功。当您检查它时,您可以确定它是否会起作用(甚至几乎不起作用,因为根据定义,check动作不等同于unmount动作),但是该信息在一纳秒后就没用了。
唯一可行的方法是在卸载之前找到某种方法来锁定挂载点,以防止其他进程使用该挂载点。
答案 2 :(得分:1)
您可以使用fuser -m /mountpoint
来查看是否有任何进程正在使用挂载点。
请注意,正如Felix指出的那样,很有可能某些过程将在您检查之后但在发出umount
之前抢占挂载点。