记录一次恢复 LVM 分区过程

最新想把一个项目丢到 Linux 上运行,出于懒惰的目的,想着尝试在在 xfs 文件系统中开启 case insensitive 然后丢到上面尝试运行。结果未看明白别人的文章说明,直接运行了 lvreduce -L 5G /dev/mapper/centos-root 导致跟目录被活生生压缩成 5G 空间,从执行成功的那一刻起,ssh 被中断,宝塔控制面板异常退出,各种业务中断等……
随后开始在各个搜索引擎搜索如何恢复分区,功夫不负有心人,在 StackOverflow 找到一篇类似的文章,随即让服务商帮忙增加硬盘并安装系统,但是进入系统后却发现并不是那么简单的一个事情。
服务商使用了统一镜像(毕竟没有哪一个服务商用 ISO 进行给你慢悠悠安装系统),所以系统 VG 名称都是一样,比如说我使用的这家服务商他们的 CentOS 系统则统一命名为 centos,这导致了旧盘并没有被正确挂载上去,随后在开源中国找到这篇文章关于如何挂载 LVM 分区,可能是文章发布时间比较久远,导致了文章中的用法与目前用法不一样,这里附上我实际操作的过程。
先使用 vgscanlvscan 查看 LVM 分区命名和挂载情况,由于服务商使用了统一命名,导致旧盘系统并没有自动挂载。

[[email protected] ~]# vgscan
  Reading volume groups from cache.
  Found volume group "centos" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2
[[email protected] ~]# 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 分区情况,系统直接提示存在多个相同名称……

[[email protected] ~]# vgdisplay centos
  Multiple VGs found with the same name: skipping centos
  Use --select vg_uuid=<uuid> in place of the VG name.

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

[[email protected] ~]# 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 这条命令以重命名其中一个硬盘,这里比较建议重命名新装硬盘而不是旧盘。

[[email protected] ~]# 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 名称……

[[email protected] ~]# vgscan
  Reading volume groups from cache.
  Found volume group "linux" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2

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

[[email protected] ~]# vgchange -ay linux
  2 logical volume(s) in volume group "linux" now active

如果过载成功了!

[[email protected] ~]# 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 所列举条件,直接跑一下合并命令。

[[email protected] ~]# 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.

合并成功了!

[[email protected] ~]# mount -o ro /dev/linux/root /mnt/sdb1
[[email protected] ~]# cd /mnt/sdb1
[[email protected] 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

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

加入对话

1条评论

留下评论

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

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

%d 博主赞过: