删除数据盘上的lvm
实战-删除数据盘上的lvm-20250725(测试成功)
问题
2025年7月25日测试。
bash
有如下环境:
一台linux机器,有12块数据盘,一块系统盘。12块数据盘做了lvm,加进了一个vg00卷组。 此时我手动重装系统后,发现12块数据盘还存在老分区,老卷组还在,请问如何删除老卷组及格式化这12个数据盘?
环境:
回答
gpt回答
在重装系统后清理旧的LVM卷组(VG)和分区,并重新格式化12块数据盘的步骤如下:
步骤1:确认当前磁盘和LVM状态
bash
# 查看所有磁盘信息(确认12块数据盘设备名,如/dev/sdb, /dev/sdc等)
lsblk -f
# 检查残留的LVM信息(查看旧VG是否仍被系统识别)
vgs
pvs
lvs
步骤2:删除旧LVM配置(若VG仍存在)❤️
bash
# 1. 停用旧卷组(假设旧VG名为vg00)
vgchange -a n vg00 # 停用VG
# 2. 删除逻辑卷(LV)
lvremove /dev/vg00/* # 删除VG下所有LV
#实际配置过程中,这一步骤没做的,提示找不到vg00,但是不影响效果!!!
# 3. 删除卷组(VG)
vgremove vg00
# 4. 删除物理卷(PV)
pvremove /dev/sd[b-m]1 # 假设数据盘为sdb-sdm,且原有分区为sdX1
步骤3:彻底清除旧分区表
bash
# 使用wipefs擦除磁盘签名(对所有数据盘操作,例如sdb-sdm)
for disk in /dev/sd{b..m}; do
wipefs -a $disk # 清除所有文件系统、RAID、LVM签名
echo "已清除 $disk 的签名"
done
# 验证签名是否清除(应无输出)
blkid /dev/sd{b..m}
效果:(符合预期。)
步骤4:重新分区(可选)
如果需要重新分区(例如直接使用整盘不分区,或创建新分区):
bash
# 方案A:直接使用整盘(推荐LVM场景)
for disk in /dev/sd{b..m}; do
echo -e "g\nn\n\n\n\nw\n" | fdisk $disk # 创建GPT分区表和一个完整分区
partprobe $disk
done
# 方案B:手动交互式分区(以/dev/sdb为例)
fdisk /dev/sdb
# 交互命令:g(创建GPT表)→ n(新建分区)→ 回车(默认全盘)→ w(保存)
步骤5:创建新文件系统(格式化)
bash
# 示例:格式化为ext4(对每个数据盘的分区,如/dev/sdb1)
for partition in /dev/sd{b..m}1; do
mkfs.ext4 -F $partition
echo "已格式化 $partition 为ext4"
done
# 或格式化为XFS(高性能场景)
for partition in /dev/sd{b..m}1; do
mkfs.xfs -f $partition
done
关键注意事项
数据安全
- 操作前确认磁盘设备名(
lsblk
输出),避免误操作系统盘(通常是sda
)。 - 如果数据需保留,务必先备份!
- 操作前确认磁盘设备名(
LVM残留处理
- 若旧VG仍激活,需先停用(
vgchange -a n
),否则删除会失败。
- 若旧VG仍激活,需先停用(
多路径设备
如果使用多路径设备(如/dev/mapper/mpath*
),需通过multipath -ll
确认并清理。自动化脚本
可保存以下完整脚本为clean_disks.sh
:bash#!/bin/bash VG_NAME="vg00" DISKS=(/dev/sd{b..m}) # 停用并删除旧LVM if vgs $VG_NAME &>/dev/null; then vgchange -a n $VG_NAME lvremove -f /dev/$VG_NAME/* vgremove -f $VG_NAME pvremove -f ${DISKS[@]}1 fi # 清除磁盘 for disk in ${DISKS[@]}; do wipefs -a $disk echo -e "g\nn\n\n\n\nw\n" | fdisk $disk mkfs.xfs -f ${disk}1 done
验证结果
bash
# 检查无残留VG/VG
vgs; pvs; lvs
# 确认新文件系统
lsblk -f
执行完毕后,12块数据盘将处于干净状态,可重新用于LVM或直接挂