简介:
LVM 是通过将物理的磁盘或磁盘分区创建成物理卷(PV),多个物理卷添加创建为一个卷组(VG),然后在卷组的基础上创建逻辑卷(LVM),进而在逻辑卷上去创建文件系统,这种在硬盘或分区和文件系统之下的磁盘管理机制大大提高了对磁盘管理的灵活性,也是当前企业 Linux 环境下实现对磁盘分区管理的方式。 但在实际应用管理中,常常因为误操作,系统重启等原因造成卷组丢失,逻辑卷无法挂载等异常的故障,本文将逻辑卷故障处理过程给大家分享因为系统重启原因造成卷组丢失的恢复方法。
背景:
以下是以centos6系统底层为例做的LVM逻辑卷恢复.且硬盘组的是raid5的阵列.单盘也是一样的流程步骤
(一)LVM恢复步骤
1、lsblk查看列出关于块设备(如硬盘及其分区)的信息。查看pool0-storage0的LVM是否还存在
#lasblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 3.6T 0 disk
└─sda1 8:1 0 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm
sdb 8:16 0 3.6T 0 disk
└─sdb1 8:17 0 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm
sdc 8:32 1 3.6T 0 disk
└─sdc1 8:33 1 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm
sdd 8:48 1 3.6T 0 disk
└─sdd1 8:49 1 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm
2、如果存在的情况下且当前pool0-storage0的LVM逻辑卷有异常需要进行移除
PS:基本为拔插盘,替换m2加速包或者频繁非常规操作替换raid硬盘,导致lvm信息出现混乱。Lvm无法reload,需要解除lvm的报错信息并恢复lvm相关信息。
(1)pvs vgs lvs 确认卷组是否还在 还存在的话需要 vgremove pool0删除卷组
以下展示为例,VG卷还是存在的
root@test:~# pvs
PV VG Fmt Attr PSize PFree
/dev/md0 pool0 lvm2 a-- <10.92t 0
root@test:~# vgs
VG #PV #LV #SN Attr VSize VFree
pool0 1 1 0 wz--n- <10.92t 0
root@test:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
storage0 pool0 -wi-ao---- <10.92t
#pvs: 列出物理卷(PV)的信息。显示物理卷的名称(PV)、卷组(VG)、格式(Fmt)、属性(Attr)、物理大小(PSize)和可用空间(PFree)等详细信息。
#vgs: 列出卷组(VG)的信息。显示卷组的名称(VG)、物理卷数量(#PV)、逻辑卷数量(#LV)、快照数量(#SN)、属性(Attr)、卷组大小(VSize)和可用空间(VFree)等详细信息。
#lvs: 列出逻辑卷(LV)的信息。显示逻辑卷的名称(LV)、所属卷组(VG)、属性(Attr)、逻辑卷大小(LSize)、池(Pool)信息、起源(Origin)、数据使用率(Data%)、元数据使用率(Meta%)、移动信息(Move)、日志信息(Log)、拷贝同步率(Cpy%Sync)和转换信息(Convert)等详细信息。
(2)vgremove pool0移除卷组 或 vgreduce --removemissing --force poolx 如果删除卷组失败的话需要加--force强制移除
PS: poolx中的x表示数字。按自身实际情况为准
root@test:/etc/lvm/archive# vgremove pool0
Do you really want to remove volume group "pool0" containing 1 logical volumes? [y/n]: y
Logical volume "storage0" successfully removed.
Volume group "pool0" successfully removed
#
root@test:/etc/lvm/archive# lvs
root@test:/etc/lvm/archive# vgs
root@test:/etc/lvm/archive#
#vgremove pool0以后lvs的逻辑卷也会一同卸下来
PS:同理,使用lvremove /dev/pool0/storage0命令也会把VG物理卷组一同卸下来看个人习惯使用其中一条即可
(3)当移除完卷则以后敲lsblk查询挂载情况
root@test:/etc/lvm/archive# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 3.6T 0 disk
└─sda1 8:1 0 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
sdb 8:16 0 3.6T 0 disk
└─sdb1 8:17 0 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
sdc 8:32 1 3.6T 0 disk
└─sdc1 8:33 1 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
sdd 8:48 1 3.6T 0 disk
└─sdd1 8:49 1 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
#这时候看到pool0-storage0的LVM逻辑卷已经移除掉了.说明操作是成功的
(4)如果你想要移除 /dev/md0
上的 LVM 元数据,使其不再作为 LVM 的一部分,可以使用 pvremove
命令
root@test:/etc/lvm/archive# pvs
PV VG Fmt Attr PSize PFree
/dev/md0 lvm2 --- <10.92t <10.92t
root@test:/etc/lvm/archive# pvremove /dev/md0
Labels on physical volume "/dev/md0" successfully wiped.
root@test:/etc/lvm/archive# pvs
root@test:/etc/lvm/archive#
#这时候可以看到pvs是已经成功移除了.
3、恢复存储空间的vg、pv信息
由上可看到存储空间对应的 md0的vg信息已经缺失了,我们需要对存储空间的vg进行恢复。Lvm在创建的时候每一步对lvm的操作都会在/etc/lvm/archive下有快照备份。我们需要对这个目录下的快照文件选择一个来恢复。
root@test:/etc/lvm/archive# cd /etc/lvm/archive/
root@test:/etc/lvm/archive# ll
drwx------ 2 root root 4096 Mar 6 16:03 ./
drwxr-xr-x 1 root root 4096 Mar 6 14:07 ../
-rw------- 1 root root 1304 Mar 6 14:07 pool0_00000-605889447.vg
-rw------- 1 root root 1296 Mar 6 15:40 pool0_00001-1111255981.vg
-rw------- 1 root root 1276 Mar 6 15:53 pool0_00002-736100645.vg
-rw------- 1 root root 1301 Mar 6 16:00 pool0_00003-1927884094.vg
-rw------- 1 root root 1276 Mar 6 16:03 pool0_00004-265621507.vg
-rw------- 1 root root 1287 Mar 6 16:03 pool0_00005-1062707757.vg
#这些文件是逻辑卷管理(LVM)中的卷组快照(snapshot)文件。在LVM中,快照是一种可以创建文件系统或逻辑卷(LV)当前状态的只读副本的技术。这些快照文件通常用于备份或恢复数据。
(1)vi在列表中查看快照备份中,找到包含有pv、pool0、storage0的id卷组查看。
文件需要包含有三组主要信息如下:
pool0 {
id = "eEvQNI-W0aA-3v1q-Vhg3-Qx3x-IScI-kWsp2M"
pv0 {
id = "aNabPN-iAHw-v2i8-QEzh-IfNu-bOFM-fMGxRG"
storage0 {
id = "ajPRz5-ulb8-ErXN-Ohdc-eCo1-zAqz-yyHF0R"
(2)这时候我们开始操作恢复pv
root@test:/etc/lvm/archive# pvcreate --uuid "aNabPN-iAHw-v2i8-QEzh-IfNu-bOFM-fMGxRG" --restorefile /etc/lvm/archive/pool0_00000-605889447.vg /dev/md0
WARNING: Couldn't find device with uuid aNabPN-iAHw-v2i8-QEzh-IfNu-bOFM-fMGxRG.
Physical volume "/dev/md0" successfully created.
root@test:/etc/lvm/archive# pvs
PV VG Fmt Attr PSize PFree
/dev/md0 lvm2 --- <10.92t <10.92t
#这时候看到pvs是已经被恢复完成了,以下是命令的解释
这条命令是用于在逻辑卷管理(LVM)中恢复一个物理卷(PV)的元数据。这个操作通常在物理卷的元数据损坏或者被意外清除后执行。命令的各个部分如下:
pvcreate:这是执行物理卷创建的命令。在这种情况下,它被用来恢复物理卷的元数据。
---uuid:这个选项后面跟着的是物理卷的UUID(通用唯一标识符)。UUID是LVM用来唯一标识物理卷的一串字符。
"aNabPN-iAHw-v2i8-QEzh-IfNu-bOFM-fMGxRG":这是想要恢复的物理卷的UUID。
--restorefile:这个选项指定了一个文件,该文件包含了物理卷的备份元数据。在LVM中,当你创建物理卷时,系统会创建一个包含物理卷元数据的备份文件,以便在需要时恢复。
/etc/lvm/archive/pool0_00000-605889447.vg:这是恢复文件的路径。这个文件名通常包含了卷组的名称和创建时间戳,以及 .vg 扩展名,这是LVM备份文件的标识。
/dev/md0:这是你想要恢复元数据的物理设备。在这个例子中,md0 是一个设备名,它可能代表一个MD(多设备)设备,这是一个由多个物理硬盘组成的逻辑设备。也有可能是sdb或sda1具体按实际情况而定
(3)上面恢复完pv以后,现在我们操作恢复vg
root@test:/etc/lvm/archive# vgcfgrestore -f /etc/lvm/archive/pool0_00000-605889447.vg pool0
Restored volume group pool0.
root@test:/etc/lvm/archive# vgs
VG #PV #LV #SN Attr VSize VFree
pool0 1 1 0 wz--n- <10.92t 0
root@test:/etc/lvm/archive# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
storage0 pool0 -wi------- <10.92t
root@test:/etc/lvm/archive#
#这是看到vgs和lvs都被恢复了,以下是对vg恢复的命令解释:
vgcfgrestore 命令是 LVM(逻辑卷管理)中用于恢复卷组配置的工具。当卷组配置丢失或损坏时,可以使用这个命令来从备份中恢复。这个命令通常在系统恢复或迁移过程中使用。
vgcfgrestore:这是执行卷组配置恢复的命令。
-f:这个选项后面跟着的是卷组配置备份文件的路径。
/etc/lvm/archive/pool0_00000-605889447.vg:这是卷组配置备份文件的完整路径。
pool0:这是你想要恢复的卷组的名称。
(4)执行/etc/init.d/lvm2 restart重新激活所有lvm的状态
root@test:/etc/lvm/archive# /etc/init.d/lvm2 restart
0 logical volume(s) in volume group "pool0" now active
Found volume group "pool0" using metadata type lvm2
1 logical volume(s) in volume group "pool0" now active
PS:如果是centos7或debian系统可以执行这两个命令重启LVM服务
systemctl restart lvm2-lvmetad.service
systemctl restart lvm2-lvmpolld.service
#执行完以后lsblk查看是否有挂载上.
root@test:/etc/lvm/archive# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 3.6T 0 disk
└─sda1 8:1 0 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm /mnt/60d5846b-716f-489a-8f74-94bdaacea780
sdb 8:16 0 3.6T 0 disk
└─sdb1 8:17 0 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm /mnt/60d5846b-716f-489a-8f74-94bdaacea780
sdc 8:32 1 3.6T 0 disk
└─sdc1 8:33 1 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm /mnt/60d5846b-716f-489a-8f74-94bdaacea780
sdd 8:48 1 3.6T 0 disk
└─sdd1 8:49 1 3.6T 0 part
└─md0 9:0 0 10.9T 0 raid5
└─pool0-storage0 252:0 0 10.9T 0 lvm /mnt/60d5846b-716f-489a-8f74-94bdaacea780
到这里已是完整结束, 操作需要对linux系统的xfs文件系统分区以及系统挂载硬盘信息有一定的基础和了解.希望对大家有帮助