分类
碎碎念

记录一次恢复 LVM 分区过程

最新想把一个项目丢到 Linux 上运行,出于懒惰的目的,想着尝试在在 xfs 文件系统中开启 case insensitive 然后丢到上面尝试运行。结果未看明白别人的文章说明,直接运行了 lvreduce -L 5G /dev/mapper/centos-root 导致跟目录被活生生压缩成 5G 空间,从执行成功的那一刻起,ssh 被中断,宝塔控制面板异常退出,各种业务中断等……
随后开始在各个搜索引擎搜索如何恢复分区,功夫不负有心人,在 StackOverflow 找到一篇类似的文章,随即让服务商帮忙增加硬盘并安装系统,但是进入系统后却发现并不是那么简单的一个事情。

服务商使用了统一镜像(毕竟没有哪一个服务商用 ISO 进行给你慢悠悠安装系统),所以系统 VG 名称都是一样,比如说我使用的这家服务商他们的 CentOS 系统则统一命名为 centos,这导致了旧盘并没有被正确挂载上去,随后在开源中国找到这篇文章关于如何挂载 LVM 分区,可能是文章发布时间比较久远,导致了文章中的用法与目前用法不一样,这里附上我实际操作的过程。
先使用 vgscanlvscan 查看 LVM 分区命名和挂载情况,由于服务商使用了统一命名,导致旧盘系统并没有自动挂载。

vgscan

Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2
Found volume group "centos" using metadata type lvm2

lvscan

inactive '/dev/centos/swap' [<7.88 GiB] inherit
inactive '/dev/centos/root' [5.00 GiB] inherit
ACTIVE '/dev/centos/swap' [<7.88 GiB] inherit
ACTIVE '/dev/centos/home' [1.76 TiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit

尝试按照文章的 vgdisplay 命令查看 LVM 分区情况,系统直接提示存在多个相同名称……

vgdisplay centos

Multiple VGs found with the same name: skipping centos
Use --select vg_uuid= in place of the VG name.

这里其实不用带上 VG 名称就可以看到各个硬盘的情况。

vgdisplay

--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.76 TiB
PE Size 4.00 MiB
Total PE 461315
Alloc PE / Size 3296 / <12.88 GiB
Free PE / Size 458019 / <1.75 TiB
VG UUID Wkxyl3-C6MW-0hD6-39Bm-IlUG-i6yu-aTKoOw

--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.82 TiB
PE Size 4.00 MiB
Total PE 476675
Alloc PE / Size 476674 / <1.82 TiB
Free PE / Size 1 / 4.00 MiB
VG UUID aPaDJv-9aSq-7ZmC-92Ap-1LU5-dzv8-XWi94C

很好,接下来需要执行 vgrename 这条命令以重命名其中一个硬盘,这里比较建议重命名新装硬盘而不是旧盘。

vgrename Wkxyl3-C6MW-0hD6-39Bm-IlUG-i6yu-aTKoOw linux

Processing VG centos because of matching UUID Wkxyl3-C6MW-0hD6-39Bm-IlUG-i6yu-aTKoOw
Volume group "Wkxyl3-C6MW-0hD6-39Bm-IlUG-i6yu-aTKoOw" successfully renamed to "linux"

很好,成功重命名了旧盘的 VG 名称……

vgscan

Reading volume groups from cache.
Found volume group "linux" using metadata type lvm2
Found volume group "centos" using metadata type lvm2

接下来执行一下 vgchange 试一下挂载 LVM 分区

vgchange -ay linux

2 logical volume(s) in volume group "linux" now active

果然挂载成功了!

lvscan

ACTIVE '/dev/linux/swap' [<7.88 GiB] inherit
ACTIVE '/dev/linux/root' [5.00 GiB] inherit
ACTIVE '/dev/centos/swap' [<7.88 GiB] inherit
ACTIVE '/dev/centos/home' [1.76 TiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit

服务器当时被我合并成一个主分区,基本上满足 StackOverflow 所列举条件,直接跑一下合并命令。

lvextend --extents +100%FREE /dev/linux/root

Size of logical volume linux/root changed from 5.00 GiB (1280 extents) to 1.75 TiB (459299 extents).
Logical volume linux/root successfully resized.

合并成功了!

mount -o ro /dev/linux/root /mnt/sdb1
cd /mnt/sdb1
ll

total 344
lrwxrwxrwx 1 root root 7 May 11 2018 bin -> usr/bin
drwxr-xr-x. 2 root root 6 May 1 2018 boot
drwxr-xr-x. 2 root root 6 May 1 2018 dev
-rw-r--r-- 1 root root 304056 Jul 10 2018 dump.rdb
drwxr-xr-x. 92 root root 8192 Feb 7 13:40 etc
drwxr-xr-x 4 root root 116 Jul 16 2018 home
lrwxrwxrwx 1 root root 7 May 11 2018 lib -> usr/lib
lrwxrwxrwx 1 root root 9 May 11 2018 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 4 root root 44 Feb 7 13:40 opt
drwxr-xr-x 2 root root 39 May 1 2018 patch
drwxr-xr-x. 2 root root 6 May 1 2018 proc
dr-xr-x---. 15 root root 4096 Feb 26 01:38 root
drwxr-xr-x. 2 root root 6 May 1 2018 run
lrwxrwxrwx 1 root root 8 May 11 2018 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
drwxr-xr-x. 2 root root 6 May 1 2018 sys
drwxrwxrwt. 9 root root 20480 Feb 26 01:49 tmp
drwxr-xr-x. 14 root root 166 Jul 13 2018 usr
drwxr-xr-x. 20 root root 4096 May 19 2018 var
drwxr-xr-x 7 root root 83 May 29 2018 www

这次挂载居然也成功了!初步检查一下目录,貌似是完整的,白天的时候再让服务商把旧盘挂回去测试一下。

“记录一次恢复 LVM 分区过程”上的一条回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据