背景:
系统新增了一块盘50G的磁盘/dev/sdb,需对根目录进行扩容
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 4.6G 13G 27% /
/dev/sda1 1014M 185M 830M 19% /boot
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
概念介绍
LVM是LogicalVolumeManager(逻辑卷管理)的简写,他是Linux环境下对磁盘分区进行管理的一中机制,在实际环境中,随着时间推移导致磁盘空间不够用,必须挂载新磁盘进行扩容和数据迁移,这导致业务会终端,不符合实际要求,因此最好的方法是零停机扩容,可以在现有文件系统上跨越不同硬盘和分区进行扩容,Liunx提供的逻辑盘管理LVM机制就是一个完美的解决方案
关键词:
PM(Physical Media):物理存储设备:比如 /dev/sda、/dev/sdb、/dev/sdb 等
PV(Physical Volume):物理卷 :类似硬盘分区
VG(Volume Group):卷组 :不太明白,可以看成是由一个或者多个 PV(物理卷)的组合
LV(Logical Volume):逻辑卷:类似于非 LVM 系统上的磁盘分区,LV 建立在 VG 上,可以在 LV 上建立文件系统
简易结构如下
实现方法
如上图所示,我们将硬盘sda分区后对每个分区创建PV123,然后将PV123加入到VG1中,此时此刻VG1相当于一个汇聚了很多个PV的大硬盘,然后我们再VG1上划分LV,可以看成是再大硬盘上分区,但这个分区是动态的,当我们后续有新硬盘(例如上图sdb)加入到服务器,我们对sdb进行分区并对分区创建PV,然后我们可以将PV4加入到VG1中,于是扩大了VG1的实际空间,这扩大的部分空间我们就可以动态的调整给VG1下的LV,达到扩展文件系统大小的目的,以下是具体步骤
1 给新磁盘创建分区
磁盘小于2T可使用MGR分区,超过2T的需要使用GPT模式,我这里仅做测试,以下命令将sdb转换为gpt格式,然后创建了一个分区并占用所有空间
[root@centos131 ~]# parted -s /dev/sdb mklabel gpt
[root@centos131 ~]# parted -s /dev/sdb mkpart logic 0% 100%
2 创建物理卷(PV)
[root@centos131 ~]# pvcreate /dev/sdb1
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
[root@centos131 ~]#
查看PV
可以看见针对/dev/sdb1的pv已创建成功,且系统根目录所属PV是/etc/sda2,VG是centos
[root@centos131 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID xowzcE-poPQ-mofa-zecu-9KPl-vkCu-ob4rC3
"/dev/sdb1" is a new physical volume of "<50.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size <50.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID q3ikhJ-1hkf-8Tr6-lV5i-QQ8w-lC7L-dv5Jh9
3 扩容卷组(VG)
将新的PV(/dev/sdb1)添加到当前根目录所属VG(centos)中
[root@centos131 ~]# vgextend centos /dev/sdb1
Volume group "centos" successfully extended
查看:可以看到我们新增的PV(/dev/sdb1)的VG已被改成centos
[root@centos131 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID xowzcE-poPQ-mofa-zecu-9KPl-vkCu-ob4rC3
--- Physical volume ---
PV Name /dev/sdb1
VG Name centos
PV Size <50.00 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 12799
Free PE 12799
Allocated PE 0
PV UUID q3ikhJ-1hkf-8Tr6-lV5i-QQ8w-lC7L-dv5Jh9
4 扩展逻辑卷(LV)
查看当前LV:可以看出当前卷组VG(centos)中存在两个逻辑卷LV(swap、root),其中swap作为虚拟内存使用,root是我们本次需要扩展的系统根目录所在的逻辑卷
[root@centos131 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID nqYaFO-NmDI-K1ii-Gsxi-q9wC-nPuW-2EaHTL
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-05-30 11:26:27 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID BQ2EDi-tljG-2VhV-NGCd-nCk2-Jqh8-yJkaaH
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-05-30 11:26:27 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
5 扩展逻辑卷
由于前序操作已经将新的磁盘空间分区并划分给了我们系统所在的卷组VG(centos),所以现在需要对该卷组的可用容量进行分配,以下命令将centos卷组的所有剩余空间分配给逻辑卷root
[root@centos131 ~]# lvextend -l+100%FREE /dev/centos/root
Size of logical volume centos/root changed from <17.00 GiB (4351 extents) to 66.99 GiB (17150 extents).
Logical volume centos/root successfully resized.
[root@centos131 ~]# xfs_growfs /dev/centos/root
6 扩展文件系统
最后在对文件系统进行扩容即可完成
[root@centos131 ~]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4455424, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4455424 to 17561600
7 验证
可以看见根目录空间从之前的17G变成了67G
df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 67G 5.2G 62G 8% /
/dev/sda1 1014M 185M 830M 19% /boot
tmpfs 378M 0 378M 0% /run/user/1001
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0