必须看/proc/mounts,它是内核维护的实时快照,第四列逗号分隔的选项(如rw,relatime,data=ordered)才是当前真实生效的配置,而非/etc/fstab中的静态意图;df -h不显示挂载选项,无法判断只读等关键权限控制。

挂载选项必须看 /proc/mounts,它才是当前真实生效的配置;磁盘“权限”不是文件系统级概念,实际要查的是挂载选项(如 ro/rw)、文件系统类型、属主/属组及目录权限三类东西。
怎么看当前实际生效的挂载选项
/proc/mounts 是内核维护的实时快照,第四列逗号分隔的字符串就是此刻真正起作用的参数。比如看到 /dev/sda2 / ext4 rw,relatime,data=ordered,errors=remount-ro,说明:可读写、启用相对时间更新、ext4 日志模式为 ordered、出错自动只读——这些都不是 /etc/fstab 里写的“意图”,而是正在运行的状态。
- 用
grep "/ " /proc/mounts快速定位根分区选项 - 用
awk '{print $2,$4}' /proc/mounts | column -t整齐列出所有挂载点及其选项 - 别依赖
mount命令输出:它只是美化了/proc/mounts,且可能过滤掉某些伪文件系统(如debugfs) - 如果改过
/etc/fstab却没生效,大概率是忘了执行mount -o remount /mountpoint
为什么 df -h 不能告诉你挂载是否只读
df -h 只统计空间,完全不显示挂载选项。它可能显示 /dev/sda1 挂在 /boot,但你看不出它是 ro 还是 rw。一旦误配成只读,你执行 touch /boot/test 会直接报错 Read-only file system,而 df -h 依然风平浪静。
- 确认可写性,必须结合
findmnt /boot或cat /proc/mounts | grep /boot -
df -hT能补上文件系统类型(如ext4),但依然不包含noatime、barrier=1等关键行为控制项 - 某些发行版(如 RHEL 8+)会通过
systemd-remount-fs.service覆盖 fstab 设置,此时/proc/mounts是唯一真相
所谓“磁盘权限”其实是三件事混在一起
Linux 没有“磁盘级权限”这种抽象概念。用户能否对某路径读写,取决于:① 挂载选项(ro 就彻底锁死)、② 文件系统类型是否支持 POSIX 权限(vfat、ntfs 不完全支持)、③ 目录本身的属主/属组和 chmod 权限。
- 先看挂载选项有没有
ro:findmnt -o SOURCE,TARGET,FSTYPE,OPTIONS /data - 再看文件系统类型是否“认权限”:
df -T /data | tail -1 | awk '{print $2}';如果是vfat,那chmod和chown基本无效 - 最后查目录权限:
ls -ld /data;即使挂载为rw,若/data属主是root且权限是drwx------,普通用户照样进不去
排查挂载选项异常的几个硬核线索
当你发现 /proc/mounts 显示的选项和预期不符(比如写了 noatime 却显示 relatime),问题往往藏在更底层:
- 检查内核启动参数:
cat /proc/cmdline | grep rootflags;rootflags=noatime会全局覆盖单个挂载点设置 - 确认设备路径是否一致:LVM 或 LUKS 加密卷的实际挂载设备是
/dev/mapper/vg-lv,不是/dev/sda2;fstab 写错路径,选项就套不上 - 验证是否被 systemd 动态干预:
systemctl status systemd-remount-fs.service;某些服务会在启动后强制重挂并注入默认选项 - 加密卷需额外注意:
lsblk -f中 LUKS 层本身无 UUID,只有解密后的映射卷(如sda3_crypt)才有挂载选项,别在错误层级查











