Как работает опция монтирования _netdev в / etc / fstab?

24

Я хотел бы знать, какой именно механизм (реализация) используется для отсрочки монтирования до тех пор, пока не активируется сетевой интерфейс, когда используется _netdevопция /etc/fstab?
Меняет ли systemdэто поведение?
Кроме того, что дает delay_connectопция sshfs, а что _netdevнет?

С mount man-страницы :

_netdev
Файловая система находится на устройстве, которое требует доступа к сети (используется для предотвращения попытки системы смонтировать эти файловые системы до тех пор, пока в системе не будет включена сеть).

С sshfs man-страницы :

-o delay_connect
задержать соединение с сервером

Петр Доброгост
источник

Ответы:

25

SysV Init

/etc/init.d/mountall.shСценарий инициализации монтирует только локальные файловые системы:

mount -a -t nonfs,nfs4,smbfs,cifs,ncp,ncpfs,coda,ocfs2,gfs,gfs2,ceph -O no_netdev

Другие файловые системы монтируются отдельными скриптами инициализации, как, например /etc/init.d/mountnfs.sh, которые объявляют (через заголовки LSB) свою зависимость $network. Таким образом, они планируются позже, после mountall.shзапуска сети, а могут работать гораздо раньше.

Systemd

Локальные узлы монтируются local-fs.target, удаленные remote-fs.target. systemd-fstab-generatorсканирует /etc/fstab, генерирует модули монтирования и назначает их вышеуказанным целям на основе условий, аналогичных приведенным выше.

delay_connect

Эта опция означает, что sshfs не будет инициировать SSH-соединение с удаленным сервером во время монтирования, а будет делать это только при первой операции файловой системы, которая действительно требует этого. Это задерживает создание отчетов об ошибках, но в некоторых случаях может быть полезным обходным путем, например, если ваша система инициализации не имеет достаточно информации для правильного порядка операции монтирования. «Сеть», будучи «работающей», - довольно свободный термин , и хотя можно добавить произвольные дополнительные зависимости для монтирования модулей, что не помогает, если событие триггера не является частью транзакции загрузки (на языке systemd).

Ференц Вагнер
источник
Итак, вы говорите, что _netdevэто не аргумент, передаваемый процессу, который выполняет монтирование (и который специфичен для типа монтирования, подобного этому ext4/btrfs/cifs/fuse), но он предназначен для чтения другими процессами / сценариями, которые на основе этого флага решают, когда во время загрузки эти монтирования должны быть выполнены. Да? Если так, то я подозреваю, что это причина, почему этот аргумент начинается с подчеркивания, чтобы отличить его от других формальных аргументов.
Петр Доброгост
Да. Если вы передадите _netdevопцию mountкоманде, она будет видна, /proc/mountsно другого эффекта не будет.
Ференц Вагнер
Бонусный вопрос; это где-то задокументировано?
Петр Доброгост
1
Руководство по монтированию содержит: «НЕЗАВИСИМЫЕ ФАЙЛЫ СИСТЕМЫ МОНТАЖА - Некоторые из этих опций полезны только тогда, когда они появляются в /etc/fstabфайле». Ну, _netdev(задокументировано несколько позже) является хорошим примером для этого.
Ференц Вагнер
2
Параметр _netdev по умолчанию игнорируется в mount (8). Опции используются только initscripts. - bugzilla.redhat.com/show_bug.cgi?id=607309#c4
Петр Доброгост
18

С man systemd.mountдля версии 231 Systemd:

Модули монтирования, относящиеся к локальной и сетевой файловым системам, отличаются спецификацией типа файловой системы. В некоторых случаях этого недостаточно (например, монтируются на основе сетевых блочных устройств, таких как iSCSI), и в этом случае _netdev может быть добавлен в строку параметров монтирования модуля, что вынуждает systemd считать модуль монтирования сетевым.

Петр Доброгост
источник
Awsome! Не знаю, почему за этот ответ еще не проголосовали.
Валентин Байрами
1

Upstart/Udev

Для upstartи / или udevоснованных систем это немного отличается.

Кажется, udevон все еще будет пытаться смонтировать файловые системы NFS и netfsявляется сетью безопасности на случай, если это не удастся.

Пожалуйста, поправьте меня, если я ошибаюсь. В любом случае, этот ответ актуален только для некоторых устаревших систем (Ubuntu 14.04 LTS, RHEL6).

Quattro
источник