【问题标题】:Fastest way to determine a stale Samba mount on Linux在 Linux 上确定过时 Samba 挂载的最快方法
【发布时间】:2010-01-21 00:05:52
【问题描述】:
在 Linux 上确定 Samba 挂载点是否失效的最佳(最快)方法是什么?
我需要在 C 中执行此操作。当在陈旧的挂载上调用时,诸如 statfs()、statvfs() 之类的系统调用会阻塞 30-40 秒,在这种情况下它们甚至不会返回错误。 stat() 似乎比其他人失败得更快(大约 10 秒)并返回错误。挂载点可能会因为另一台主机宕机或那里的 Samba 守护进程被杀死而过时。
任何建议表示赞赏..
【问题讨论】:
标签:
c
linux
filesystems
samba
【解决方案1】:
您可以设置几秒钟后超时的闹钟(请参阅alarm() 和setitimer())。
【解决方案2】:
好吧,我不知道如何进行更快的检查,但我可能会建议您同时并行检查所有挂载点,这样您将始终拥有相同的总时间,即使有许多 samba 挂载.
【解决方案3】:
我正在回答我自己的问题。目标是尽量减少尝试访问陈旧挂载点的多个进程所花费的时间。通常,系统调用将在亚秒级时间内完成。将陈旧的共享阻塞 10 秒,甚至 3 秒是不可接受的,因为这些调用是在多个地方多次完成的,并且延迟时间会累积。
所以,我最终编写了一个监控进程,它每 n 秒检查一次挂载,如果它们无法访问,则卸载它们。我还从我的配置中读取了信息,说明哪些文件系统应该是远程的(挂载的)并检查 mtab 文件 - 如果它们不存在,那就是错误。代码检查 mtab 在亚秒级时间内完成。
花了一两天时间来实现,但对我来说效果很好。