一、基础信息
- 故障磁盘:
/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元数据被破坏,磁盘无法正常识别原有逻辑卷结构。
三、故障现象
- 磁盘分区标签损坏,执行分区删除命令提示
unrecognised disk label,系统无法识别原有分区格式; - LVM物理卷、卷组、逻辑卷结构彻底失效;
- 磁盘硬件无物理损坏,盘体可正常被系统识别。
四、故障原理分析
-
操作对象选择错误 本次测试直接针对**整块裸磁盘
/dev/sdb**写入,磁盘最前端扇区存放分区表、LVM签名、PV元数据等核心引导信息,FIO随机写入直接覆盖该区域。 -
数据影响 磁盘无重要业务数据,未造成有效数据丢失。
五、故障处置解决步骤(真实执行操作)
步骤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
安全性说明
- 是否损坏磁盘/分区/LVM? ✅ 完全不会损坏,属于生产环境标准安全测试方式。
- 核心原理 命令写入目标为
/data/test-rw,属于文件系统内普通测试文件,仅在业务数据区域读写,不会触碰磁盘分区表、LVM元数据、磁盘头部关键系统区域。 - 后续处理 测试结束后删除测试文件即可释放存储空间,不会对磁盘结构、系统配置产生残留影响。
八、最终恢复结果
- 磁盘状态:
/dev/sdb可被系统正常识别,损坏的分区标签与老旧逻辑结构已全部清除; - 结构状态:失效LVM架构彻底清理,磁盘重置为纯净裸盘状态;
- 使用状态:磁盘可正常新建分区、格式化、挂载与读写,存储基础功能完全恢复;
- 整体结论:磁盘逻辑结构故障全部修复,可采用安全方式开展性能检测与业务使用。
九、事后总结与操作规范
-
故障核心原因 错误将**整块物理磁盘
/dev/sdb**作为FIO测试对象,覆写磁盘核心引导与元数据,属于运维操作不当引发的逻辑故障。 -
安全操作准则 执行磁盘压力测试时,禁止直接读写裸盘设备
/dev/sdX,优先选择文件系统内普通文件作为测试载体。 -
测试方式风险对比
测试方式 风险等级 安全性判定 直接读写裸盘 /dev/sdb高危,易破坏分区、LVM结构 ❌ 严禁使用 读写目录内测试文件 /data/test-rw无结构损坏风险 ✅ 推荐使用