lvm跨盘卷合并单盘

默认分类 · 2024-05-15

有几台vmware的虚拟机挂载了很多块虚拟盘,这些虚拟盘都位于同一块物理盘中,在虚拟机中通过lvm组成一个卷。考虑到后期有将虚拟机迁移到pve的需求,多块虚拟盘导出导入比较麻烦,折腾下lvm的合盘操作,记一下笔记备用

创建测试环境

开了台新的虚拟机来测试,要从头创建一个lv来做测试
虚拟机挂了三个盘,一个系统盘,两个测试用的数据盘

[root@lvm-test ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   50G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   49G  0 part 
  └─rl-root 253:0    0   49G  0 lvm  /
sdb           8:16   0   10G  0 disk 
sdc           8:32   0   10G  0 disk 
sr0          11:0    1 1024M  0 rom  

首先需要在虚拟盘上创建pv

[root@lvm-test ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@lvm-test ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
[root@lvm-test ~]# pvdisplay    
  "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               VcrxAU-dlmi-R1kp-un3a-wWug-Cxr0-GsTYIO
   
  "/dev/sdc" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               YLDfsW-g1JD-tIRM-y9xh-qfCg-8oJ6-aiccj3

可以看到已经创建了两个pv,接下来创建vg,指定vg名称为data,vg包含刚创建的两个pv

[root@lvm-test ~]# vgcreate data /dev/sdb /dev/sdc
  Volume group "data" successfully created
[root@lvm-test ~]# vgdisplay 
  --- Volume group ---
  VG Name               data
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               qHFKmx-5neV-KI83-xsIT-fJQP-LfdS-qlndkW

再在这个vg上面创建一个lv,参数的-l可以换成-L 20G来指定lv的大小

[root@lvm-test ~]# lvcreate -n data-lv data -l 100%FREE
  Logical volume "data-lv" created.
[root@lvm-test ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/data/data-lv
  LV Name                data-lv
  VG Name                data
  LV UUID                LDb1VD-3Gbl-xGi8-hQMg-IoM3-Yj6N-KHn2bY
  LV Write Access        read/write
  LV Creation host, time lvm-test, 2024-05-15 15:16:35 +0800
  LV Status              available
  # open                 0
  LV Size                19.99 GiB
  Current LE             5118
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

格式化lv为xfs文件系统,并挂载

[root@lvm-test ~]# mkfs.xfs /dev/data/data-lv 
meta-data=/dev/data/data-lv      isize=512    agcount=4, agsize=1310208 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=5240832, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
[root@lvm-test ~]# mount /dev/data/data-lv /data/

挂载完是这样子的

[root@lvm-test ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part 
  └─rl-root     253:0    0   49G  0 lvm  /
sdb               8:16   0   10G  0 disk 
└─data-data--lv 253:1    0   20G  0 lvm  /data
sdc               8:32   0   10G  0 disk 
└─data-data--lv 253:1    0   20G  0 lvm  /data
sr0              11:0    1 1024M  0 rom  

创建一个15G的测试文件,并计算哈希值

[root@lvm-test ~]# dd if=/dev/urandom of=/data/testfile bs=10M count=1500
1500+0 records in
1500+0 records out
15728640000 bytes (16 GB, 15 GiB) copied, 71.7478 s, 219 MB/s
[root@lvm-test ~]# sha256sum /data/testfile 
a1afb66e7503bf1bc7c692735399879d0bdb8e362b5a386b6bd4c79a2807bc33  /data/testfile

合盘操作

测试环境准备好了,接下来做合盘操作
在宿主机后台添加了一块30g的新盘,用来将两块10g旧盘的数据合并

[root@lvm-test ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part 
  └─rl-root     253:0    0   49G  0 lvm  /
sdb               8:16   0   10G  0 disk 
└─data-data--lv 253:1    0   20G  0 lvm  /data
sdc               8:32   0   10G  0 disk 
└─data-data--lv 253:1    0   20G  0 lvm  /data
sdd               8:48   0   30G  0 disk 
sr0              11:0    1 1024M  0 rom  

在新添加的硬盘上创建pv,并加到同一个vg中

[root@lvm-test ~]# pvcreate /dev/sdd 
  Physical volume "/dev/sdd" successfully created. 
[root@lvm-test ~]# vgextend data /dev/sdd
  Volume group "data" successfully extended

将旧pv的数据迁移到新pv中

[root@lvm-test ~]# pvmove /dev/sdb /dev/sdd
  /dev/sdb: Moved: 0.20%
  /dev/sdb: Moved: 100.00%
[root@lvm-test ~]# pvmove /dev/sdc /dev/sdd
  /dev/sdc: Moved: 0.08%
  /dev/sdc: Moved: 100.00%
[root@lvm-test ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               data
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559
  Allocated PE          0
  PV UUID               VcrxAU-dlmi-R1kp-un3a-wWug-Cxr0-GsTYIO
   
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               data
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559
  Allocated PE          0
  PV UUID               YLDfsW-g1JD-tIRM-y9xh-qfCg-8oJ6-aiccj3
   
  --- Physical volume ---
  PV Name               /dev/sdd
  VG Name               data
  PV Size               30.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              7679
  Free PE               2561
  Allocated PE          5118
  PV UUID               kWezuB-HUNm-dfha-EBlZ-saGq-uxpt-q1w5Tb

可以看到两块旧盘pv的已分配pe都回到0了
接下来将两个旧pv从vg中移除

[root@lvm-test ~]# vgreduce data /dev/sdb
  Removed "/dev/sdb" from volume group "data"
[root@lvm-test ~]# vgreduce data /dev/sdc
  Removed "/dev/sdc" from volume group "data"
[root@lvm-test ~]# vgdisplay 
  --- Volume group ---
  VG Name               data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  19
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <30.00 GiB
  PE Size               4.00 MiB
  Total PE              7679
  Alloc PE / Size       5118 / 19.99 GiB
  Free  PE / Size       2561 / 10.00 GiB
  VG UUID               qHFKmx-5neV-KI83-xsIT-fJQP-LfdS-qlndkW

可以看到此时vg的大小已经是30g了,剩余10g大小的未分配的pe
来都来了,顺手扩容下lv和上面的xfs

[root@lvm-test ~]# lvextend /dev/data/data-lv -l +100%FREE
  Size of logical volume data/data-lv changed from 19.99 GiB (5118 extents) to <30.00 GiB (7679 extents).
  Logical volume data/data-lv successfully resized.
[root@lvm-test ~]# xfs_growfs /dev/data/data-lv 
meta-data=/dev/mapper/data-data--lv isize=512    agcount=4, agsize=1310208 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=5240832, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 5240832 to 7863296
[root@lvm-test ~]# df -h /data/
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/data-data--lv   30G   15G   16G  50% /data
[root@lvm-test ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part 
  └─rl-root     253:0    0   49G  0 lvm  /
sdb               8:16   0   10G  0 disk 
sdc               8:32   0   10G  0 disk 
sdd               8:48   0   30G  0 disk 
└─data-data--lv 253:1    0   30G  0 lvm  /data
sr0              11:0    1 1024M  0 rom  

在宿主机后台把两块旧盘抽掉

[root@lvm-test ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part 
  └─rl-root     253:0    0   49G  0 lvm  /
sdd               8:48   0   30G  0 disk 
└─data-data--lv 253:1    0   30G  0 lvm  /data
sr0              11:0    1 1024M  0 rom  

再检查一下测试文件的哈希值,确保数据完整

[root@lvm-test ~]# sha256sum /data/testfile 
a1afb66e7503bf1bc7c692735399879d0bdb8e362b5a386b6bd4c79a2807bc33  /data/testfile

哈希值和合盘之前一致,合盘操作完成

Theme Jasmine by Kent Liao