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!
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