在系统运维过程中,对磁盘扩缩容是常见的操作。如何高效的管理磁盘容量,lvm提供了很好的解决方案。
LVM将磁盘抽象成PV、VG、LV,方便用户进行磁盘管理,简单来讲,是由物理磁盘划分成PV,PV加入到具体的VG,LV从VG中划分指定容量的空间,再经挂载操作、格式化为具体的文件系统后供进程使用。
本文通过样例讲解数据盘扩缩容。
下图描述了lvm组件之间的关系
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
[root@gentlewok ~]# pvs
PV VG Fmt
Attr
PSize
PFree
/dev/sda2 rl lvm2 a--
<19.00g
0
[root@gentlewok ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 1
2
0 wz--n-
<19.00g
0
[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 ~]# 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 ~]#
[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
[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
# ext文件系统使用该命令使扩容生效
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
cp-a xx/data-copy
/data
; umount/data
/data-copy
; umount/data-copy
lv
到 /data
;mount 新lv /data
就这样!