• 1、fstab不是唯一了?

  • 2、演示:使用`systemd`挂载

  • 3、问题小结

centos7 fstab 可能不是你想那样

问题起源是,我在研究docker时,查找overlay挂载,突然发现/etc/fstabmount命令执行结果大相径庭

1、fstab不是唯一了?

99%的人不知道的centos7 fstab_javafstab

那么问题如下:

  • /etc/fstab/proc/mount内容大相径庭,但/proc/mount的内容在系统重启后,依然会被自动挂载,为什么?(大家知道/etc/fstab在永久生效,但其它项为什么也能永久生效呢?)
  • type cgroup 和 overlay 两种格式在 mount man文档中,并不支持,为什么还能被正常挂载?

其实,CentOS 7开始,还提供了systemd挂载文件系统的方式。 即/etc/fstab不再是唯一的永久挂载途径。在CentOS 7&8中,/etc/fstab的内容非常少,在上图中我们也能发现。

CentOS 7中,我们配置的/etc/fstab,系统并没有直接使用该配置,systemd实际上把文件转换成 mount 结尾的挂载文件. systemd在系统初始化时,读取的是这些.mount结尾的文件。

  • .mount文件保存在/run/systemd/generator
[root@O2O-T-K8S-TEST4 generator]# ls -l /run/systemd/generator/
total 20
-rw-r--r-- 1 root root 254 Apr 14 18:55 boot.mount
-rw-r--r-- 1 root root 181 Apr 14 18:55 dev-mapper-RootVG\x2dlv_swap.swap
.
.

除此外,systemd还提供了命令供我们查看系统挂载

  • 查看正在挂载的文件系统
[root@O2O-T-K8S-TEST4 generator]# systemctl -t mount
UNIT                                    LOAD   ACTIVE SUB     DESCRIPTION
-.mount                                 loaded active mounted /
boot.mount                              loaded active mounted /boot
dev-hugepages.mount                     loaded active mounted Huge Pages File System
dev-mqueue.mount                        loaded active mounted POSIX Message Queue File System
.
.
  • systemd挂载点位置
[root@O2O-T-K8S-TEST4 generator]# ls /usr/lib/systemd/system/*.mount
/usr/lib/systemd/system/dev-hugepages.mount
/usr/lib/systemd/system/dev-mqueue.mount
/usr/lib/systemd/system/proc-fs-nfsd.mount
/usr/lib/systemd/system/proc-sys-fs-binfmt_misc.mount
/usr/lib/systemd/system/sys-fs-fuse-connections.mount
.
.

2、演示:使用systemd挂载

  • 案例: 将 /dev/sdb1 挂载到 /tmp_dir 下
[root@rhel-8 system]# cat tmp_dir.mount
#  This file is part of systemd.

[Unit]
Description=Test Directory (/tmp_dir)
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=/dev/disk/by-uuid/cea0757d-6329-4bf8-abbf-03f9c313b07f
Where=/tmp_dir
Type=ext4
Options=defaults

[Install]
WantedBy=multi-user.target
  • 名词解释
What= 表示设备节点的绝对路径,文件或者其它待挂载的设备。`man 8 mount`查看更多

Where= 设备挂载点,需要写绝对路径。这里绝对不能是链接地址。

Type= 文件系统的类型,通常是一段字符串表示

Options= 挂载选项,用逗号分隔,支持多个选项并行。
  • reload daemon 使systemd生效
systemctl daemon-reload

3、问题小结

  • 第1个问题,centos 7 开始,sysv 交由 systemd 维护后,/etc/fstab 已经不再是唯一挂载控制项,systemd也可以完成该项工作,而且systemd读取的并不是/etc/fstab的内容,而是将其转换为.mount结尾的文件。看趋势,感觉后续有可能会彻底接管/etc/fstab. 但systemd研究不多,一家独大不知道是好是坏。按linus的风格,可能会大力支持systmd
  • 第2个问题,猜测man mount没有更新。centos 7是一定支持cgroup, overlay类型。


参考阅读: https://www.golinuxcloud.com/mount-filesystem-without-fstab-systemd-rhel-8/