磁盘变只读是内核因检测到严重错误(如坏道、I/O超时)主动挂载为ro,需立即查dmesg确认故障类型;若为物理损坏则停写换盘,若仅为journal失败且SMART无重映射扇区,可remount,rw并紧急备份;严禁fsck;SMART中Reallocated_Sector_Ct>0、Current_Pending_Sector>0、UDMA_CRC_Error_Count异常升高是硬盘将失效的关键指标;ddrescue前须停服务、禁TRIM、用-d -r3参数;镜像挂载必须ro,noload避免日志重放;数据恢复优先photorec,操作全程远离原盘。
read-only file system)怎么立刻应对这不是系统“建议”你别写,而是内核已主动挂载为只读——通常意味着底层硬件或文件系统已检测到严重错误,继续写入可能扩大损坏范围。
先确认状态:
mount | grep " / "看根分区是否含
ro;再查日志:dmesg -T | tail -30重点找
end_request: I/O error、ata timeout、ext4_abort 这类关键词。
dmesg 显示大量 UNC(uncorrectable sector)或 ABRT,基本可判定物理坏道或盘体故障,立即停写,准备换盘ext4 journal failed,且 smartctl -a /dev/sdX 中 Reallocated_Sector_Ct 和 Current_Pending_Sector 为 0,可尝试强制重挂载读写:mount -o remount,rw /,但必须同步备份关键数据
fsck —— 它默认会尝试修复,而此时设备可能已不稳定,强行 fsck 可能触发更多 I/O 错误甚至丢分区表smartctl 输出里哪些字段真正预示硬盘快挂了smartctl 不是看“Overall-health self-assessment test result: PASSED”就安心。很多消费级盘即使严重老化,这行也显示 PASSED。
盯紧这三列:
Reallocated_Sector_Ct:值 > 0 就该警惕;> 5 基本建议替换;数值持续上涨说明坏道在蔓延Current_Pending_Sector:正在等待重映射的扇区数;> 0 表示磁头已无法稳定读取该位置,下次写入时可能触发重映射失败,直接导致 I/O hang 或只读切换UDMA_CRC_Error_Count:如果远高于同批次其他盘(如 > 100),大概率是数据线松动或主板 SATA 接口老化,不是盘本身问题,换线/换口就能解决执行命令时加 -d sat(如 smartctl -d sat -a /dev/sdb),避免某些 USB-SATA 转接器下识别不全。
ddrescue 备份故障盘前必须做的三件事ddrescue 不是万能的“抢救神器”,它只负责尽可能多
地复制还能读出的数据;顺序不对、参数乱设,反而会让盘彻底锁死。
systemctl stop docker nginx mysql),减少后台 I/O 干扰hdparm -I /dev/sdX 确认是否支持 TRIM 或 NCQ,若支持,加 --no-trim 参数禁用,防止固态盘在救援中误触发擦除-d(direct)和 -r3(重试 3 次):ddrescue -d -r3 /dev/sdX /path/to/image.img /path/to/logfile.log,跳过卡死区域,优先保全连续好区段
直接 mount -o loop 故障盘镜像风险极高——如果原文件系统元数据已损坏,挂载过程可能触发内核 panic 或污染宿主机缓存。
mount -o ro,noload(ext 系列)或 mount -o ro,loop,noatime(通用),其中 noload 会跳过 journal 重放,避免因日志损坏导致挂载失败bad geometry 或 invalid blocksize,别硬试;改用 debugfs 查看结构:debugfs -R "stats" /path/to/image.img,确认 superblock 是否可用
photorec(按文件签名恢复)而非依赖文件系统结构,尤其当 e2fsck -n 报大量 inode not found 时,说明目录树已断裂最常被忽略的一点:所有恢复操作必须在另一块健康磁盘上进行,绝不要把镜像和恢复出的数据存回原盘或同一 RAID 阵列——那等于把故障源和备份放在同一个单点上。