web-dev-qa-db-ja.com

/ etc / fstabの_netdevマウントオプションはどのように機能しますか?

_netdev/etc/fstabオプションを使用してネットワークインターフェイスが起動するまでマウントを延期するために使用される正確なメカニズム(実装)は何ですか?
systemdはこの動作を変更しますか?
また、sshfsのdelay_connectオプションは、_netdevが提供しないものを何に提供しますか?

mountから man page

_netdev
ファイルシステムは、ネットワークアクセスが必要なデバイスに存在します(システムでネットワークが有効になるまで、システムがこれらのファイルシステムをマウントしようとするのを防ぐために使用されます)。

sshfsから man page

-o delay_connect
サーバーへの接続を遅延

28
Piotr Dobrogost

SysV Init

/etc/init.d/mountall.sh initスクリプトは、ローカルファイルシステムのみをマウントします。

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

他のファイルシステムは、たとえば/etc/init.d/mountnfs.shなどの個別のinitスクリプトによってマウントされ、(LSBヘッダーを介して)$networkへの依存関係を宣言します。したがって、これらはネットワークが起動した後、後でスケジュールされますが、mountall.shははるかに早く実行できます。

systemd

ローカルマウントユニットはlocal-fs.targetによってプルされ、リモートマウントユニットはremote-fs.targetによってプルされます。 systemd-fstab-generator/etc/fstabをスキャンし、マウントユニットを生成して、上記と同様の条件に基づいて、これらを上記のターゲットに割り当てます。

delay_connect

このオプションは、sshfsがマウント時にリモートサーバーへのSSH接続を開始せず、実際にそれを必要とする最初のファイルシステム操作でのみ開始することを意味します。これはエラー報告を遅らせますが、たとえば、initシステムがマウント操作を正しく注文するのに十分な情報を取得していない場合など、場合によっては有効な回避策になることがあります。 「ネットワーク」が「アップ」であることはかなり 緩い用語 であり、任意の 追加の依存関係 を追加して、トリガーイベントが(systemd用語では)起動トランザクションの一部ではありません。

28
Ferenc Wágner

Systemdのバージョン231のman systemd.mountから:

ローカルおよびネットワークファイルシステムを参照するマウントユニットは、ファイルシステムタイプの仕様によって区別されます。場合によってはこれでは不十分です(たとえば、iSCSIなどのネットワークブロックデバイスベースのマウント)。その場合、ユニットのマウントオプション文字列に_ netdevが追加され、systemdがマウントユニットネットワークマウント。

20
Piotr Dobrogost

Upstart/Udev

upstartおよび/またはudevベースのシステムの場合、これは少し異なります。

udevはNFSファイルシステムをマウントしようとするようで、netfsは失敗した場合の安全策です。

私が間違っていたら訂正してください。どちらにしても、この回答は最近の一部のレガシーシステム(Ubuntu 14.04 LTS、RHEL6)にのみ関連しています。

1
Quattro