16.04 nfs引导时挂载问题

首先感谢您的时间。 我已经和这个问题争了两天了。 我在ubuntu 14.04中拥有相同的环境,并且工作正常。 那么,让我们开始吧:

我想在启动时挂载NFS。 这个NFS将有/ etc / apache2和其他配置文件夹。 所以,我的fstab(在14.04工作)看起来像这样:

XXXX:/share_NFS /mnt/nas nfs auto,nolock,soft,intr,nfsvers=3,tcp,bg,rw 0 0 

然后,我绑定我想在NFS中挂载的每个文件夹,如下所示:

 /mnt/nas/config/apache2 /etc/apache2 none auto,rbind,defaults 0 0 /mnt/nas/config/php5 /etc/php5 none auto,rbind,defaults 0 0 /mnt/nas/config/logrotate.d /etc/logrotate.d none auto,rbind,defaults 0 0 /mnt/nas/config/postfix /etc/postfix none auto,rbind,defaults 0 0 /mnt/nas/www /var/www none auto,rbind,defaults 0 0 

我的问题 :问题是我启动机器的时候。 有时它安装正确,有时不安装。 如果我重启机器,我有25%的可能性没有正确安装NFS。 如果我制作一个“mount -a”它就可以了。

我几乎可以肯定存在系统问题。 我在systemd中发现了很多问题以及NFS和remote-fs.target依赖项的一些错误。 但任何人都有明确的解决方案。 例如,我更改了remote-fs.target的一些依赖项,只是为了要求网络在线,但它对我不起作用。

我认为这是systemd如何启动remote-fs.target和NFS的问题。

我注意到,对于/ etc / fstab的每个挂载点,systemd生成一个以.mount结尾的单元。 所以,如果我寻找这个单位:

systemctl show mnt-nas.mount

我看到了这个:

 Names=mnt-nas.mount Requires=system.slice -.mount Wants=network-online.target RequiredBy=etc-logrotate.d.mount etc-php5.mount remote-fs.target var-www.mount etc-apache2.mount etc-postfix.mount Conflicts=umount.target Before=etc-logrotate.d.mount umount.target etc-php5.mount remote-fs.target var-www.mount etc-apache2.mount etc-postfix.mount After=systemd-journald.socket remote-fs-pre.target system.slice network.target -.mount network-online.target RequiresMountsFor=/mnt 

我的问题 :有没有人有这个问题? 有没有人在启动时获得这种挂载NFS的行为? 你怎么解决的?

非常感谢你!

好吧,最后我解决了这个问题。

在这种情况下,我有两个问题:

  • 默认情况下,remote-fs.target不依赖于network-online.target。 这是一个已知的¿bug? 公社报道。 因此,这使得有时可以工作,有时不工作(取决于以太网是否在安装nfs时有链接)。

  • 第二个问题,在我的情况下,我挂载NFS后挂载rbinds。 rbinds的源是NFS挂载点的文件夹(因此,很明显必须稍后安装)。 当systemd为fstab的每个挂载点生成“.mount”单元文件时,所有rbinds都依赖于local-fs.target。 当然,在这种情况下这是一个问题,因为它可以在nfs mountpoint(remote-fs.target)之前安装rbinds(local-fs.target)。

所以,为了解决这种情况,我所做的是:

  • 首先,我编辑了文件/lib/systemd/system/remote-fs-pre.target并添加了:

    想要= network-online.target

    之后= network-online.target

  • 然后,在/ etc / fstab中,我向NFS挂载点指示了下一个选项:

    XXXX:/ nfs_share / mnt / nas nfs _netdev,noauto,x-systemd.automount ,nolock,soft,intr,nfsvers = 3,tcp,bg,rw 0 0

最后,我们向systemd表明rbinds是网络设备(因此,systemd将它们放在remote-fs.target上)并且我还指出必须严格安装/ mnt / nas。

/ mnt / nas / config / php / etc / php none noauto,_netdev,x-systemd.automount,x-systemd.requires = / mnt / nas ,rbind,defaults 0 0

通过这个更改,我修复了在systemd中启动安装的顺序