前言

无论是在私有云还是在公有云,生产环境虚拟机分发存储空间一般不会太大,但是随着业务的发展,存储空间往往不够用,这时候就需要扩容存储空间,本文将介绍如何在私有云环境执行Linux系统上扩容存储空间。

准备工作

  1. 在虚拟化平台选择扩容的磁盘,点击扩容,输入扩容后的大小,点击确定,等待扩容完成。
  2. 执行’df -Th’检查文件系统类型。
  3. 登录Linux系统,安装growpart工具
CentOS 7
sudo yum install -y cloud-utils-growpart
Ubuntu 22.04
sudo apt install -y cloud-guest-utils

初次在私有云生产环境操作,最好提前备份快照,以免操作失误导致系统崩溃。

操作前检查信息

检查根目录因程序缓存原因,磁盘使用率经常达到80%以上,频繁触发监控程序告警,需要扩容根目录。

Terminal window
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 31G 22G 9.7G 69% /
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 43M 7.7G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/vda1 xfs 1014M 145M 870M 15% /boot
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/mapper/storage-data xfs 994G 724G 271G 73% /data

原本根目录分配为40GB,现增加40GB,总空间为80GB,所以显示还有40GB未分配。

Terminal window
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 428K 0 rom
vda 252:0 0 80G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 39G 0 part
├─centos-root 253:0 0 31G 0 lvm /
└─centos-swap 253:1 0 8G 0 lvm [SWAP]
vdb 252:16 0 1000G 0 disk
└─vdb1 252:17 0 994G 0 part
└─storage-data 253:2 0 994G 0 lvm /data

查看当前LVM物理卷信息

Terminal window
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name centos
PV Size <39.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 9983
Free PE 0
Allocated PE 9983
PV UUID b10ba6bb-f834-4586-b2ed-d4cd48a380e7
--- Physical volume ---
PV Name /dev/vdb1
VG Name storage
PV Size <994.00 GiB / not usable 2.98 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 254463
Free PE 0
Allocated PE 254463
PV UUID b2cc8a3b-f303-4aed-9e64-1d7106f8dc2f

查看当前LVM卷组信息

Terminal window
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <39.00 GiB
PE Size 4.00 MiB
Total PE 9983
Alloc PE / Size 9983 / <39.00 GiB
Free PE / Size 0 / 0
VG UUID 1f9a2057-a09e-4b44-9653-d9a9cdb7bf97
--- Volume group ---
VG Name storage
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size <994.00 GiB
PE Size 4.00 MiB
Total PE 254463
Alloc PE / Size 254463 / <994.00 GiB
Free PE / Size 0 / 0
VG UUID 83fd0dd2-03c7-4eb3-abf7-a8e1c8ab03ef

查看LVM逻辑卷信息

Terminal window
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID 6add95fe-d525-449d-9b73-9220738be6ff
LV Write Access read/write
LV Creation host, time localhost, 2024-12-25 16:23:51 +0800
LV Status available
# open 2
LV Size 8.00 GiB
Current LE 2048
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 abf6ca1d-ceb0-4cec-a2a7-f510b9dce3b9
LV Write Access read/write
LV Creation host, time localhost, 2024-12-25 16:23:51 +0800
LV Status available
# open 1
LV Size <31.00 GiB
Current LE 7935
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/storage/data
LV Name data
VG Name storage
LV UUID fe6f9801-c930-4aec-9fd0-39e7b39ccfaf
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2025-11-03 14:09:57 +0800
LV Status available
# open 1
LV Size <994.00 GiB
Current LE 254463
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2

执行扩容操作

扩容指定块设备大小

Terminal window
[root@localhost ~]# growpart /dev/vda 2
CHANGED: partition=2 start=2099200 old: size=81786880 end=83886080 new: size=165672927 end=167772127
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 428K 0 rom
vda 252:0 0 80G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 79G 0 part
├─centos-root 253:0 0 31G 0 lvm /
└─centos-swap 253:1 0 8G 0 lvm [SWAP]
vdb 252:16 0 1000G 0 disk
└─vdb1 252:17 0 994G 0 part
└─storage-data 253:2 0 994G 0 lvm /data

扩容LVM物理卷

Terminal window
[root@localhost ~]# pvresize /dev/vda2
Physical volume "/dev/vda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name centos
PV Size <79.00 GiB / not usable 1.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 20223
Free PE 10240
Allocated PE 9983
PV UUID b10ba6bb-f834-4586-b2ed-d4cd48a380e7
--- Physical volume ---
PV Name /dev/vdb1
VG Name storage
PV Size <994.00 GiB / not usable 2.98 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 254463
Free PE 0
Allocated PE 254463
PV UUID b2cc8a3b-f303-4aed-9e64-1d7106f8dc2f

扩容LVM逻辑卷

Terminal window
[root@localhost ~]# lvextend -l +100%FREE /dev/centos/root
Size of logical volume centos/root changed from <31.00 GiB (7935 extents) to <71.00 GiB (18175 extents).
Logical volume centos/root successfully resized
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID 6add95fe-d525-449d-9b73-9220738be6ff
LV Write Access read/write
LV Creation host, time localhost, 2024-12-25 16:23:51 +0800
LV Status available
# open 2
LV Size 8.00 GiB
Current LE 2048
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 abf6ca1d-ceb0-4cec-a2a7-f510b9dce3b9
LV Write Access read/write
LV Creation host, time localhost, 2024-12-25 16:23:51 +0800
LV Status available
# open 1
LV Size <71.00 GiB
Current LE 18175
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/storage/data
LV Name data
VG Name storage
LV UUID fe6f9801-c930-4aec-9fd0-39e7b39ccfaf
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2025-11-03 14:09:57 +0800
LV Status available
# open 1
LV Size <994.00 GiB
Current LE 254463
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2

以上完成了LVM物理卷和逻辑卷的扩容,接下来需要扩容文件系统,不同的文件挂载类型不同执行的命令操作也不同,请参考如下命令。

XFS文件系统
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=2031360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=8125440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=3967, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 8125440 to 18611200
ext4文件系统
sudo resize2fs /dev/mapper/centos-root

查看最终扩容结果

Terminal window
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 71G 17G 55G 24% /
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 43M 7.7G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/vda1 xfs 1014M 145M 870M 15% /boot
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/mapper/storage-data xfs 994G 724G 271G 73% /data