我有使用 NFS 的集群和一个myprogram
写入固定位置的程序,例如/home/sharedfs/somedir/somefile.txt
。这意味着如果您myprogram
从每个节点运行,它们都会写入共享/home/sharedfs/somedir/somefile.txt
,但这是不可取的。
所以,我在想:有没有办法为每个节点创建一个文件,并在NFS中建立一个软链接,使得每个节点上的链接指向不同的节点特定文件?也就是说,有
/home/sharedfs/somedir/somefile.node0.txt
/home/sharedfs/somedir/somefile.node1.txt
/home/sharedfs/somedir/somefile.nodeN.txt
和
/home/sharedfs/somedir/somefile.txt -> link to somefile.node0.txt only on node0
/home/sharedfs/somedir/somefile.txt -> link to somefile.node1.txt only on node1
/home/sharedfs/somedir/somefile.txt -> link to somefile.nodeN.txt only on nodeN
这可能吗?
另一种选择是somedir
为每个节点设置不同的目录,这些目录以不同的方式安装,以便somedir/somefile.txt
指向每个节点上的不同(非共享)目录。
欢迎任何想法!
答案1
我想当你说myprogram
写入固定文件时,你的意思是你不能修改这个程序以使其写入另一个文件(也许你没有源代码)。
我也很确定 NFS 不可能实现您想要做的事情。无论如何,您提到的使用不同安装点的解决方案都可以工作,但如果您有很多节点,则不太实用。
您的程序是使用绝对路径写入文件somefile.txt
,还是仅使用当前目录中的文件?如果它在当前目录中,您可以创建一些子目录,例如:
/home/sharedfs/somedir/nodeN/somefile.txt
myprogram
并在对应目录下运行:
cd /home/sharedfs/somedir/nodeN
./myprogram
然后,在每个节点 (nodeN) 上使用本地目录中的符号链接,如下所示:
ln -s /home/sharedfs/somedir/nodeN/somefile.txt /usr/local/somefile.txt
该文件somefile.txt
可以在每个节点上以相同的名称访问,但根据节点指向不同的文件。如果要访问另一个节点的文件,可以通过挂载的文件系统来完成。