前言

最近重装pve系统,把系统盘从32G的硬盘换成了120GB的硬盘。

因为旧的pve系统盘上还有一个虚拟机备份,所以准备直接把旧pve系统盘插到新pve主机上,然后挂载旧硬盘上的分区把备份文件复制到新硬盘的分区上。

但实际操作中碰到了两个问题:

  1. pve系统盘是lvm分区而不是传统分区,无法直接挂载
  2. 新旧两个pve系统盘下的lvm volume group的名字都叫做pve,出现了volume group重名的问题

在网上找了一些资料和文章,最后当然成功解决的问题,顺便在此做个简单记录。

  • tips: volume group以下都简称vg

准备工作

把旧的系统盘插到pve主机上之后,先通过lsblk查看硬盘信息

# 输入命令
root@pve:~# lsblk

# 显示硬盘信息
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS

## sda是现在的系统盘
sda            8:0    0 119.2G  0 disk 
├─sda1         8:1    0  1007K  0 part 
├─sda2         8:2    0     1G  0 part 
└─sda3         8:3    0 118.2G  0 part 
  ├─pve-swap 252:0    0   7.6G  0 lvm  [SWAP]
  └─pve-root 252:1    0 110.6G  0 lvm  /

# 这是老的pve系统盘,有三个分区
sdd            8:48   0  29.8G  0 disk 
├─sdd1         8:49   0  1007K  0 part 
├─sdd2         8:50   0   512M  0 part 
└─sdd3         8:51   0  29.3G  0 part 

如果是传统分区模式,只需要挂载/dev/sdd3就行了,但如果直接挂载/dev/sdd3分区,系统提示错误信息:无法识别lvm分区。

root@pve:/mnt# mount /dev/sdd3 /mnt/tmp/
mount: /mnt/tmp: unknown filesystem type 'LVM2_member'.
       dmesg(1) may have more information after failed mount system call.

lvm分区模式正确挂载语法路径应该是/dev/volume_group_name/logic_volume_name,所以接下去就是要搞清楚lvm分区的volume group namelogic volume name


挂载lvm

第一步:查看volume group的名字

输入命令pvs查看

root@pve:~# pvs
  WARNING: VG name pve is used by VGs F3g8rh-HTJn-2Hay-qo4x-uQel-iyq2-sg7PuW and fXyl8f-Xs3x-TLPv-aAeM-H2jU-0KdF-jbMPZH.
  Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
  PV         VG  Fmt  Attr PSize    PFree
  /dev/sda3  pve lvm2 a--  <118.24g    0 
  /dev/sdd3  pve lvm2 a--    29.31g    0

其中VG一栏对应的就是volume group名字

  • 注意:
  • 这里会有一个衍生问题,新旧两个pve系统盘中的volume group的名称都叫做pve
  • 系统提示两个vg重名,并显示两个uuid,要求你对vg进行重命名以做区分。
  • 但是两个vg和两个uuid并没有一一对应,无法判断uuid和vg的对应关系。

第二步:查看volume group对应的uuid

这里需要用到命令vgdisplay

第三步:重命名volume group

搞清楚uuid和vg的对应关系以后,就可以对vg进行重名了,语法如下:

vgrename <uuid> <new vg name>

重命名成功以后,再用pvs查看当前系统中volume group的信息,可以看到旧的pve系统中vg已经被改为pve_old

root@pve:~# pvs
  PV         VG      Fmt  Attr PSize    PFree
  /dev/sda3  pve     lvm2 a--  <118.24g    0 
  /dev/sdd3  pve_old lvm2 a--    29.31g    0

第四步:查看volume group中的逻辑卷并完成挂载

这一步需要用到命令lvdisplay,语法如下:

lvdisplay <vg name>

可以看到在pve_old这个vg下,存在两个逻辑分区(logic volume),一个名字是swap,另一个名字是root。

我们需要的是root分区,复制它的LV Path,也就是/dev/pve_old/root,这就是它的挂载路径了。

mount /dev/pve_old/root /mnt/tmp

可以看到已经成功挂载了lvm分区。

  • 注意事项:
  • vg在重命名之后,有可能LV Status的状态是unavaliable,这时候无法通过mount命令挂载
  • 如果碰上unavaliable问题,可以试着重新插拔旧pve系统盘,也就是pve_old,确认LV status avaliable以后再挂载

🎉


参考文章

  1. Linux有问必答:如何在Linux中直接挂载LVM分区
  2. vgrename命令 – 重命名卷组
  3. linux如何查看vg uuid

喝杯奶茶