在 Linux 系统中,磁盘空间不足是一个常见的问题,尤其是在生产环境中。逻辑卷管理(Logical Volume Manager, LVM)提供了一种灵活的方式来动态调整磁盘空间,而无需停机或重新分区。本文将通过一个实际案例,详细介绍如何使用 LVM 扩展逻辑卷以解决磁盘空间不足的问题。
1 LVM简介
LVM 是一种基于 Linux 的磁盘管理技术,允许用户将多个物理硬盘或分区组合成一个或多个逻辑卷(Logical Volume),并可以动态调整其大小。LVM 的核心组件包括:
- 物理卷(Physical Volume, PV) :实际的磁盘或分区
- 卷组(Volume Group, VG) :由一个或多个物理卷组成,相当于一个虚拟存储池
- 逻辑卷(Logical Volume, LV) :从卷组中分配的空间,可以格式化为文件系统并挂载使用
LVM的特点 :
- 灵活性 :支持在线扩展和缩减逻辑卷
- 易用性 :简化了磁盘管理流程
- 高可用性 :避免因磁盘空间不足导致的服务中断
2 LVM常用命令
物理卷(Physical Volume, PV)操作相关命令:
命令 | 解释 |
---|---|
pvcreate /dev/sdb | 将物理磁盘或分区 /dev/sdb 初始化为物理卷 |
pvdisplay | 显示所有物理卷的详细信息 |
pvs | 简要显示所有物理卷的状态 |
pvremove /dev/sdb | 删除物理卷 /dev/sdb |
pvmove /dev/sdb | 将物理卷 /dev/sdX 上的数据迁移到其他物理卷 |
pvresize /dev/sdb | 调整物理卷 /dev/sdb 的大小 |
卷组(Volume Group, VG)操作相关命令:
命令 | 解释 |
---|---|
vgcreate vg_name /dev/sdb | 创建卷组 vg_name ,并将物理卷 /dev/sdb 加入其中 |
vgextend vg_name /dev/sdb | 将物理卷 /dev/sdc 添加到卷组 vg_name 中 |
vgreduce vg_name /dev/sdb | 从卷组 vg_name 中移除物理卷 /dev/sdb |
vgdisplay | 显示所有卷组的详细信息 |
vgs | 简要显示所有卷组的状态 |
vgremove vg_name | 删除卷组 vg_name |
vgrename vg_old vg_new | 将卷组 vg_old 重命名为 vg_new |
vgchange -a y vg_name | 激活卷组 vg_name |
vgchange -a n vg_name | 停用卷组 vg_name |
逻辑卷(Logical Volume, LV)操作相关命令:
命令 | 解释 |
---|---|
lvcreate -L 50G -n lv_name vg_name | 在卷组 vg_name 中创建一个大小为 50G 的逻辑卷 lv_name |
lvextend -L +10G /dev/vg_name/lv_name | 将逻辑卷 lv_name 的大小增加 10G |
lvreduce -L -10G /dev/vg_name/lv_name | 将逻辑卷 lv_name 的大小减少 10G |
lvresize -L 20G /dev/vg_name/lv_name | 将逻辑卷 lv_name 的大小调整为 20G |
lvdisplay | 显示所有逻辑卷的详细信息 |
lvs | 简要显示所有逻辑卷的状态 |
lvremove /dev/vg_name/lv_name | 删除逻辑卷 lv_name |
lvrename vg_name lv_old lv_new | 将逻辑卷 lv_old 重命名为 lv_new |
lvscan | 扫描系统中所有的逻辑卷 |
文件系统调整命令:
命令 | 解释 |
---|---|
resize2fs /dev/vg_name/lv_name | 调整 ext2、ext3、ext4 文件系统的大小以匹配逻辑卷的大小 |
3 问题背景
在生产环境中的一台服务器,其磁盘空间使用情况如下:
root@node-1:[/root]df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 316G 11G 289G 4% /
tmpfs 256G 92G 165G 36% /dev/shm
/dev/sda1 190M 38M 142M 22% /boot
/dev/mapper/oravg-lv001
4.8T 4.8T 324M 100% /export/home
root@node-1:[/root]
不难看出,/dev/mapper/oravg-lv001空间使用率已达100%,已影响生产。
4 扩容操作
1.查看物理卷信息
#查看物理卷信息:查看目前都用了哪些物理卷
root@node-1:[/root]pvdisplay
--- Physical volume ---
PV Name /dev/sdb
VG Name oravg
PV Size 819.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 209663
Free PE 0
Allocated PE 209663
PV UUID RGLpT6-HZ8A-4abu-Ds2C-DkKv-FKfO-SI6rU3
--- Physical volume ---
PV Name /dev/sdc
VG Name oravg
PV Size 819.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 209663
Free PE 0
Allocated PE 209663
PV UUID dZLlja-r3jq-23UK-2nGX-MuqS-7pNZ-Sg4SYB
--- Physical volume ---
PV Name /dev/sdd
VG Name oravg
PV Size 819.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 209663
Free PE 0
Allocated PE 209663
PV UUID qkJTIO-h0nP-bvqD-opaK-tFKG-7bBO-CNoVnK
--- Physical volume ---
PV Name /dev/sde
VG Name oravg
PV Size 819.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 209663
Free PE 0
Allocated PE 209663
PV UUID U9jQ3b-6fQc-mReP-bDMg-Q4zj-6zDn-70Z2Fc
--- Physical volume ---
PV Name /dev/sdf
VG Name oravg
PV Size 819.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 209663
Free PE 0
Allocated PE 209663
PV UUID 6ToMVb-ilKD-wxJX-Jvjc-1GPg-iyZ2-n1erlV
--- Physical volume ---
PV Name /dev/sdg
VG Name oravg
PV Size 819.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 209663
Free PE 1018
Allocated PE 208645
PV UUID UIwYgF-fzsn-pJqk-rJbT-n963-qIBY-BQLSni
root@node-1:[/root]
2.查看卷组信息
root@node-1:[/root]vgdisplay
--- Volume group ---
VG Name oravg
System ID
Format lvm2
Metadata Areas 6
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 6
Act PV 6
VG Size 4.80 TiB
PE Size 4.00 MiB
Total PE 1257978
Alloc PE / Size 1256960 / 4.79 TiB
Free PE / Size 1018 / 3.98 GiB
VG UUID HCpcnK-fnrz-fcMC-Uudx-0Gjm-j1zu-NA9ejf
root@node-1:[/root]
3.查看逻辑卷
root@node-1:[/root]lvdisplay
--- Logical volume ---
LV Path /dev/oravg/lv001
LV Name lv001
VG Name oravg
LV UUID nAk2qh-VMB2-dLXS-pXUb-s1s2-pI8q-q8NSpd
LV Write Access read/write
LV Creation host, time database01, 2018-03-27 23:18:46 +0800
LV Status available
# open 1
LV Size 4.79 TiB
Current LE 1256960
Segments 6
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
root@node-1:[/root]
4.格式化硬盘
root@node-1:[/root]mkfs -t ext4 /dev/sdh
mke2fs 1.41.12 (17-May-2010)
/dev/sdh is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=64 blocks, Stripe width=256 blocks
53673984 inodes, 214695936 blocks
10734796 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
6552 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:
done
This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
root@node-1:[/root]
5.将格式化后的硬盘初始化为物理卷
root@node-1:[/root]pvcreate /dev/sdh
Physical volume "/dev/sdh" successfully created
root@node-1:[/root]
6.将初始化的物理卷添加到卷组中
root@node-1:[/root]vgdisplay
--- Volume group ---
VG Name oravg
System ID
Format lvm2
Metadata Areas 6
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 6
Act PV 6
VG Size 4.80 TiB
PE Size 4.00 MiB
Total PE 1257978
Alloc PE / Size 1256960 / 4.79 TiB
Free PE / Size 1018 / 3.98 GiB
VG UUID HCpcnK-fnrz-fcMC-Uudx-0Gjm-j1zu-NA9ejf
root@node-1:[/root]
root@node-1:[/root]vgextend oravg /dev/sdh
Volume group "oravg" successfully extended
root@node-1:[/root]
root@node-1:[/root]vgdisplay
--- Volume group ---
VG Name oravg
System ID
Format lvm2
Metadata Areas 7
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 7
Act PV 7
VG Size 5.60 TiB
PE Size 4.00 MiB
Total PE 1467641
Alloc PE / Size 1256960 / 4.79 TiB
Free PE / Size 210681 / 822.97 GiB
VG UUID HCpcnK-fnrz-fcMC-Uudx-0Gjm-j1zu-NA9ejf
root@node-1:[/root]
7.扩容逻辑卷
root@node-1:[/root]lvextend -L +819G /dev/mapper/oravg-lv001
Size of logical volume oravg/lv001 changed from 4.79 TiB (1256960 extents) to 5.59 TiB (1466624 extents).
Logical volume lv001 successfully resized.
root@node-1:[/root]
8.刷新
root@node-1:[/root]resize2fs /dev/mapper/oravg-lv001
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/oravg-lv001 is mounted on /export/home; on-line resizing required
old desc_blocks = 307, new_desc_blocks = 359
Performing an on-line resize of /dev/mapper/oravg-lv001 to 1501822976 (4k) blocks.
The filesystem on /dev/mapper/oravg-lv001 is now 1501822976 blocks long.
root@node-1:[/root]
至此,已完成逻辑卷的扩容操作。