访问位于NFS挂载点的基础文件系统上的文件


8

也许这是一个奇怪的请求,但这与以下问题的相反:

是否可以在不卸载NFS内容的情况下查看基础NFS装载的内容?

我有一个安排,其中多个远程站点上的Linux服务器从中央服务器(所有CentOS 5.x)安装NFS共享。认为:/opt/software或类似的东西。

如果一切正常,则客户端系统将从主服务器安装NFS导出,并且可以正常运行。共享中包含的数据不会频繁(可能每周)更改。

我担心与主要NFS服务器的连接丢失(NFS服务器中断,光纤切断等)的情况。由于共享数据并不经常更改,因此我希望这些系统在丢失NFS挂载后能够独立运行。

假设挂载消失了,我想使用/opt/software位于NFS挂载下面同一位置的本地文件。此外,我会每天同步这些文件。

NFS挂载是读/写的,因为需要从任何客户端站点更改挂载的卷。

这可能吗?如何访问(或覆盖)基础目录中的文件?可能存在超时问题吗?是否有任何安装选项/提示可以帮助您解决此问题?

Answers:


16
mount -o bind / /mnt

当您查看/ mnt / opt / software时,您会在/ opt / software中的安装下方找到文件(如果有)。


但这会将所有根文件系统挂载在/ mnt下。嗯...
ewwhite

1
所以?这会造成什么伤害?它只是让您同步所需的文件。您甚至可以将其放在/ private / root中,其中/ private是700 root,这样就没有其他人可以访问这些文件,这不是因为它们具有完全相同的权限,如果可以的话,也不会造成任何危害。基本上,这似乎是对您问题的确切答案。现在,如果您的问题是NFS服务器消失后如何恢复,那完全不同,并且可能涉及强制卸载。这将使您无效,并因此破坏一半的进程,无论如何都将强制重新启动。
塞斯·罗伯逊

这已经很接近了,但是我决定只将需要使用bind参数访问的目录挂载到文件系统上的另一个位置。
ewwhite 2011年

实际上,这在特定情况下非常有用,我希望很久以前就知道此选项。我只是再次遇到这种情况。基本上,我有一个/ usr目录,该目录与根文件系统绑定在一起,并希望将其移动到其自己的文件系统中以恢复根目录上的空间。因此,在制作usr并将数据迁移到那里并重新启动以安装新的usr之后,如何轻松删除旧的/ usr数据?一种方法是使用单用户模式,希望那里没有文件。另一种方法是使用此绑定技巧并从备用路径中删除数据目录。
2015年

8

使用mount --bind选项可以做到这一点。

Since Linux 2.4.0 it is possible to remount part of the file hierarchy somewhere else. The call is
   mount --bind olddir newdir
After this call the same contents is accessible in two places.

所以我能够 mount --bind /opt/software /foo

然后应用NFS挂载/opt/software,保留查看位于的基础文件的能力/foo


3

由于文件是相对静态的,因此您可能需要的是rsync。除非多个远程客户端具有更改文件的能力。如果数据本质上是只读的,那么为什么不通过每台计算机上的类似于cron的作业每天仅同步几次?再说一次,我可能遗漏了这一点,但是如果NFS上的数据基本上是只读的,则可以做到这一点。


传统上,Rsync是有意义的,但是有可能在任何给定站点上修改文件。如果我以只读方式挂载,则rsync将是一个更好的选择。除非您知道双向同步解决方案...
ewwhite

使用rsync可以做的一件事是设置一个cron作业,该作业检查每台计算机上文件的时间戳,并可能每5分钟执行一次。注意到更新后,将文件推送到nfs,并同时创建一个触发文件,其他所有计算机在固定时间进行检查。一旦他们看到此触发器,他们都将运行rsync以从NFS获取最新文件。
slashdot

我可以尝试使用Unison作为解决此问题的方法。
ewwhite
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.