服务器磁盘只读/故障排

目录

初步诊断

检查挂载状态

检查内核报错日志

交互式读写测试

进入目标目录

读取权限验证

创建目录测试(写权限初探)

文件写入深度测试

数据完整性验证

清理测试数据

结果判断与行动

高危故障(只读且伴硬件错误)

[严重故障(IO Hang/假死)](#严重故障(IO Hang/假死))

中高危故障(仅只读报错)


初步诊断

检查挂载状态

确认目标分区是否已被内核强制挂载为"只读"(ro)。

执行命令:

复制代码
mount
mount | grep <设备名>

注:请将 <设备名>替换为实际设备,如 sdb1, vda2 等。若不确定设备名,可先执行 *df -h*查看。

结果判读:

正常 :输出中包含 (rw,...),表示读写权限正常。

示例:/dev/sdb1 on /data type ext4 (rw,relatime,data=ordered)

异常 :输出中包含 (ro,...),表示内核已将该文件系统强制切换为只读模式。

示例:/dev/sdb1 on /data type ext4 (ro,relatime,data=ordered)

含义:通常由底层硬件错误、文件系统元数据损坏或 I/O 超时触发,是一种保护机制。

检查内核报错日志

查看内核环形缓冲区(dmesg),确认是否有硬件错误、文件系统错误或 I/O 超时导致只读。

复制代码
dmesg | tail -30 | grep -i "<设备名>|ext4|xfs|read-only|I/O error|Buffer I/O error|remounting"

注:若需查看更多历史日志,可将 tail -30**改为 tail -100*。*

重点关注关键词:

  • Buffer I/O error on device <设备名>:表明底层块设备读写失败。
  • EXT4-fs errorXFS Internal error:文件系统层面检测到元数据或数据结构损坏。
  • remounting filesystem read-only:内核主动将文件系统重新挂载为只读。
  • I/O timeouthung task:可能暗示存储后端响应超时或假死(IO Hang)。

操作要求: 若发现上述错误,请完整记录错误信息(含时间戳、设备名、错误代码),作为后续故障定界依据。

交互式读写测试

此阶段涉及写操作。请务必确认已完成初步诊断,并评估对当前运行业务的影响。建议在业务低峰期操作。 假设目标挂载点为 <挂载点>(例如:/data/mnt/disk1)。

进入目标目录

复制代码
cd <挂载点>

现象分析与应对:

正常:成功进入目录,命令提示符变更。

报错 No such file or directory:挂载点路径错误或未正确挂载。请立即执行 df -h 重新确认路径。

命令卡住(无响应):底层存储可能已发生 IO Hang(假死)。立即停止操作,不要尝试 Ctrl+C,直接跳转至文末"结果判断与行动"中的"严重故障"项。

读取权限验证

复制代码
ls -l

目的 :确认能否列出文件列表,验证基础读取能力。
正常:快速返回文件列表。

报错Permission denied(权限问题)或 Input/output error(磁盘故障)。

命令卡住:文件系统可能已完全挂死。参照上一步"命令卡住"处理。

创建目录测试(写权限初探)

复制代码
mkdir test_dir_$(date +%s)

注:使用时间戳避免文件名冲突。

正常 :无输出,直接返回命令提示符。可通过 ls -ld test_dir_* 确认目录已创建。

故障 - 只读 :报错 mkdir: cannot create directory '...': Read-only file system。结论:文件系统确认为只读。

故障 - IO Hang:命令长时间卡住(超过 10-30 秒),光标闪烁但无反应。结论:底层存储响应超时,疑似严重硬件故障。

文件写入深度测试

前提 :仅在上一步(创建目录)成功的情况下执行。

复制代码
echo "disk_write_test_ok_$(date +%s)" > test_file_$(date +%s).txt

正常:无输出,直接返回命令提示符。

故障 - 只读 :报错 bash: ...: Read-only file system

故障 - I/O 错误 :报错 ...: Input/output error。含义:写入请求被底层设备拒绝。

故障 - IO Hang:命令卡住,无输出也无报错。含义:存储系统假死。

数据完整性验证

仅在上一步(文件写入)看似成功(无报错)的情况下执行。

复制代码
ls -l test_file_*.txt
cat test_file_*.txt

结论判读:

完全正常ls 显示文件,cat 正确显示内容 disk_write_test_ok_...。说明读写功能正常,之前告警可能是瞬时抖动。

文件存在但内容为空/乱码:写入过程发生截断或损坏,文件系统存在隐患。

文件不存在 :上一步的"无输出"是假象,实际写入失败。需结合 dmesg 再次确认。

清理测试数据

重要:测试完成后,务必清理产生的垃圾文件。

复制代码
rm -rf test_dir_* test_file_*.txt
ls -l | grep test_

结果判断与行动

根据上述测试结果,对照下表判断故障等级并采取行动:

高危故障(只读且伴硬件错误)

现象mount 显示 (ro,...)dmesgI/O errorremounting read-only

行动 :立即通知运维/存储团队。准备数据备份方案(若能读取)。严禁重启,等待专业介入尝试修复文件系统或更换硬盘。

严重故障(IO Hang/假死)

现象cdlsmkdirecho 命令卡住无响应。

行动最高优先级 ,表明存储子系统假死。立即上报,提供 dmesghung task 相关日志。评估是否需要隔离该节点,防止影响集群其他服务。通常需要云厂商或硬件供应商介入排查底层存储链路。

中高危故障(仅只读报错)

现象mkdirecho 报错 Read-only file system,但命令未卡住。

行动 :文件系统已自我保护。尝试卸载后重新挂载(umount + mount),仅限非核心业务且有风险意识时操作。若重挂失败,需运行 fsck 修复(必须卸载后执行,生产环境需谨慎)。若频繁发生,建议更换磁盘。

相关推荐
没有bug.的程序员2 小时前
Spring Boot 与 MyBatis-Plus 批量插入的生死狙击
java·spring boot·后端·mybatis·plus·批量插入
马猴烧酒.2 小时前
【Java复习|Lambda表达式】Java Lambda 表达式、函数式接口与匿名内部类:从起源到原理
java·开发语言·ide·笔记·python·spring
yy_xzz2 小时前
【Linux开发】03 TCP 网络编程中的数据边界问题与解决方案
linux·网络·tcp/ip
hutengyi2 小时前
Redis基础——1、Linux下安装Redis(超详细)
linux·数据库·redis
yingzicat2 小时前
局域网内建立NTP服务器
运维·服务器
wenlonglanying2 小时前
springboot与springcloud对应版本
java·spring boot·spring cloud
LeocenaY2 小时前
Linux 内核 I/O栈 总结
linux·运维·服务器
稻草猫.2 小时前
Spring统一功能处理
java·后端·spring