本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd.mount — 挂载单元配置
mount
.mount
以
".mount
" 为后缀的单元文件,
封装了一个由 systemd 管理的文件系统挂载点。
本手册列出了所有专用于此类单元的 配置选项(亦称"配置指令"或"单元属性")。 systemd.unit(5) 中描述了通用于所有单元类型的配置选项, 它们位于 [Unit] 与 [Install] 小节。 此类单元专用的配置选项位于 [Mount] 小节。
其他相关的选项还包括: systemd.exec(5) 中的选项定义了 mount(8) 命令的执行环境; systemd.kill(5) 中的选项定义了进程的结束方式; systemd.resource-control(5) 中的选项定义了进程的 资源限制。
注意, User=
与
Group=
选项对 mount 单元没有意义。
systemd 只向
mount(8)
传递 What=
与 Where=
的值。
在这种调用方式下,
mount(8)
将会忽略 /etc/fstab
中的所有选项,
并且必须以 UID=0 运行。
mount 单元的名称必须根据其封装的文件系统挂载点路径命名。
例如 /home/lennart
挂载点对应的单元名称必须是 home-lennart.mount
。
有关将路径名转换为单元名的细节,详见
systemd.unit(5) 手册。
注意,mount 单元不能从模版实例化而来,
也不能通过创建软连接的方法给同一个 mount 单元赋予多个别名。
每个 mount 单元都可以附带一个可选的 automount 单元, 以实现自动按需挂载或并行挂载。参见 systemd.automount(5) 手册。
在系统运行时创建的挂载点(独立于单元文件与
/etc/fstab
之外)将同样被 systemd 监控,
并且看上去与其他常规的 mount 单元没啥差别。
对 /proc/self/mountinfo
的详细解释参见
proc(5)
注意,某些虚拟文件系统拥有特别的功能, 无法通过 mount 单元对其进行修改或禁用。 例如:/sys, /proc, /dev, /tmp, sys/fs/cgroup, /dev/mqueue, /proc/sys/fs/binfmt_misc … 详见 API File Systems
下列依赖关系是自动隐含的:
如果某个 mount 单元的挂载点在文件系统的层次树中位于另一个 mount 单元的挂载点之下,
那么,将会同时在这两个单元中自动添加必要的
Requires=
, Before=
, After=
依赖。
基于块设备的文件系统挂载点将自动获得对其所依赖的底层块设备单元的
BindsTo=
与
After=
依赖。
如果某个挂载点使用了传统的文件系统限额,那么将会自动添加对
systemd-quotacheck.service
与
quotaon.service
的
Wants=
与
Before=
依赖。
其他与执行环境以及资源控制有关的 隐含依赖关系参见 systemd.exec(5) 与 systemd.resource-control(5) 手册。
除非明确设置了 DefaultDependencies=no
,否则 mount 单元将会自动添加下列依赖关系:
所有挂载点(无论网络还是本地)都自动获得 Before=umount.target
与 Conflicts=umount.target
依赖,以确保在关机前完成卸载。
本地文件系统挂载点自动获得
After=local-fs-pre.target
依赖。
此外,如果没有设置 nofail
挂载选项,本地文件系统挂载点还将自动获得
Before=
依赖。local-fs.target
网络文件系统挂载点自动获得
After=remote-fs-pre.target
, After=network.target
,
After=network-online.target
, Wants=network-online.target
依赖。
此外,如果没有设置 nofail
挂载选项,网络文件系统挂载点还将自动获得
Before=
依赖。remote-fs.target
判断文件系统是本地还是网络的依据是文件系统的类型(例如 xfs, ext4 是本地,而 cifs, nfs 则是网络),
但是在某些情况下这种判断是不可靠的(例如对于 iSCSI 这样基于网络的块设备),
为了明确标明对网络的依赖,可以在单元文件中明确使用 _netdev
挂载选项,
这样就可以强迫将此 mount 单元视为基于网络的文件系统挂载点。
fstab
¶mount 单元既可以通过单元文件进行配置,
也可以通过 /etc/fstab
文件(参见
fstab(5)
手册)进行配置。 /etc/fstab
中的挂载点将在每次重新加载 systemd 配置时(包括系统启动时)
动态的自动转化为 mount 单元。
一般来说,通过 /etc/fstab
配置挂载点是首选的方法,
详见
systemd-fstab-generator(8)
手册。
如果 systemd-fstab-generator
检测到某个NFS挂载点使用了 bg
挂载选项(参见 nfs(5) 手册),
那么 systemd-fstab-generator
将会自动把 bg
替换为
"x-systemd.mount-timeout=infinity,retry=10000
" ,
从而让 systemd 执行在 bg
选项中隐含的任务控制逻辑。
根据各种实际场景的不同需求,建议在设置 "nofail
" 的同时,
明确设置超时与重试的值,或者利用下面的
"x-systemd.automount
" 选项,
而不要使用 "bg
" 选项。
可以在 /etc/fstab
中使用一些无法被其他程序识别的 systemd 专用挂载选项,
以帮助创建与挂载点相关的依赖关系。
对于本地文件系统挂载点,
systemd 将会自动在 local-fs.target
中创建指向此挂载点的 Wants=
或 Requires=
依赖;
对于网络文件系统挂载点,
systemd 将会自动在 remote-fs.target
中创建指向此挂载点的 Wants=
或 Requires=
依赖;
至于究竟是 Wants=
还是 Requires=
依赖,
则取决于是否设置了下面的 nofail
选项。
x-systemd.requires=
¶设置一个到其他单元(例如 device 或 mount 单元)的 Requires=
与
After=
依赖,
参数必须是以下三者之一:
一个单独的单元名称、
一个以绝对路径表示的设备节点、
一个以绝对路径表示的挂载点。
可以多次使用此选项以指定对多个单元的依赖。此选项对于如下两种挂载点特别有用:
(1)需要额外辅助设备的,例如将日志存储在其他设备上的日志文件系统
(2)需要事先存在其他挂载点的,例如可以融合多个挂载点的叠合文件系统
(Overlay Filesystem)。
详见
systemd.unit(5)
手册。
x-systemd.before=
, x-systemd.after=
¶设置一个到其他单元(例如 mount 单元)的 Before=
或 After=
依赖。
参数必须是一个单独的单元名称或者一个以绝对路径表示的挂载点。
可以多次使用这些选项以指定对多个单元的依赖。
这些选项对于同时具备如下特征的挂载点特别有用:
挂载点带有 nofail
标记、
以异步方式挂载(async
)(默认即是异步)、
需要在特定单元启动之前或之后才能挂载(例如必须在启动
local-fs.target
之前挂载)。
关于 Before=
与 After=
的解释,详见
systemd.unit(5)
手册。
x-systemd.requires-mounts-for=
¶设置一个到其他挂载点的
RequiresMountsFor=
依赖。
参数必须是一个以绝对路径表示的挂载点,
可以多次使用此选项以指定对多个挂载点的依赖。
详见
systemd.unit(5)
手册。
x-systemd.device-bound
¶将文件系统所在的块设备升级为
BindsTo=
依赖。
此选项仅在使用
mount(8)
手动挂载时才有意义,因为此时默认为 Requires=
依赖。
注意,对于 /etc/fstab
中的条目或 mount 单元来说,
已经自动隐含的设置了此选项。
x-systemd.automount
¶同时创建一个对应的 automount 单元, 详见 systemd.automount(5) 手册。
x-systemd.idle-timeout=
¶设置对应的 automount 单元的最大闲置时长。
参见 TimeoutIdleSec=
选项(参见
systemd.automount(5)
手册)。
x-systemd.device-timeout=
¶设置等候所依赖的设备进入可用状态的最大时长,
若超时则放弃挂载。
可以使用
"ms
", "s
",
"min
", "h
" 这样的时间单位后缀。
若省略后缀则表示单位是秒。
注意,此选项仅可用于
/etc/fstab
文件,
不可用于单元文件中的 Options=
选项。
x-systemd.mount-timeout=
¶设置 /etc/fstab
中挂载点的超时时长。
如果超过指定的时间仍未挂载成功,那么将会放弃该挂载点。
若省略后缀则表示单位是秒。
可以使用 "s
",
"min
", "h
",
"ms
" 这样的时间单位后缀。
注意,此选项仅可用于
/etc/fstab
文件,
不可用于单元文件中的 Options=
选项。
参见下文的 TimeoutSec=
选项。
x-systemd.makefs
¶按指定的文件系统格式化此设备。 如果此设备"非空"(已含有签名), 那么将会跳过格式化操作。 因此,此选项可以安全的应用于已格式化的设备。
此选项仅可用于
/etc/fstab
文件,不可用于单元文件中的
Options=
选项。
参见 systemd-makefs@.service(8) 手册。
wipefs(8)
可以用来擦除块设备上已有的签名,从而允许
x-systemd.makefs
强制再次格式化已格式化的设备。
x-systemd.growfs
¶将文件系统扩展到占用块设备上的全部空间。 如果文件系统已经占满了全部空间,那么将不会执行任何操作。 因此,此选项可以安全的应用于已经完成扩展的文件系统。 此选项仅支持某些特定的文件系统, 详见 systemd-makefs@.service(8) 手册。
此选项仅可用于
/etc/fstab
文件,不可用于单元文件中的
Options=
选项。
_netdev
¶通常根据文件系统的类型来判断是否为网络文件系统(例如 xfs, ext4 是本地,而 cifs, nfs 则是网络), 以决定是否必须在网络可用之后才能启动。 但是在某些情况下这种判断是不可靠的(例如对于 iSCSI 这样基于网络的块设备), 使用此选项之后就可以强迫将此文件系统标记为网络文件系统。
网络文件系统所对应的 mount 单元将被安排在 remote-fs-pre.target
与 remote-fs.target
之间启动(而不是在
local-fs-pre.target
与 local-fs.target
之间),
并且自动获得 After=network-online.target
, Wants=network-online.target
,
After=network.target
依赖。
noauto
, auto
¶noauto
表示不将此挂载点加入到
local-fs.target
/remote-fs.target
的依赖中,
也就是不在系统启动时自动挂载(除非为了满足其他单元的依赖而被挂载)。而默认值
auto
则表示自动将此挂载点加入到上述目标单元的依赖中(也就是在系统启动时自动挂载)。
注意, noauto
选项仅作用于 mount 单元自身,如果使用了 x-systemd.automount
选项,
那么对应的 automount 单元仍然会被加入到上述目标单元的依赖中。
nofail
¶表示仅在 local-fs.target
/remote-fs.target
中对此挂载点使用 Wants=
依赖(而不是默认的 Requires=
),
并且在启动顺序上,此 mount 单元也不会排在上述目标单元之前。
这就意味着,启动流程既不会等待此挂载点,也不会在乎此挂载点是否挂载成功。
x-initrd.mount
¶要在initramfs中额外挂载的文件系统,
参见对 initrd-fs.target
的解释(参见
systemd.special(7) 手册)。
如果一个挂载点既被封装到了一个 mount 单元中,
又被配置到了 /etc/fstab
文件中,那么:
(1)如果单元文件位于 /usr
中,
那么以 /etc/fstab
文件为准(无视单元文件)。
(2)如果单元文件位于 /etc
中,
那么以单元文件为准(无视 /etc/fstab
文件)。
这意味着对于同一个挂载点来说,
/etc
中的单元文件优先级最高、/etc/fstab
文件次之、
/usr
中的单元文件优先级最低。
每个 mount 单元文件都必须包含一个 [Mount] 小节, 用于包含该单元封装的挂载点信息。 可在 [Mount] 小节中使用的选项, 有许多是与其他单元共享的,详见 systemd.exec(5) 与 systemd.kill(5) 手册。 这里只列出仅能用于 [Mount] 小节的选项(亦称"指令"或"属性"):
What=
¶绝对路径形式表示的被挂载对象:设备节点、LOOP文件、其他资源(例如网络资源)。
详见 mount(8) 手册。
如果是一个设备节点,那么将会自动添加对此设备节点单元的依赖(参见
systemd.device(5) 手册)。
这是一个必需的设置。注意,因为可以在此选项中使用 "%
" 系列替换标记,
所以百分号(%)应该使用 "%%
" 表示。
Where=
¶绝对路径形式表示的挂载点目录。 注意,不可设为一个软连接(即使它实际指向了一个目录)。 如果挂载时此目录不存在,那么将尝试创建它。 注意, 这里设置的绝对路径必须与单元文件的名称相对应(见上文)。 这是一个必需的设置。
Type=
¶字符串形式表示的文件系统类型。详见 mount(8) 手册。这是一个可选的设置。
Options=
¶一组逗号分隔的挂载选项。详见 mount(8) 手册。
这是一个可选的设置。注意,因为可以在此选项中使用 "%
" 系列替换标记,
所以百分号(%)应该使用 "%%
" 表示。
SloppyOptions=
¶设为 yes 表示
允许在 Options=
中使用文件系统不支持的挂载选项,
且不会导致挂载失败(相当于使用了
mount(8)
的 -s
命令行选项)。
默认值 no 表示禁止在 Options=
中使用
文件系统不支持的挂载选项(会导致挂载失败)。
LazyUnmount=
¶设置是否使用延迟卸载。
设为 yes 表示立即将文件系统从当前的挂载点分离,
但是一直等待到设备不再忙碌的时候,
才会清理所有对此文件系统的引用(也就是真正完成卸载)。
这相当于使用
umount(8)
的 -l
选项进行卸载。
默认值为 no
ForceUnmount=
¶设置是否使用强制卸载。
设为 yes 表示使用强制卸载(仅建议用于 NFS 文件系统)。
这相当于使用
umount(8)
的 -f
选项进行卸载。
默认值为 no
DirectoryMode=
¶自动创建挂载点目录(包括必要的上级目录)时, 所使用的 权限模式(八进制表示法)。 默认值是 0755
TimeoutSec=
¶最大允许使用多长时间以完成挂载动作。
若超时则被视为挂载失败,
并且所有当前正在运行的命令都将被以 SIGTERM
信号终止;
若继续等待相同的时长之后命令仍未终止,
那么将使用 SIGKILL
信号强制终止
(详见 systemd.kill(5)
中的 KillMode=
选项)。
可以使用 "ms", "s", "min", "h" 这样的时间单位后缀。
若省略后缀则表示单位是秒。
设为零表示永不超时。
默认值为 DefaultTimeoutStartSec=
选项的值(参见
systemd-system.conf(5) 手册)。
参见 systemd.exec(5) 与 systemd.kill(5) 以了解更多设置。