遇“Read-only file system”需依次排查:1.确认挂载状态并remount,rw;2.用smartctl检查磁盘SMART健康;3.卸载后用e2fsck或xfs_repair修复文件系统;4.以dd/hdparm测试底层I/O;5.核对fstab配置及superblock一致性。

一、确认文件系统只读状态并强制重新挂载
当系统提示“Read-only file system”且无法创建或修改文件时,通常表明内核因检测到I/O错误而自动将该分区以只读方式重新挂载。此行为是保护机制,防止进一步损坏。需先确认挂载状态,再尝试安全地重新挂载为读写模式。
1、执行mount | grep -E "(sda|sdb|nvme)"查看目标分区当前挂载选项,确认是否含ro标识。
2、运行dmesg | tail -30 | grep -i "error\|fail\|buffer\|ext4\|xfs"提取最近磁盘错误日志,定位触发只读的原始原因。
3、若日志未显示严重硬件故障,尝试强制重新挂载:mount -o remount,rw /dev/sdXN(将sdXN替换为实际设备名,如sda1)。
4、验证是否生效:touch /mnt/test_rw && rm /mnt/test_rw;若成功,说明仅是临时保护挂载,非底层损坏。
二、检查磁盘健康状态(SMART诊断)
SMART数据可揭示磁盘物理层隐患,如坏扇区、重映射计数上升或不可纠正错误,是判断是否需更换硬盘的关键依据。必须在系统负载较低时执行,避免干扰业务I/O。
1、安装工具(如未预装):yum install smartmontools(CentOS/RHEL)或apt-get install smartmontools(Debian/Ubuntu)。
2、执行基础健康评估:smartctl -H /dev/sda;若返回SMART overall-health self-assessment test result: FAILED,则必须立即停止使用该盘并备份数据。
3、获取详细属性值:smartctl -A /dev/sda | grep -E "(Reallocated_Sector_Ct|Current_Pending_Sector|Uncorrect|Command_Timeout|Reported_Uncorrect)"。
4、重点核查:Reallocated_Sector_Ct > 0 或 Current_Pending_Sector > 0 或 Uncorrectable Sector Count > 0 均表示存在实质性物理缺陷。
三、扫描并修复文件系统错误
文件系统元数据损坏会导致挂载失败、目录结构异常或只读锁定。修复前必须确保分区已卸载,否则可能加剧损坏。ext4与XFS需使用各自专用工具,不可混用。
1、卸载目标分区:umount /dev/sdXN;若提示“target is busy”,先执行fuser -mv /mount/point查杀占用进程。
2、对ext4分区执行强制检查与修复:e2fsck -f -y /dev/sdXN;其中-f强制检查(跳过“clean”标记),-y自动确认所有修复操作。
3、对XFS分区执行修复:xfs_repair /dev/sdXN;注意:XFS不支持在线修复,且必须确保未挂载,否则命令将拒绝执行。
4、修复完成后,使用mount /dev/sdXN /mnt/test尝试挂载,并运行ls -l /mnt/test验证目录可读性与完整性。
四、检测底层块设备I/O稳定性(dd与hdparm测试)
绕过文件系统层直接测试磁盘裸设备读写能力,可区分问题是源于文件系统逻辑错误,还是磁盘固件、控制器或物理介质失效。该步骤适用于怀疑存在间歇性I/O超时或随机读写失败的场景。
1、执行无缓存顺序读测试:dd if=/dev/sda of=/dev/null bs=1M count=1024 iflag=direct status=progress;观察是否出现Input/output error或速度骤降至0。
2、执行小块随机写压力测试:dd if=/dev/zero of=/tmp/testwrite bs=4K count=100000 oflag=direct conv=fdatasync;该操作模拟数据库写负载,触发潜在坏道。
3、检测磁盘识别与响应延迟:hdparm -Tt /dev/sda;若Timing buffered disk reads结果持续低于50MB/s(SATA SSD)或低于10MB/s(HDD),且伴随HDIO_DRIVE_CMD(identify) failed警告,表明控制器通信异常或磁盘即将脱机。
五、排查挂载配置与元数据一致性
/etc/fstab中错误的UUID、挂载选项或文件系统类型声明,可能导致系统启动时反复失败并回退至只读挂载。同时,根文件系统superblock损坏也会引发相同症状,需通过备用块恢复。
1、获取设备当前UUID:blkid /dev/sdXN;比对输出与/etc/fstab中对应行是否一致,UUID不匹配是导致启动挂载失败的最常见配置错误。
2、检查fstab挂载选项:确认不含ro、noauto等限制项,且defaults后未误加errors=remount-ro以外的危险参数。
3、对ext4根分区,若无法挂载,尝试使用备用superblock修复:dumpe2fs -h /dev/sdXN | grep -i "superblock"获取备份块位置,再执行e2fsck -b 32768 /dev/sdXN(以32768为例)。
4、验证fstab语法正确性:mount -a;若报错,根据提示精确定位哪一行配置异常,禁止直接重启。










