/ etc / fstab中的_netdev挂载选项如何工作?


24

我想知道什么是用于安装推迟到以后的网络接口是向上的确切机制(实现)当人们使用_netdev的选项/etc/fstab
systemd改变这种行为吗?
另外,delay_connectsshfs的选项提供了什么_netdev,而没有提供什么呢?

mount 手册页

_netdev
文件系统驻留在需要网络访问的设备上(用于防止系统尝试在系统上启用网络之前挂载这些文件系统)。

sshfs 手册页

-o delay_connect
延迟与服务器的连接

Answers:


25

SysV初始化

/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可以早得多地运行。

系统的

本地安装单元由引入local-fs.target,远程安装单元由引入remote-fs.targetsystemd-fstab-generator扫描/etc/fstab,生成安装单元,并根据与上述类似的条件将其分配给上述目标。

delay_connect

此选项意味着sshfs不会在安装时启动与远程服务器的SSH连接,而只会在实际需要它的第一个文件系统操作上启动。这会延迟错误报告,但是在某些情况下可能是一个有用的解决方法,例如,如果您的初始化系统没有足够的信息来正确地命令安装操作。“网络”是“启动”是一个相当宽松的术语,即使可以将任意额外的依赖项添加到装入单元,如果触发事件不属于启动事务的一部分,这也无济于事(用systemd的话来说)。


因此,您是说这_netdev不是传递给执行mount的过程的参数(并且特定于mount的类型,例如ext4/btrfs/cifs/fuse),而是由其他进程/脚本读取,该进程/脚本基于此标志来决定何时在引导过程中,应执行这些安装。是?如果是这样,那么我怀疑这就是为什么该论点以下划线开头,以便与其他正式论点区分开来的原因。
Piotr Dobrogost '16

是。如果将_netdev选项传递给mount命令,则该选项将在其中可见,/proc/mounts但没有其他效果。
FerencWágner'16

奖金问题;这记录在某处吗?
Piotr Dobrogost '16

1
安装手册包含:“ FILESYSTEM-INDEPENDENT MOUNT OPTIONS-其中一些选项仅在它们出现在/etc/fstab文件中时才有用。” 好吧,_netdev(稍后记录)是一个很好的例子。
FerencWágner'16

2
缺省情况下,在mount(8)中忽略_netdev选项。该选项仅由初始化脚本使用。bugzilla.redhat.com/show_bug.cgi?id=607309#c4
Piotr Dobrogost

18

man systemd.mount对systemd的231版本:

引用本地和网络文件系统的安装单元通过其文件系统类型规范加以区分。在某些情况下,这还不够(例如,基于网络块设备的安装,例如iSCSI),在这种情况下,可以将_netdev添加到单元的安装选项字符串中,这迫使系统将安装单元视为网络安装。


好厉害!不知道为什么这个答案还没有被投票赞成。
Valentin Bajrami

1

Upstart/Udev

对于upstart和/或udev基于系统的系统,这略有不同。

似乎udev仍会尝试挂载NFS文件系统,这netfs是在发生故障时的安全网。

如果我错了,请纠正我。无论哪种方式,此答案仅与某些最近的旧系统(Ubuntu 14.04 LTS,RHEL6)相关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.