4

确定 Samba 挂载点在 Linux 上是否死机的最佳(最快)方法是什么?我需要在 C 中执行此操作。当在陈旧的挂载上调用时,诸如 statfs()、statvfs() 之类的系统调用会阻塞 30-40 秒,在这种情况下它们甚至不会返回错误。stat() 似乎比其他人失败得更快(大约 10 秒)并返回错误。挂载点可能会因为另一台主机宕机或那里的 Samba 守护进程被杀死而过时。任何建议表示赞赏..

4

3 回答 3

1

您可以设置几秒钟后超时的警报(请参阅alarm()和)。setitimer()

于 2010-01-24T21:47:49.857 回答
0

好吧,我不知道如何进行更快的检查,但我可能会建议您同时并行检查所有挂载点,这样您将始终拥有相同的总时间,即使有许多 samba 挂载。

于 2010-01-25T14:41:42.547 回答
0

我在回答我自己的问题。目标是尽量减少尝试访问陈旧挂载点的多个进程所花费的时间。通常,系统调用将在亚秒时间内完成。将陈旧的共享阻塞 10 秒,甚至 3 秒是不可接受的,因为这些调用是在多个地方多次完成的,并且延迟时间会累积。因此,我最终编写了一个监控进程,它每 n 秒检查一次挂载,如果无法访问,则卸载它们。我还从我的配置中读取了信息,说明哪些文件系统应该是远程(挂载)并检查 mtab 文件 - 如果它们不存在,那就是错误。代码检查 mtab 在亚秒级时间内完成。花了一两天时间来实施,但对我来说效果很好。

于 2010-01-30T03:14:57.740 回答