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 无结构损坏风险 ✅ 推荐使用
相关推荐
小小前端仔LC10 小时前
Node.js + LangChain +React:搭建个人知识库(四)- 把向量和文件切块存入mysql中
后端·node.js
神奇小汤圆10 小时前
Agent 框架别急着乱学:先用 LangChain 搞懂 7 个基本模块
后端
神奇小汤圆10 小时前
一次线上故障带你看懂 MySQL InnoDB 缓冲池
后端
啷里格啷10 小时前
第三章 Fast-DDS核心源码导读与流程拆解
后端·架构
爱编程的小新☆10 小时前
Spring-AI入门
java·后端·spring
蝎子莱莱爱打怪10 小时前
👋🏻👋🏻再见,拉勾网——那个"最懂互联网人"的招聘平台倒了😭
前端·后端·招聘
用户2986985301411 小时前
Java 获取 Word 文档中修订记录的实现方法
java·后端
TheRouter11 小时前
PromptCaching 工程实践:把LLM 调用成本砍掉80%
java·后端·spring·ai
Gopher_HBo11 小时前
Go pprof性能剖析
后端