如何确保/etc/fstab中文件系统的挂载顺序

自从Linux操作系统引入了systemd后引导过程变快了很多,这是因为许多服务和进程都是并行启动的。这样其实会导致操作系统在启动时,不再根据/etc/fstab中条目顺序来挂载文件系统。如下所示,预期的结果是先挂载/data2,接着挂载/data1。

[root@yunweixia.com ~]# grep vdb /etc/fstab
/dev/vdb2       /data2      xfs     defaults        0 0
/dev/vdb1       /data1      xfs     defaults        0 0

但实际试验结果是先挂载/data1,然后挂载/data2

[root@yunweixia.com ~]# dmesg -T |grep vdb
[Mon Aug 14 14:51:34 2023] virtio_blk virtio6: [vdb] 41943040 512-byte logical blocks (21.5 GB/20.0 GiB)
[Mon Aug 14 14:51:34 2023]  vdb: vdb1 vdb2
[Mon Aug 14 14:51:38 2023] XFS (vdb1): Mounting V5 Filesystem
[Mon Aug 14 14:51:38 2023] XFS (vdb2): Mounting V5 Filesystem
[Mon Aug 14 14:51:38 2023] XFS (vdb1): Ending clean mount
[Mon Aug 14 14:51:38 2023] XFS (vdb2): Ending clean mount

[root@yunweixia.com ~]# df -Th |grep vdb
/dev/vdb1      xfs       5.0G   38M  5.0G   1% /data1
/dev/vdb2      xfs        15G   48M   15G   1% /data2

解决方案

您可以使用/etc/fstab文件中的“x-systemd.requires-mountsfor=”选项按特定顺序装载文件系统。

[root@yunweixia.com ~]# grep vdb /etc/fstab
/dev/vdb2       /data2      xfs     defaults        0 0
/dev/vdb1       /data1      xfs     defaults,x-systemd.requires-mounts-for=/data2       0 0
[root@yunweixia.com ~]# reboot

重新启动后进行验证

[root@yunweixia.com ~]# dmesg -T |grep vdb
[Mon Aug 14 14:58:53 2023] virtio_blk virtio6: [vdb] 41943040 512-byte logical blocks (21.5 GB/20.0 GiB)
[Mon Aug 14 14:58:53 2023]  vdb: vdb1 vdb2
[Mon Aug 14 14:58:57 2023] XFS (vdb2): Mounting V5 Filesystem
[Mon Aug 14 14:58:57 2023] XFS (vdb2): Ending clean mount
[Mon Aug 14 14:58:57 2023] XFS (vdb1): Mounting V5 Filesystem
[Mon Aug 14 14:58:57 2023] XFS (vdb1): Ending clean mount

[root@yunweixia.com ~]# df -Th |grep vdb
/dev/vdb2      xfs        15G   48M   15G   1% /data2
/dev/vdb1      xfs       5.0G   38M  5.0G   1% /data1

由于我们使用fstab来执行这些更改,systemd将为/run/systemd/generator中的各个fstab条目创建一个服务单元文件/

[root@yunweixia.com ~]# ls -lt /run/systemd/generator/
total 56
-rw-r--r-- 1 root root 343 Aug 14 14:58 -.mount
-rw-r--r-- 1 root root 382 Aug 14 14:58 \x2esnapshots.mount
-rw-r--r-- 1 root root 398 Aug 14 14:58 boot-grub2-i386\x2dpc.mount
-rw-r--r-- 1 root root 404 Aug 14 14:58 boot-grub2-x86_64\x2defi.mount
-rw-r--r-- 1 root root 300 Aug 14 14:58 dev-disk-by\x2duuid-b929613f\x2d4f4c\x2d40e4\x2da392\x2d2ab9cf82eb32.swap
-rw-r--r-- 1 root root 370 Aug 14 14:58 home.mount
drwxr-xr-x 2 root root 300 Aug 14 14:58 local-fs.target.requires
drwxr-xr-x 2 root root  60 Aug 14 14:58 local-fs.target.wants
-rw-r--r-- 1 root root 332 Aug 14 14:58 data1.mount
-rw-r--r-- 1 root root 245 Aug 14 14:58 data2.mount
-rw-r--r-- 1 root root 368 Aug 14 14:58 opt.mount
-rw-r--r-- 1 root root 370 Aug 14 14:58 root.mount
-rw-r--r-- 1 root root 368 Aug 14 14:58 srv.mount
drwxr-xr-x 2 root root  60 Aug 14 14:58 swap.target.requires
-rw-r--r-- 1 root root 368 Aug 14 14:58 tmp.mount
-rw-r--r-- 1 root root 380 Aug 14 14:58 usr-local.mount
-rw-r--r-- 1 root root 368 Aug 14 14:58 var.mount

systemd生成的装载单元文件如下:

[root@yunweixia.com ~]# cat /run/systemd/generator/data1.mount
# Automatically generated by systemd-fstab-generator

[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
RequiresMountsFor=/data2
Before=local-fs.target
After=blockdev@dev-vdb1.target

[Mount]
Where=/data1
What=/dev/vdb1
Type=xfs
Options=defaults,x-systemd.requires-mounts-for=/data2

扩展阅读

[root@yunweixia.com ~]# man systemd.mount
x-systemd.requires-mounts-for=依赖关系。参数必须是绝对路径。此选项可以指定多次。有关详细信息,请参阅systemd.unit(5)中的RequiresMountsFor=。

原创文章,作者:运维侠,如若转载,请注明出处:https://www.yunweixia.com/solutions/ensure-mount-order-filesystems-in-etc-fstab-guide.html

(0)
运维侠的头像运维侠共建用户
上一篇 2025年7月22日 18:11
下一篇 2025年7月24日 18:11

相关推荐

发表回复

登录后才能评论