修改/etc/fstab需逐行手工编辑并用mount -a测试,错误会导致启动卡住;必须用blkid查UUID、提前创建挂载点、加nofail防拖垮启动,推荐选项为defaults,noatime,errors=remount-ro,nofail 0 2。
CentOS 7 的默认挂载行为由 /etc/fstab 控制,改配置项本质就是改这一行:设备标识、挂载点、文件系统类型、挂载选项、dump 值、fsck 顺序。直接编辑它就能生效,但改错会导致开机卡住或挂载失败。
常见错误现象:mount: special device UUID=xxx does not exist(UUID 写错或设备不存在)、failed to mount /data(挂载点目录未创建)、系统启动卡在 “A start job is running for dev-disk-by…”(nofail 缺失且磁盘不可用)。
blkid 重新查 UUID,不能复用旧记录 —— 尤其重装/迁移后设备名可能变,/dev/vdb1 可能变成 /dev/sdb1
/data)必须提前 mkdir -p 创建,否则 mount -a 会报错nofail 选项,避免数据盘故障拖垮整个系统启动流程0 2 是推荐组合:第一个 0 表示不备份;第二个 2 表示非根文件系统,开机时 fsck 检查优先级低于 /(它的值是 1)用 sed -i "s//old//new/g" /etc/fstab 这种暴力替换看似快,但极容易出问题。比如把 /home/app 改成 /www/app 时,若 fstab 里还有 /home/app-backup,也会被误替换成 /www/app-backup,导致无效挂载项。
更危险的是:如果原挂载点是 /var,而你执行 sed -i "s/var/www/g",会把 defaults 里的 var(如 relatime 不受影响,但某些自定义选项含 var 字符串)也干掉,引发语法错误。
df -h 确认当前挂载设备,再 cat /etc/fstab | grep "old_mount_point" 定位唯一一行,手工编辑cp /etc/fstab /etc/fstab.bak
mount -a 测试,无输出才表示通过;有报错立刻 restorecon -v /etc/fstab 检查 SELinux 上下文(尤其从其他系统 cp 过来的 fstab)defaults 展开后是 rw,suid,dev,exec,auto,nouser,async,但对数据盘往往不合适。比如 web 服务用的 /www 目录,应禁用 suid 和 dev 防止提权;日志盘建议加 noatime 减少写放大。
noatime:禁用访问时间更新,提升 IO 性能,适用于多数数据盘nobarrier:仅限使用电池保护 RAID 卡或 NVMe SSD 时启用,普通 SATA 盘禁用(丢数据风险)errors=remount-ro:文件系统出错时自动只读挂载,比直接 panic 更稳妥x-systemd.device-timeout=30:配合 systemd,超时 30 秒后放弃挂载(需和 nofail 同时用)完整示例:UUID=a1b2c3d4- /www ext4 defaults,noatime,errors=remount-ro,nofail 0 2
很多人改完 fstab 就 reboot,结果进不了系统。其实 mount -a 已能暴露 95% 的问题,但仍有三个隐蔽点常被忽略:
lsblk -f 输出中目标设备的 FSTYPE 为空?说明没格式化或 mkfs 失败,mkfs.ext4 /dev/vdb1 必须成功执行且无 warningfindmnt -t ext4 查不到新挂载点?确认是否用了 systemd 管理挂载(CentOS 7 默认开启),此时 systemctl daemon-reload && systemctl restart local-fs.target 才真正生效ls -ld /www 权限为 dr-xr-xr-x?这是 ext4 默认挂载行为,需显式 chmod 755 /www 或在 fstab 加 umask=022(不推荐,权限应由应用层控制)最易被忽略的是:fstab 修改后,mount -a 成功不代表 systemd 下次启动时一定成功 —— 它会并行尝试所有挂载,依赖关系未声明时可能因顺序问题失败。真要保险,就用 UUID + nofail + systemd.automount(高级场景,不展开)。