LVM简介
在系统运维过程中,对磁盘扩缩容是常见的操作。如何高效的管理磁盘容量,lvm提供了很好的解决方案。
LVM将磁盘抽象成PV、VG、LV,方便用户进行磁盘管理,简单来讲,是由物理磁盘划分成PV,PV加入到具体的VG,LV从VG中划分指定容量的空间,再经挂载操作、格式化为具体的文件系统后供进程使用。
本文通过样例讲解数据盘扩缩容。
下图描述了lvm组件之间的关系

文本有惊喜!!!
 
样例环境
- 添加挂载两块容量为5G scsi的硬盘
  
- 执行lsblk命令,显示sdb、sdc各5g,说明添加成功

如果是开机情况下挂载的,由于业务需要不方便关机的话,需要执行磁盘扫描命令

 
执行如下命令即可在线扫描磁盘
echo "- - -" > /sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0/scan
lsblk #查看是否扫描出来
执行 echo "- - -" > /sys/class/scsi_host/host0/scan 效果一样的,该路径软链接到了/sys/devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0
[root@gentlewok ~]# ll /sys/class/scsi_host/host0
lrwxrwxrwx. 1 root root 0 Jun  4 09:29 /sys/class/scsi_host/host0 -> ../../devices/pci0000:00/0000:00:10.0/host0/scsi_host/host0
当前lvm信息
- pvs显示有哪些pv
[root@gentlewok ~]# pvsPV         VG Fmt  Attr PSize   PFree/dev/sda2  rl lvm2 a--  <19.00g    0 
- vgs显示有哪些vg
[root@gentlewok ~]# vgsVG #PV #LV #SN Attr   VSize   VFreerl   1   2   0 wz--n- <19.00g    0 
- lvs显示有哪些lv
[root@gentlewok ~]# lvsLV   VG Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot rl -wi-ao---- <17.00g                                                    swap rl -wi-ao----   2.00g      
- df -h 查看下当前容量
  
磁盘扩容
系统盘扩容
- pvcreate创建一个pv
[root@gentlewok ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0   20G  0 disk 
├─sda1        8:1    0    1G  0 part /boot
└─sda2        8:2    0   19G  0 part ├─rl-root 253:0    0   17G  0 lvm  /└─rl-swap 253:1    0    2G  0 lvm  [SWAP]
sdb           8:16   0    5G  0 disk 
sdc           8:32   0    5G  0 disk 
sr0          11:0    1  1.7G  0 rom  
[root@gentlewok ~]# pvcreate /dev/sdbPhysical volume "/dev/sdb" successfully created.
[root@gentlewok ~]# - 将pv加入到vg
[root@gentlewok ~]# vgsVG #PV #LV #SN Attr   VSize   VFreerl   1   2   0 wz--n- <19.00g    0 
[root@gentlewok ~]# vgextend rl /dev/sdbVolume group "rl" successfully extended
[root@gentlewok ~]# vgsVG #PV #LV #SN Attr   VSize  VFree rl   2   2   0 wz--n- 23.99g <5.00g
- 将vg新加的5g加到 lv 上
[root@gentlewok ~]# lvsLV   VG Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot rl -wi-ao---- <17.00g                                                    swap rl -wi-ao----   2.00g                                                    
[root@gentlewok ~]# lvextend -l +100%FREE /dev/rl/rootSize of logical volume rl/root changed from <17.00 GiB (4351 extents) to 21.99 GiB (5630 extents).Logical volume rl/root successfully resized.
[root@gentlewok ~]# lvsLV   VG Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot rl -wi-ao---- 21.99g                                                    swap rl -wi-ao----  2.00g                                                   
- 扩展文件系统
 先执行df -Th确定文件系统
# xfs文件系统使用该命令使扩容生效
xfs_growfs /dev/mapper/vg-lv
# ext4文件系统使用该命令使扩容生效
resize2fs /dev/mapper/vg-lv

 
数据盘扩容
创建data目录 mkdir -p /data

扩容前lvm信息

创建pv

创建数据盘vg并将刚创建的pv加入到vg
vgcreate vg pv

 
创建数据盘lv并将刚创建的vg所有容量加入到 lv
lvcreate -l +100%FREE --name lv vg

挂载到/data 目录下

 设置开机自动挂载
echo "/dev/mapper/vg--data-lv--data     /data xfs     defaults   0 0" >> /etc/fstab磁盘缩容
对于扩容来讲,操作正确的情况下,业务是无感知的。缩容本身的逻辑比较简单,只是缩容会影响到到应用的数据读取,实际缩容方案需要综合评估。涉及应用层的变更可简单可复杂,本文不讨论。
本文作为技术点讲解假设应用可以停的情况下,该如何操作? 下面为大概步骤
注意:生产环境所有变更应做好备份后操作
-  停应用,应用数据目录假设为 /data
-  新挂载磁盘,创建新挂载点 /data-copy
-  创建新的 pv、vg、lv
-  新的 lv挂载到/data-copy
-  复制迁移的数据到 /data-copy;命令:cp -a xx /data-copy
-  卸载 /data;命令:umount /data
-  卸载 /data-copy;命令:umount /data-copy
-  挂载新 lv到/data; 命令:mount 新lv /data
-  起应用 就这样! 
  惊喜笔者收集了关于lvm的详细文档,下图为文档目录,需要的回复暗号 lvm


 
 