有几台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
哈希值和合盘之前一致,合盘操作完成