我有一个在 Linux 机器(Debian)上运行的闭源软件(客户端),用于将文件传送到备份机器。
一切正常,只是客户端软件无法访问已安装的卷(NFS 或 SMB)。到目前为止,我还不知道为什么,因为这些文件夹的权限非常开放,任何其他用户都可以访问它……
无论如何,该客户端可以访问/发送其他文件夹和文件,那么有没有办法让已安装的卷在该客户端看来是“普通文件夹”?
答案1
这是一个“我需要和你一起调试它”的问题,特别是因为你还没有说你正在使用哪个专有客户端。
对你的问题的回答是“是也不是”;如果你的 NFS 挂载是 /nfs/,并且程序与 /nfs/foo 交互,那么就该程序而言,这是一个普通文件,仅此而已。除非它询问。如果它实际上明确询问操作系统“/nfs/foo 属于哪种文件系统?”,它会被告知它是 NFS。基本上,你无法更改其中任何一项;特别是,你无法让操作系统告诉客户端 NFS 挂载不是 NFS 挂载,至少据我所知是这样。
然而,客户实际上询问的可能性很小。
以下是我要检查的内容:
- 最有可能的问题是客户端针对 /(根文件系统)运行,并且拒绝跨越文件系统边界;这是相当典型的。同样,您无法直接修复此问题,但您可能可以做的是让它在其他地方查找。尝试将您的 NFS 或 SMB 共享明确添加到客户端作为备份位置。
- NFS 至少(我认为 SMB)默认情况下会阻止客户端主机上的 root 执行很多操作;如果 #1 不起作用,请尝试将 no_root_squash 添加到您的 NFS 导出中(通过在主服务器上运行“exportfs -v”并查找选项来确保它有效)并看看是否有帮助。
- 如果上述两种方法都失败了,我会 strace 客户端(使用 -ff -o /tmp/strace.out 等)并 grep 其中一个它没有拾取的文件系统,看看它遇到了什么错误,或者它是否在尝试。如果它甚至没有尝试,并且您已明确将该 FS 列为要备份的内容,您最好与供应商联系。
-罗宾