linux启动时fsck默认串行执行,pass值仅控制检查顺序(0跳过、1根分区唯一、≥2升序排队),不支持并行;优化应设非关键分区pass=0,依赖日志与挂载计数自动触发,或改用启动后异步校验。

Linux 启动时的文件系统校验(fsck)默认是串行执行的,如果有多块硬盘且都设置了非零 pass 值,系统会按顺序逐个检查,拖慢启动速度。但 pass 参数本身不支持并行校验——它只控制检查顺序和是否跳过,内核并不并发执行 fsck。真正的优化方向是合理设置 pass 值、配合硬件特性与启动机制,避免无效等待。
理解 Pass 字段的真实作用
第六列 pass(也称 fs_passno)仅决定两点:
- 0:完全跳过 fsck 检查(适用于 swap、vfat、ntfs、网络存储等不支持或无需 fsck 的类型)
- 1:仅根文件系统(/)可用,且必须唯一;系统在 fsck 第一阶段单独运行
- 2 或更大正整数:表示“其他需检查的文件系统”,它们在根检查完成后,按数值升序排队执行,但仍是单线程依次进行,并非并行
也就是说,设成 2, 2, 2 不会让三块盘同时被 fsck;系统仍会一个接一个检查,只是顺序不固定(由设备发现顺序决定)。并行 fsck 不由 fstab 控制,而取决于 init 系统(如 systemd)是否启用并发检查逻辑——但目前主流发行版(包括 systemd 25x)默认仍为串行调用 fsck,且无标准 fstab 字段开启并行。
真正有效的多硬盘校验提速策略
与其强求“并行”,不如从根源减少校验开销和阻塞:
- 对 SSD 和现代 ext4/xfs 分区,关闭启动时自动 fsck:多数情况下无需每次启动都检查。将 pass 设为 0,依赖日志(ext4 journal)和挂载计数自动触发(如 tune2fs -c 30 /dev/sdX1 控制每 30 次挂载检查一次)
-
区分关键性,只对根分区设 pass=1,其余全设 0:例如:
UUID=abc123 / ext4 defaults 0 1UUID=def456 /home ext4 defaults 0 0UUID=ghi789 /data xfs defaults 0 0 -
用 xfs_repair 替代 fsck.xfs(XFS 专用):XFS 不使用传统 fsck,其修复工具 xfs_repair 默认不随启动运行;fstab 中设
pass=0即可,避免误配为 2 导致启动卡死 -
确保文件系统已启用 fastboot 特性:例如 ext4 可用
tune2fs -o journal=ordered /dev/sdX1提升日志可靠性,降低异常断电后强制检查概率
替代方案:启动后异步校验
若确实需要定期校验非根分区,又不想拖慢启动,可:
- 在 fstab 中统一设
pass=0 - 创建 systemd 服务(如
/etc/systemd/system/fsck-data.service),在 multi-user.target 后运行:ExecStart=/sbin/fsck -f /dev/disk/by-uuid/ghi789
并设置Type=oneshot+RemainAfterExit=yes - 或加入 cron,在低峰期执行:
@weekly /sbin/fsck -n /dev/disk/by-uuid/ghi789 2>&1 | logger -t fsck-weekly
这样既保证检查发生,又不阻塞开机流程。











