16.04 nfs mount problems na inicialização

1

Primeiramente, obrigado pelo seu tempo. Eu tenho lutado por dois dias com esse problema. Eu tenho o mesmo ambiente no Ubuntu 14.04 e está funcionando perfeito. Então, vamos começar:

Eu quero montar um NFS no momento da inicialização. Este NFS terá o / etc / apache2 e outras pastas de configuração. Então, meu fstab (trabalhando em 14.04) é assim:

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

Então, eu vinculo todas as pastas que eu quero montar no NFS assim:

/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

Meu problema : O problema é quando eu inicializo a máquina. Às vezes é montado corretamente e às vezes não. Se eu reiniciar a máquina, tenho 25% de probabilidade de que o NFS não esteja montado corretamente. Se eu fizer um "mount -a", ele monta bem.

Estou quase certo de que existe um problema no sistema. Eu encontrei muitos problemas e alguns bugs com dependências NFS e remote-fs.target no systemd. Mas alguém tem uma solução clara. Por exemplo, eu mudei algumas dependências de remote-fs.target apenas para exigir rede online, mas não funcionou para mim.

acho que é uma questão de como o systemd inicia o remote-fs.target e o NFS.

Eu notei que para cada ponto de montagem de / etc / fstab, o systemd gera uma unidade terminada com .mount. Então, se eu procurar por essas unidades:

systemctl show mnt-nas.mount

Eu vi isto:

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

Minhas perguntas : Alguém já teve esse problema? Alguém conseguiu esse tipo de comportamento montando o NFS no momento da inicialização? Como você resolveu se você tivesse?

Muito obrigado!

    
por jps88 22.11.2017 / 10:04

1 resposta

2

Bem, finalmente resolvi o problema.

Neste caso, tive dois problemas:

  • Por padrão, o remote-fs.target NÃO depende de network-online.target. Este é um bug conhecido? relatado pela comunidade. Então, isso faz o que às vezes funciona e às vezes não (depende se o ethernet tem link ou não quando o nfs está montado).

  • Segundo problema, no meu caso, montei rbinds após montar o NFS. A origem dos rbinds é uma pasta do ponto de montagem do NFS (portanto, é claro que é necessário montá-lo mais tarde). Quando o systemd gera os arquivos unitários ".mount" para cada ponto de montagem do fstab, todos os rbinds dependem do local-fs.target. Claro, isso é um problema neste caso porque ele poderia montar o rbinds (local-fs.target) antes do nfs mountpoint (remote-fs.target).

Então, para resolver essa situação, o que eu fiz é:

  • Primeiro, editei o arquivo /lib/systemd/system/remote-fs-pre.target e adicionei:

    Quer = network-online.target

    Depois de = network-online.target

  • Então, no / etc / fstab eu indiquei ao ponto de montagem do NFS as próximas opções:

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

E, finalmente, indicamos ao systemd que rbinds são dispositivos de rede (assim, systemd os colocará em remote-fs.target) e também indiquei que / mnt / nas precisa ser montado estritamente.

/ mnt / nas / config / php / etc / php nenhum noauto, _netdev, x-systemd.automount, x-systemd.requires = / mnt / nas , rbind, padrões 0 0

Com essa mudança, eu corrijo a ordem de lançar as montagens de forma adequada no systemd

    
por jps88 22.11.2017 / 13:56