nfs 不可用时 autofs 挂载本地目录

nfs 不可用时 autofs 挂载本地目录

我希望我的主目录在可用时成为 NFS 挂载,在不可用时成为本地目录。想象一下我可能想要将其从正常网络中取出的笔记本电脑。我今天拥有的是一个自动挂载映射,可以在我的家中挂载 NFS 共享。我一直在研究堆栈交换,它建议尾声在计算机上保留 nfs 挂载的本地副本然而,这是一个非常古老的项目,我没有在 apt 存储库中看到它,这让我相信这可能不会很好地工作。

我尝试做的是将 nfs 主目录自动挂载到 /nethome 中,如下所示:

/etc/auto.nethome * -fstype=nfs4,rw,sec=sys,soft,rsize=8192,wsize=8192,no_root_squash h2gt2g.deepthot.aa:/volume1/homes/&

mkdir -p /nethome/me

/etc/fstab:  /home/me /nethome/me none defaults,bind 0,0

遗憾的是这根本不起作用。要么最终被绑定,要么根本不起作用。我想我不能做这么简单的事情。

还有其他人成功地做过这样的事情吗?这似乎是人们会做的事情。

顺便说一句,我已经在我的所有机器/虚拟机上自动挂载 nfs 主目录了 20 年左右。我一直想做一些与我刚才描述的类似的事情,但一直没有成功。

答案1

最简单的解决方案是将“网络家庭”和“真实家庭”作为笔记本电脑上的两个独立实体。然后放入 .profile (位于您真实的家中),如下脚本

if [ -e /nethome/me/.profile ]; then
    HOME=/nethome/me/
    cd $HOME
    . ./.profile
    exec bash
fi

基本上,您仍然拥有当地的“真实”房屋,但如果网络可用,它将被用作新家。通过这种方式,您甚至可以为不同的网络创建多个家庭。

但我仍然建议不要使用 $HOME,而是为自己创建一组与网络相关(而不是)的文件夹的别名,并根据实际目录在该特定网络中的位置设置这些别名。就像是:

if [ -d /mynas/projects/projectA ]; then
   projectA=/mynas/projects/projectA
elif [ -d /company/group/somelegacygarbage/projectA ]; then
   projectA=/company/group/somelegacygarbage/projectA
else 
   projectA=/home/me/projects/projectA
fi

稍后只需键入就会更容易cd $projectA,它会立即将您带到最相关的目录。

答案2

我管理一堆具有网络主目录(AFS,类似于 Coda,来自同一所大学)的计算机,并且由于 sssd 的限制,我使用自动挂载系统将主目录动态挂载到网络路径或者如果网络不可用,则为本地目录。 (实际上,更复杂,它还尝试了 cifs automount dir)

基本上,自动挂载可以使用程序而不是直接挂载定义。例如:

   /home  program:/etc/auto.home

然后该程序的输出(/etc/auto.home)应该类似于问题中的 NFS 安装定义,或者绑定安装到本地目录,具体取决于您决定的 shell 逻辑。

相关内容