一、问题现象

  • 系统启动后发现根分区挂载为 只读 (ro)
    示例:

    /dev/sda2 on / type ext4 (ro,relatime,stripe=64)
    
  • 部分磁盘无法识别,fdisk -llsblk 没有显示

  • dmesg/var/log/syslog 中有 I/O 错误或磁盘掉线日志


二、排查流程

1. 查看磁盘挂载状态

mount | grep sd

确认是否有磁盘被挂载为 ro


2. 检查系统日志

dmesg | egrep -i "error|fail|sda|sdb"
journalctl -xe | egrep -i "error|fail|sda|sdb"

关注是否有:

  • I/O error

  • Buffer I/O error

  • EXT4-fs error

  • 硬盘掉线/重连


3. 检查磁盘分区与文件系统

lsblk -f
blkid

确认文件系统类型是否识别(ext4、xfs 等)。

如果显示 unknown 或无法识别 → 可能是分区表损坏。


4. 检查磁盘健康状态 (SMART)

安装工具:

apt-get install smartmontools   # Debian/Ubuntu
yum install smartmontools       # CentOS/RHEL

检测:

smartctl -a /dev/sda
smartctl -H /dev/sda

关注字段:

  • Reallocated_Sector_Ct

  • Current_Pending_Sector

  • Offline_Uncorrectable

  • SMART overall-health self-assessment


5. 扫描坏块

badblocks -sv /dev/sda

注意:在线系统谨慎使用,可能导致 I/O 性能下降。建议在维护窗口执行。


6. 检查文件系统并修复

只读挂载时,先卸载(或在单用户模式执行):

umount /dev/sda2
e2fsck -f -y /dev/sda2

如果是 xfs 文件系统:

xfs_repair /dev/sda2

7. 检查磁盘控制器/RAID 状态

  • 如果是 RAID 控制器 (megacli / storcli):检查物理盘和阵列健康

  • 如果是 LSI / HBA,用 megacli -PDList -aALLstorcli /c0 show all


8. 持续监控

  • 建议安装 smartd 守护进程,定期监控硬盘健康

  • 结合 Prometheus + Node Exporter 采集磁盘 I/O 与错误指标


三、常见处理建议

  1. 临时修复

    • fsckxfs_repair 修复文件系统

    • 重新挂载为读写:

      mount -o remount,rw /
      
  2. 永久修复

    • 确认 SMART 状态 → 硬盘若存在大量坏块或 Pending sector,建议 更换硬盘

    • RAID 环境下 → 替换坏盘并重建阵列

    • 单盘环境 → 及时备份数据并更换硬盘


四、总结

  • 读写变只读:通常是文件系统检测到严重 I/O 错误,自动保护机制。

  • 日志检查:优先看 dmesgjournalctl

  • SMART/坏块检测:判断硬件健康与否。

  • 修复工具:ext4 → fsck,xfs → xfs_repair

  • 最终方案:修复只能缓解,长期稳定依赖于更换硬盘

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐