1. 名词解释
什么是LVM?
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
英文缩写 | 英文解释 | 中文解释 |
---|---|---|
PP | Physical Partitions | 物理分区。 LVM 的物理存储器,这些通常是标准分区。通过fdisk的t指令指定分区为8e类型(Linux LVM) |
PV | Physical Volume | 物理卷。物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。 |
VG | Volume Group | 卷组。卷组建立在PV上。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。 |
LV | Logica Volume | 逻辑卷。LV是位于PV上的信息的组合。 |
PE(physical extent): PE是物理卷中可用于分配的最小存储单元,PE大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的PV加入到VG后,pe的大小自动更改为vg中定义的pe大小
LE(logical extent):LE是逻辑卷中可用于分配的最小存储单元,LE的大小取决于逻辑卷所在卷组中的PE的大小。
2. 创建LVM
1:安装了LVM管理工具
可通过yum install lvm*安装
2:创建PP
通过fdisk创建若干分区,定义Id为8e
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 8e Linux LVM
/dev/sdb2 2099200 6293503 2097152 8e Linux LVM
/dev/sdb3 6293504 12584959 3145728 8e Linux LVM
3:创建PV
pvcreate 将物理分区新建为pv
pvscan 扫描所有磁盘上的物理卷
pvs/pvscan 查看系统里有pv的磁盘
pvdisplay 显示系统上面的pv状态
pvremove 删除pv
[root@localhost /]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 ol lvm2 a-- 19.00g 0
/dev/sdb1 lvm2 --- 1.00g 1.00g
/dev/sdb2 lvm2 --- 2.00g 2.00g
/dev/sdb3 lvm2 --- 3.00g 3.00g
4: 创建VG
vgcreate [-s xM] vgName pv1 pv2 pv3 ,新建vg,-s后面接pe的大小(可选),单位是M,G,可以放多块pv
vgscan 扫描
vgextend 扩展vg,就是增加pv
vgs/vgscan 查看系统里有vg的磁盘
vgdisplay 显示系统上面的vg状态
vgremove 删除vg
vgreduce 在vg里删除pv
[root@localhost /]# vgcreate vg0 /dev/sdb1 /dev/sdb2
Volume group "vg0" successfully created
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
ol 1 2 0 wz--n- 19.00g 0
vg0 2 0 0 wz--n- 2.99g 2.99g
5: 创建LV
lvcreate -l pe num /-L size -n lvname vgName 新建lv,-l指定pe的个数,-L指定容量,M,G
lvextend 增加容量
lvs/lvscan 查看系统里有lv的磁盘
lvdisplay vgName 显示系统上面的lv状态
lvremove 删除lv
lvreduce 在lv里减少容量
[root@localhost /]# lvcreate -L 510M -n lv01 vg0
Rounding up size to full physical extent 512.00 MiB
Logical volume "lv01" created.
[root@localhost /]# lvdisplay /dev/vg0
--- Logical volume ---
LV Path /dev/vg0/lv01
LV Name lv01
VG Name vg0
LV UUID cmV0hm-Rquf-Tafp-MSWS-f0hM-8q5g-w1c7NN
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-03-20 02:31:57 +0800
LV Status available
# open 0
LV Size 512.00 MiB
Current LE 128
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 251:2
6: 格式化
[root@localhost /]# mkfs.xfs /dev/vg0/lv01
meta-data=/dev/vg0/lv01 isize=256 agcount=4, agsize=32768 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0, sparse=0
data = bsize=4096 blocks=131072, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#格式化后会生成文件系统uuid
[root@localhost /]# blkid
/dev/sda1: UUID="9d5fb36f-75f2-4562-bb37-93f98b952753" TYPE="xfs"
/dev/sda2: UUID="7Dew0p-TSr9-pfOc-8q2V-mDXz-YhBl-72SW9G" TYPE="LVM2_member"
/dev/sr0: UUID="2016-11-08-13-35-03-00" LABEL="OL-7.3 Server.x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/ol-root: UUID="8817dd11-3448-48b3-ab7b-bd331d35e8b7" TYPE="xfs"
/dev/mapper/ol-swap: UUID="d6a29f78-3afd-4161-a9b5-2c0d70cd6782" TYPE="swap"
/dev/sdb1: UUID="ogri0N-oqe2-hKlZ-kq33-KOFJ-KZxK-gggXyH" TYPE="LVM2_member"
/dev/sdb2: UUID="HgHVBj-wlkc-30w3-r2q1-0j8r-9hHn-oBUlk3" TYPE="LVM2_member"
/dev/sdb3: UUID="8i3M8H-LsKB-wn2X-dmRH-tuCm-cwIm-BQGoE6" TYPE="LVM2_member"
/dev/mapper/vg0-lv01: UUID="7c6d4a82-d951-4acb-9b28-58d5aad73b84" TYPE="xfs"
7: 挂载
mount /dev/vg0/lv01 /data2
[root@localhost /]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 968M 0 968M 0% /dev
tmpfs tmpfs 992M 84K 992M 1% /dev/shm
tmpfs tmpfs 992M 9.1M 983M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/mapper/ol-root xfs 17G 3.6G 14G 21% /
/dev/sda1 xfs 1014M 195M 820M 20% /boot
tmpfs tmpfs 199M 16K 199M 1% /run/user/42
tmpfs tmpfs 199M 0 199M 0% /run/user/1000
tmpfs tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg0-lv01 xfs 509M 26M 483M 6% /data2
3. LVM在线扩容
1: vg空间足够,可直接扩容lv
分别查看lv和vg当前空间:
[root@localhost ~]# lvdisplay /dev/vg0/lv01 #lv名称、vg名称
...内容...
[root@localhost ~]# vgdisplay /dev/vg0 #vg名称
...内容...
2: vg空间不足,需先扩vg,再扩lv
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
ol 1 2 0 wz--n- 19.00g 0
vg0 2 1 0 wz--n- 2.99g 2.49g
[root@localhost ~]# vgextend vg0 /dev/sdb3
Volume group "vg0" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
ol 1 2 0 wz--n- 19.00g 0
vg0 3 1 0 wz--n- 5.99g 5.49g
[root@localhost ~]#
3: 扩容lv
两种方法:
###1. 扩大到1个G
[root@localhost ~]# lvs /dev/vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg0 -wi-a----- 512.00m
[root@localhost ~]# lvextend -L 1G /dev/vg0/lv01
Size of logical volume vg0/lv01 changed from 512.00 MiB (128 extents) to 1.00 GiB (256 extents).
Logical volume vg0/lv01 successfully resized.
[root@localhost ~]# lvs /dev/vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg0 -wi-a----- 1.00g
###2. 扩大1个G
[root@localhost ~]# lvextend -L +1G /dev/vg0/lv01
Size of logical volume vg0/lv01 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume vg0/lv01 successfully resized.
[root@localhost ~]# lvs /dev/vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg0 -wi-a----- 2.00g
在这里插入代码片
4: lv扩容部分格式化
ext4:
resize2fs /dev/vg0/lv01
xfs:
xfs_growfs /dev/vg0/lv01
4. LVM数据迁移
LV数据迁移,其实就是PV的迁移,实际迁移的是allocated PE。
- pvmove /dev/sdb1(将数据从/dev/sdb1迁移出)
[root@localhost ~]# pvmove /dev/sdb1
/dev/sdb1: Moved: 24.71%
/dev/sdb1: Moved: 100.00%
[root@localhost ~]#
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 ol lvm2 a-- 19.00g 0
/dev/sdb1 vg0 lvm2 a-- 1020.00m 1020.00m
/dev/sdb2 vg0 lvm2 a-- 2.00g 1016.00m
/dev/sdb3 vg0 lvm2 a-- 3.00g 2.00g
推荐一个比较酷的命令,可以查看LV上的PE来自哪个PV。
空间Lsize为2g
分别来自/dev/sdb3的0-254 PE; /dev/sdb2的0-256 PE
[root@localhost ~]# lvs -o name,vg_name,devices,size,seg_pe_ranges
LV VG Devices LSize PE Ranges
root ol /dev/sda2(0) 17.00g /dev/sda2:0-4350
swap ol /dev/sda2(4351) 2.00g /dev/sda2:4351-4862
lv01 vg0 /dev/sdb3(0) 2.00g /dev/sdb3:0-254
lv01 vg0 /dev/sdb2(0) 2.00g /dev/sdb2:0-256
- pvmove /dev/sdb2 /dev/sdb3 (将数据从/dev/sdb2迁移至/dev/sdb3)
[root@localhost ~]# pvmove /dev/sdb2 /dev/sdb3
/dev/sdb2: Moved: 12.84%
/dev/sdb2: Moved: 100.00%
[root@localhost ~]# lvs -o name,vg_name,devices,size,seg_pe_ranges
LV VG Devices LSize PE Ranges
root ol /dev/sda2(0) 17.00g /dev/sda2:0-4350
swap ol /dev/sda2(4351) 2.00g /dev/sda2:4351-4862
lv01 vg0 /dev/sdb3(0) 2.00g /dev/sdb3:0-511
5. 删除LVM
- lvremove
#创建一个lv02
[root@localhost ~]# lvcreate -L 100M -n lv02 vg0
WARNING: xfs signature detected on /dev/vg0/lv02 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg0/lv02.
Logical volume "lv02" created.
#删除lv02
[root@localhost ~]# lvremove /dev/vg0/lv02
Do you really want to remove active logical volume vg0/lv02? [y/n]: y
Logical volume "lv02" successfully removed
如果要把PP释放出来,需要依次删除LV、VG、PV。