systemd-remount-fs,fstab之间的渊源

systemd-remount-fs.service 是 Linux 系统中 systemd 初始化系统的一个核心服务单元(Unit)。它的主要作用是在系统启动的早期阶段,根据 /etc/fstab 配置文件重新挂载根文件系统(root filesystem)和其他本地文件系统,以确保它们以正确的选项(如读写权限 rw、无执行权限 noexec 等)挂载。

以下是关于该服务的详细信息:

主要功能

  • 重新挂载文件系统:在系统启动初期,内核通常会将根文件系统以"只读"(read-only, ro)模式挂载,以便进行文件系统检查(fsck)。systemd-remount-fs.service 负责读取 /etc/fstab 文件,并将根文件系统及其他标记为需要自动挂载的本地文件系统重新挂载为配置中指定的模式(通常是读写模式 rw)。
  • 应用挂载选项:它不仅处理读写权限,还应用 /etc/fstab 中定义的其他挂载选项,例如 noatime(不更新访问时间)、nodiratime、noexec(禁止执行二进制文件)等,这对于系统安全性和性能优化至关重要。
    替代旧机制:它取代了传统 SysV init 系统中的 /etc/rc.d/rc.sysinit 脚本里处理文件系统重挂载的部分逻辑。

启动时机与依赖

  • 启动阶段:该服务通常在 local-fs-pre.target 之后运行,并在 local-fs.target 之前完成。它是系统启动早期(sysinit 阶段)的关键部分。
  • 依赖关系:
    • 它依赖于底层块设备和文件系统驱动已加载。
    • 其他服务(如日志服务 systemd-journald.service 或数据库服务)通常依赖于 local-fs.target,这意味着它们必须等待 systemd-remount-fs.service 成功完成,确保文件系统可写后才会启动。
列序 名称 说明与示例
1 设备或文件系统 指定要挂载的块设备(如 /dev/sda1)或远程文件系统(如 server:/share),也可使用文件系统的 UUID 或 LABEL(更推荐,如 UUID=xxxx-xxxx)。
2 挂载点 文件系统在目录树中的挂载位置,必须是一个已存在的目录路径,如 /、/home、/mnt/data。
3 文件系统类型 指定分区或设备的文件系统格式,如 ext4、xfs、ntfs、nfs、swap。
4 挂载选项 控制挂载行为的选项,多个选项用逗号分隔。常用选项有 defaults(默认)、noauto(启动不挂载)、rw/ro(读写/只读)。
5 备份标记 供 dump 备份工具使用,决定文件系统是否需要备份。0 表示忽略,1 表示需要备份。通常设为 0。现代基本上不用dump进行备份了。
6 自检顺序 供 fsck 工具在系统启动时检查文件系统的优先级顺序 。根目录 / 应设为 1,其他文件系统设为 2,不需要检查或非物理磁盘设为 0。

自检顺序

自检顺序(第六列)决定了系统启动时 fsck 工具检查和修复文件系统的顺序与优先级。其工作机制如下:

核心工作机制
  1. 触发时机:在系统启动过程中,内核挂载根文件系统(/)为只读后,会检查 /etc/fstab 中所有非网络设备且"挂载选项"不为 noauto 的条目。根据第六列的值,决定是否以及何时运行 fsck 进行文件系统一致性检查。
  2. 数字的含义:
  • 0:不检查。系统将完全跳过对该文件系统的 fsck 检查。通常用于非物理磁盘文件系统(如 swap、proc、tmpfs)或网络文件系统(如 nfs)。
  • 1:最高优先级(最先检查)。此值应且仅应分配给根文件系统(/)。系统会首先对标记为 1 的分区执行 fsck。
  • 2 或更大正整数:次级优先级。所有其他需要检查的本地物理文件系统(如 /home、/var)都应设置为 2。系统在对所有标记为 1 的分区检查完毕后,会并行检查所有标记为相同数字(如都是 2)的分区。
工作流程示例

假设 /etc/fstab 配置如下:

复制代码
UUID=abc...  /     ext4 defaults        1 1
UUID=def...  /home ext4 defaults        1 2
UUID=ghi...  /data xfs  defaults,nofail 0 2
/dev/sr0     /media/cdrom iso9660 ro,noauto 0 0
  • 系统启动,挂载根分区 / 为只读。
  • 运行 fsck 首先且单独检查根分区 /(因为其第六列为 1)。
  • 根分区检查修复完成后,以读写方式重新挂载 /。
  • 接着,系统同时启动对 /home 和 /data 的 fsck 检查(因为它们第六列都是 2)。注意:/data 虽然标记为 2,但由于其第四列挂载选项包含 nofail,即使检查或挂载失败也不会阻止启动流程。
  • 所有 fsck 检查通过后,系统继续挂载 /home 和 /data。
  • /media/cdrom 因第六列为 0,且挂载选项为 noauto,在启动时完全不被检查和挂载。
相关推荐
律宏阔3 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔3 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴3 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千3 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei373 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei373 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei373 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW3 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
百万蹄蹄向前冲3 小时前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js
GeW3 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux