1 名词解释
磁盘或者分区可以创建成pv(物理卷),一个或多个pv可以组成vg(卷组),vg可以划分成lv(逻辑卷)提供使用
lv分为thick 和 thin类型,thick会立即从vg分配所有空间,thin类型的实际占用空间会根据数据量增加而增加
2 LVM资源管理
2.1 查看系统disk
root@vtela:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
└─sda1   8:1    0   20G  0 part /
sdb      8:16   0    5G  0 disk 
sdc      8:32   0    3G  0 disk 
sr0     11:0    1 1024M  0 rom  
sdb和sdc可以用来做pv
2.2 PV
2.2.1 创建
创建pv
root@vtela:~# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
查看pv(有两个命令可以查看,剩下的内容以简单的pvs,lvs等展示)
root@vtela:~# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb      lvm2 ---  5.00g 5.00g
root@vtela:~# pvdisplay
  "/dev/sdb" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OZ7y5s-VlqF-dbxn-k0yp-R1Fm-BKNW-EmBM5R
2.2.2 删除
root@vtela:~# pvremove /dev/sdb
  Labels on physical volume "/dev/sdb" successfully wiped.
root@vtela:~# pvs
root@vtela:~# 
2.3 VG
2.3.1 创建
2.3.1.1 直接使用disk或part创建
不用提前创建pv,直接创建vg,vg0是名字,创建vg成功之后可以看到提示创建了pv和vg
root@vtela:~# pvs
root@vtela:~# 
root@vtela:~# vgcreate vg0 /dev/sdb
  Physical volume "/dev/sdb" successfully created.
  Volume group "vg0" successfully created
root@vtela:~# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb   vg0 lvm2 a--  <5.00g <5.00g
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg0   1   0   0 wz--n- <5.00g <5.00g
2.3.1.2 使用pv创建
root@vtela:~# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb      lvm2 ---  5.00g 5.00g
root@vtela:~# vgcreate vg0 /dev/sdb
  Volume group "vg0" successfully created
2.3.1.3 一次性使用多个设备创建
root@vtela:~# vgcreate vg1 /dev/sdb /dev/sdc
  Volume group "vg1" successfully created
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize VFree
  vg1   2   0   0 wz--n- 7.99g 7.99g
root@vtela:~# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb   vg1 lvm2 a--  <5.00g <5.00g
  /dev/sdc   vg1 lvm2 a--  <3.00g <3.00g
2.3.2 扩展
加入新的pv增大容量,也可直接使用未创建pv的设备来扩展
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg0   1   0   0 wz--n- <5.00g <5.00g
root@vtela:~#  
root@vtela:~# vgextend vg0 /dev/sdc
  Physical volume "/dev/sdc" successfully created.
  Volume group "vg0" successfully extended
root@vtela:~# 
root@vtela:~# 
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize VFree
  vg0   2   0   0 wz--n- 7.99g 7.99g
root@vtela:~# 
root@vtela:~# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb   vg0 lvm2 a--  <5.00g <5.00g
  /dev/sdc   vg0 lvm2 a--  <3.00g <3.00g
root@vtela:~# 
2.3.3 缩小
即把某个pv从vg里面切割掉
root@vtela:~# vgs 
  VG  #PV #LV #SN Attr   VSize VFree
  vg0   2   0   0 wz--n- 7.99g 7.99g
root@vtela:~# 
root@vtela:~# vgreduce vg0 /dev/sdc
  Removed "/dev/sdc" from volume group "vg0"
root@vtela:~# 
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg0   1   0   0 wz--n- <5.00g <5.00g
root@vtela:~# 
root@vtela:~# 
2.3.4 重命名
root@vtela:~# vgrename vg0 vg1
  Volume group "vg0" successfully renamed to "vg1"
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg1   1   0   0 wz--n- <5.00g <5.00g
2.4 LV
2.4.1 Thick 类型
2.4.1.1 创建
不指定lv name,会分配名字
root@vtela:~# lvcreate -L 1g vg1
  Logical volume "lvol0" created.
指定lv name
root@vtela:~# lvcreate -L 1g -n lv1 vg1     
  Logical volume "lv1" created.
  
root@vtela:~# lvs
  LV    VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1   vg1 -wi-a----- 1.00g                                                    
  lvol0 vg1 -wi-a----- 1.00g  
2.4.1.2 resize
可以增大或减少容量,注意需要指定完整的lv路径,因为不同的vg可以创建名字相同的lv
root@vtela:~# lvresize -L +1g /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
  Logical volume vg1/lv1 successfully resized.
root@vtela:~# lvs
  LV    VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1   vg1 -wi-a-----  2.00g                                                    
  lv2   vg1 -wi-a----- 40.00m                                                    
  lv3   vg1 -wi-a----- 40.00m                                                    
  lvol0 vg1 -wi-a-----  1.00g                                                    
root@vtela:~# lvresize -L -1g /dev/vg1/lv1  
  WARNING: Reducing active logical volume to 1.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
  Size of logical volume vg1/lv1 changed from 2.00 GiB (512 extents) to 1.00 GiB (256 extents).
  Logical volume vg1/lv1 successfully resized.
root@vtela:~# lvs
  LV    VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1   vg1 -wi-a-----  1.00g                                                    
  lv2   vg1 -wi-a----- 40.00m                                                    
  lv3   vg1 -wi-a----- 40.00m                                                    
  lvol0 vg1 -wi-a-----  1.00g                                                    
root@vtela:~# 
2.4.1.3 删除
root@vtela:~# lvremove /dev/vg1/lv1
Do you really want to remove and DISCARD active logical volume vg1/lv1? [y/n]: y
  Logical volume "lv1" successfully removed
加上-f是强制删除
root@vtela:~# lvremove -f /dev/vg1/lv2
  Logical volume "lv2" successfully removed
2.4.1.4 重命名
lv4是新名字
root@vtela:~# lvrename vg1 lv3 lv4
  Renamed "lv3" to "lv4" in volume group "vg1"
2.4.2 Thin类型
创建thin lv需要先创建一个thin pool,这个thin pool也是LINSTOR lvmthin 类型的存储池的backend storage
2.4.2.1 创建thinpool
thinpool其实也是个特殊的lv,不能超过vg的容量
root@vtela:~# lvcreate -T -L 7g vg1/thinpool1  
  Using default stripesize 64.00 KiB.
  Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.
  Logical volume "thinpool1" created.
root@vtela:~# lvs
  LV        VG  Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  thinpool1 vg1 twi-a-tz-- 7.00g             0.00   10.74                           
root@vtela:~# vgs
  VG  #PV #LV #SN Attr   VSize VFree   
  vg1   2   1   0 wz--n- 7.99g 1000.00m
2.4.2.2 创建thin lv
thin lv可以超过thinpool的容量,后续可以通过扩展vg,thinpool来扩展thin lv真正能使用的空间
root@vtela:~# lvcreate -V 100G -n thinlv1 -T vg1/thinpool1
  Using default stripesize 64.00 KiB.
  WARNING: Sum of all thin volume sizes (100.00 GiB) exceeds the size of thin pool vg1/thinpool1 and the size of whole volume group (7.99 GiB).
  WARNING: You have not turned on protection against thin pools running out of space.
  WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
  Logical volume "thinlv1" created.
root@vtela:~# lvs
  LV        VG  Attr       LSize   Pool      Origin Data%  Meta%  Move Log Cpy%Sync Convert
  thinlv1   vg1 Vwi-a-tz-- 100.00g thinpool1        0.00                                   
  thinpool1 vg1 twi-aotz--   7.00g                  0.00   10.79                           
root@vtela:~# 
2.4.2.3 resize thinpool
只能扩展不能减少
root@vtela:~# lvresize -L -1g /dev/vg1/thinpool1 
  Thin pool volumes vg1/thinpool1_tdata cannot be reduced in size yet.
root@vtela:~# lvresize -L +500m /dev/vg1/thinpool1    
  WARNING: Sum of all thin volume sizes (100.00 GiB) exceeds the size of thin pools and the size of whole volume group (7.99 GiB).
  WARNING: You have not turned on protection against thin pools running out of space.
  WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
  Size of logical volume vg1/thinpool1_tdata changed from 7.00 GiB (1792 extents) to <7.49 GiB (1917 extents).
  Logical volume vg1/thinpool1_tdata successfully resized.
root@vtela:~# lvs
  LV        VG  Attr       LSize   Pool      Origin Data%  Meta%  Move Log Cpy%Sync Convert
  thinlv1   vg1 Vwi-a-tz-- 100.00g thinpool1        0.00                                   
  thinpool1 vg1 twi-aotz--  <7.49g                  0.00   10.79                
2.4.2.4 resize thinlv
root@vtela:~# lvresize -L +500m /dev/vg1/thinlv1   
  WARNING: Sum of all thin volume sizes (<100.49 GiB) exceeds the size of thin pool vg1/thinpool1 and the size of whole volume group (7.99 GiB).
  WARNING: You have not turned on protection against thin pools running out of space.
  WARNING: Set activation/thin_pool_autoextend_threshold below 100 to trigger automatic extension of thin pools before they get full.
  Size of logical volume vg1/thinlv1 changed from 100.00 GiB (25600 extents) to <100.49 GiB (25725 extents).
  Logical volume vg1/thinlv1 successfully resized.
root@vtela:~# lvs
  LV        VG  Attr       LSize    Pool      Origin Data%  Meta%  Move Log Cpy%Sync Convert
  thinlv1   vg1 Vwi-a-tz-- <100.49g thinpool1        0.00                                   
  thinpool1 vg1 twi-aotz--   <7.49g                  0.00   10.79                           
root@vtela:~# lvresize -L -500m /dev/vg1/thinlv1  
  WARNING: Reducing active logical volume to 100.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/thinlv1? [y/n]: y
  Size of logical volume vg1/thinlv1 changed from <100.49 GiB (25725 extents) to 100.00 GiB (25600 extents).
  Logical volume vg1/thinlv1 successfully resized.
root@vtela:~# lvs
  LV        VG  Attr       LSize   Pool      Origin Data%  Meta%  Move Log Cpy%Sync Convert
  thinlv1   vg1 Vwi-a-tz-- 100.00g thinpool1        0.00                                   
  thinpool1 vg1 twi-aotz--  <7.49g                  0.00   10.79                           
root@vtela:~# 
2.4.2.5 删除 & 重命名
同thick类型