web-dev-qa-db-fra.com

16.04 NFS problèmes de montage au démarrage

Tout d'abord merci pour votre temps. Je me bats depuis deux jours avec ce problème. J'ai le même environnement dans Ubuntu 14.04 et fonctionne parfaitement. Alors commençons:

Je veux monter un NFS au démarrage. Ce NFS aura/etc/Apache2 et d’autres dossiers de configuration. Ainsi, mon fstab (travaillant dans 14.04) ressemble à ceci:

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

Ensuite, je lie chaque dossier que je veux monter dans le système NFS comme ceci:

/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

Mon problème: Le problème est lorsque je démarre la machine. Parfois, il est monté correctement et parfois non. Si je redémarre la machine, j'ai 25% de probabilité que NFS ne soit pas monté correctement. Si je fais un "mount -a" il monte bien.

Je suis presque certain qu'il y a un problème avec systemd. J'ai trouvé beaucoup de problèmes et quelques bugs avec les dépendances NFS et remote-fs.target dans systemd. Mais tout le monde a une solution claire. Par exemple, j'ai modifié certaines dépendances de remote-fs.target uniquement pour exiger un réseau en ligne, mais cela n'a pas fonctionné pour moi.

je pense que c'est une question de la façon dont systemd démarre les remote-fs.target et NFS.

J'ai remarqué que pour chaque point de montage de/etc/fstab, systemd génère une unité terminée par .mount. Donc, si je cherche ces unités:

systemctl show mnt-nas.mount

J'ai vu ça:

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

Mes questions: Quelqu'un at-il eu ce problème? Quelqu'un a-t-il ce genre de comportement lors du montage de NFS au démarrage? Comment avez-vous résolu si vous aviez?

Merci beaucoup!

1
jps88

Enfin, j'ai finalement résolu le problème.

Dans ce cas, j'ai eu deux problèmes:

  • Par défaut, remote-fs.target NE dépend PAS de network-online.target. C'est un ¿bug connu? rapporté par la communauté. Donc, c’est ce qui fait que cela fonctionne parfois et parfois pas (dépend si ethernet a un lien ou non lorsque nfs est monté).

  • Deuxième problème, dans mon cas, je monte rbinds après avoir monté le système de fichiers NFS. La source de rbinds est un dossier du point de montage NFS (il est donc clair qu'il doit être monté ultérieurement). Lorsque systemd génère les fichiers unité ".mount" pour chaque point de montage du fichier fstab, tous les liens dépendent de local-fs.target. Bien sûr, c'est un problème dans ce cas car il pourrait monter les rbinds (local-fs.target) avant le point de montage nfs (remote-fs.target).

Donc, pour résoudre cette situation, ce que j'ai fait est:

  • D'abord, j'ai édité le fichier /lib/systemd/system/remote-fs-pre.target et ajouté:

    Wants = network-online.target

    Après = network-online.target

  • Ensuite, dans/etc/fstab, j’ai indiqué au point de montage NFS les options suivantes:

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

Et enfin, nous indiquons à systemd que les binds sont des périphériques réseau (donc, systemd les mettra sur remote-fs.target) et j'ai également indiqué que/mnt/nas devait être monté de manière stricte.

/ mnt/nas/config/php/etc/php aucun noauto, _netdev, x-systemd.automount, x-systemd.requires =/mnt/nas, rbind, par défaut 0 0

Avec ce changement, je corrige l'ordre de lancement des montages correctement dans systemd

2
jps88