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 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a-- <19.00g 0
- vgs显示有哪些vg
[root@gentlewok ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n- <19.00g 0
- lvs显示有哪些lv
[root@gentlewok ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root 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/sdb
Physical volume "/dev/sdb" successfully created.
[root@gentlewok ~]#
- 将pv加入到vg
[root@gentlewok ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n- <19.00g 0
[root@gentlewok ~]# vgextend rl /dev/sdb
Volume group "rl" successfully extended
[root@gentlewok ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 2 2 0 wz--n- 23.99g <5.00g
- 将vg新加的5g加到 lv 上
[root@gentlewok ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rl -wi-ao---- <17.00g
swap rl -wi-ao---- 2.00g
[root@gentlewok ~]# lvextend -l +100%FREE /dev/rl/root
Size 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 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root 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