Прежде всего, спасибо за ваше время. Я боролся в течение двух дней с этой проблемой. У меня такая же среда в Ubuntu 14.04 и работает отлично. Итак, начнем:
Я хочу смонтировать NFS во время загрузки. Эта NFS будет иметь / etc / apache2 и другие конфигурационные папки. Итак, мой fstab (работает в 14.04) выглядит следующим образом:
X.X.X.X:/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", он будет работать нормально.
Я почти уверен, что есть системная проблема. Я обнаружил много проблем и некоторые ошибки с зависимостями NFS и remote-fs.target в systemd. Но у каждого есть четкое решение. Например, я изменил некоторые зависимости 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. Это известная ошибка? сообщается сообществом. Итак, это то, что заставляет это иногда работать, а иногда нет (зависит от того, есть ли у ethernet ссылка или нет, когда монтируется nfs).
Вторая проблема, в моем случае, я монтирую rbinds после монтирования NFS. Источником rbinds является папка точки монтирования NFS (поэтому ясно, что она должна быть смонтирована позже). Когда systemd генерирует файлы модулей «.mount» для каждой точки монтирования fstab, все rbinds зависели от local-fs.target. Конечно, это проблема в этом случае, потому что он может смонтировать rbinds (local-fs.target) до точки монтирования nfs (remote-fs.target).
Итак, чтобы разрешить эту ситуацию, я сделал следующее:
Сначала я отредактировал файл /lib/systemd/system/remote-fs-pre.target и добавлено:
Wants = network-online.target
After = network-online.target
Затем в / etc / fstab я указал точка монтирования NFS: 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, значения по умолчанию 0 0
С этим изменением я исправляю порядок правильного запуска монтировок в systemd