fio测试导致磁盘LVM结构损坏故障处置办法

一、基础信息

  • 故障磁盘:/dev/sdb,容量500G
  • 原有架构:磁盘分区sdb1作为LVM物理卷,卷组data_vg,逻辑卷lv_data,挂载目录/data
  • 故障诱因:执行FIO磁盘压力测试命令
  • 处置结果:已完成磁盘重置,磁盘恢复为纯净可用状态

二、故障发生经过

运维人员为测试磁盘读写性能,执行如下FIO测试命令:

bash 复制代码
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=32k -size=10G -numjobs=1 -runtime=1000 -group_reporting -name=mytest

命令以整块物理磁盘/dev/sdb为写入对象,执行32K单线程随机写测试。测试完成后,磁盘原有分区标识、LVM元数据被破坏,磁盘无法正常识别原有逻辑卷结构。

三、故障现象

  1. 磁盘分区标签损坏,执行分区删除命令提示unrecognised disk label,系统无法识别原有分区格式;
  2. LVM物理卷、卷组、逻辑卷结构彻底失效;
  3. 磁盘硬件无物理损坏,盘体可正常被系统识别。

四、故障原理分析

  1. 操作对象选择错误 本次测试直接针对**整块裸磁盘/dev/sdb**写入,磁盘最前端扇区存放分区表、LVM签名、PV元数据等核心引导信息,FIO随机写入直接覆盖该区域。

  2. 数据影响 磁盘无重要业务数据,未造成有效数据丢失。

五、故障处置解决步骤(真实执行操作)

步骤1:卸载故障挂载目录

终止目录占用,卸载异常挂载点

bash 复制代码
umount /data

步骤2:清理失效LVM全套结构

依次删除损坏的逻辑卷、卷组、物理卷标识

bash 复制代码
[root@proxy-001 /]# # 1. 停用逻辑卷
[root@proxy-001 /]# lvchange -an /dev/data_vg/lv_data
 删除物理卷(如果报错说明签名已坏,直接跳过)
pvremove /dev/sdb1 -y[root@proxy-001 /]# 
[root@proxy-001 /]# # 2. 删除逻辑卷(如果报错说明已经损坏,直接跳过)
[root@proxy-001 /]# lvremove /dev/data_vg/lv_data -y
  Logical volume "lv_data" successfully removed
[root@proxy-001 /]# 
[root@proxy-001 /]# # 3. 删除卷组(如果报错说明已经损坏,直接跳过)
[root@proxy-001 /]# vgremove data_vg -y
  Volume group "data_vg" successfully removed
[root@proxy-001 /]# 
[root@proxy-001 /]# # 4. 删除物理卷(如果报错说明签名已坏,直接跳过)
[root@proxy-001 /]# pvremove /dev/sdb1 -y
  Labels on physical volume "/dev/sdb1" successfully wiped.

步骤3:尝试删除旧分区(触发报错)

执行分区删除命令,因磁盘分区表已损坏,触发报错

bash 复制代码
parted /dev/sdb rm 1 quit

报错信息:

javascript 复制代码
Error: /dev/sdb: unrecognised disk label

步骤4:刷新内核分区表

执行命令刷新系统分区缓存,旧分区sdb1自动消失

bash 复制代码
partprobe /dev/sdb

步骤5:重置磁盘分区标签

清除损坏分区信息,重新初始化GPT磁盘标签

bash 复制代码
parted /dev/sdb mklabel gpt -y

六、磁盘结构前后状态对比

1. 故障发生前 lsblk 输出

dart 复制代码
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                   8:0    0  100G  0 disk 
└─sda1                8:1    0  100G  0 part /
sdb                   8:16   0  500G  0 disk 
└─sdb1                8:17   0  500G  0 part 
  └─data_vg-lv_data 253:0    0  500G  0 lvm  /data
sr0                  11:0    1  458K  0 rom

2. 处置修复后 lsblk 输出

ruby 复制代码
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk 
└─sda1   8:1    0  100G  0 part /
sdb      8:16   0  500G  0 disk 
sr0     11:0    1  458K  0 rom  

七、安全的FIO性能测试方案(无损坏风险)

推荐测试命令

bash 复制代码
# 32K/单线程/不带缓存/随机写(绝对安全,不损坏磁盘)
fio -filename=/data/test-rw -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=32k -size=10G -numjobs=1 -runtime=1000 -group_reporting -name=mytest

安全性说明

  1. 是否损坏磁盘/分区/LVM? ✅ 完全不会损坏,属于生产环境标准安全测试方式。
  2. 核心原理 命令写入目标为 /data/test-rw,属于文件系统内普通测试文件,仅在业务数据区域读写,不会触碰磁盘分区表、LVM元数据、磁盘头部关键系统区域。
  3. 后续处理 测试结束后删除测试文件即可释放存储空间,不会对磁盘结构、系统配置产生残留影响。

八、最终恢复结果

  1. 磁盘状态:/dev/sdb 可被系统正常识别,损坏的分区标签与老旧逻辑结构已全部清除;
  2. 结构状态:失效LVM架构彻底清理,磁盘重置为纯净裸盘状态;
  3. 使用状态:磁盘可正常新建分区、格式化、挂载与读写,存储基础功能完全恢复;
  4. 整体结论:磁盘逻辑结构故障全部修复,可采用安全方式开展性能检测与业务使用。

九、事后总结与操作规范

  1. 故障核心原因 错误将**整块物理磁盘/dev/sdb**作为FIO测试对象,覆写磁盘核心引导与元数据,属于运维操作不当引发的逻辑故障。

  2. 安全操作准则 执行磁盘压力测试时,禁止直接读写裸盘设备/dev/sdX,优先选择文件系统内普通文件作为测试载体。

  3. 测试方式风险对比

    测试方式 风险等级 安全性判定
    直接读写裸盘 /dev/sdb 高危,易破坏分区、LVM结构 ❌ 严禁使用
    读写目录内测试文件 /data/test-rw 无结构损坏风险 ✅ 推荐使用
相关推荐
excel9 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记10 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序10 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
属于自己的天空10 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端
Tokenfree10 小时前
给大模型调用加一个熔断器:60 行代码,三个阈值
后端
Jason_chen10 小时前
Linux 进程调度器深入解析与实时性优化指南(基于 Linux 5.10+)
后端
1360967572310 小时前
三个 Agent 干同一个活,职责边界到底该怎么划
后端
房西杭10 小时前
GM 指令:修改玩家属性
后端
胡写代码10 小时前
删掉的数据还占着唯一键:逻辑删除 + 唯一索引的四次取舍
spring boot·后端
IT_陈寒10 小时前
React的useEffect依赖数组把我坑惨了
前端·人工智能·后端