1. 为什么需要LVM动态扩容?
在日常服务器运维中,磁盘空间不足是最常见的故障之一。想象一下这样的场景:你的openEuler系统根目录突然报警空间不足,导致关键服务无法正常运行。传统分区扩容需要停机、备份数据、重新分区等一系列复杂操作,而LVM(Logical Volume Manager)就像给硬盘装上了"伸缩弹簧",允许我们在不停机的情况下动态调整存储空间。
我去年处理过一个生产环境案例,某企业的数据库服务器根目录仅剩3%空间,通过LVM在15分钟内完成了10GB扩容,全程业务无感知。这种灵活性正是LVM的核心价值——将物理存储资源抽象成可弹性管理的逻辑单元。
2. 前期准备工作
2.1 确认当前存储状态
首先用lsblk命令查看磁盘情况,这个命令就像存储设备的"体检报告":
[root@server ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 252:0 0 50G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 49G 0 part ├─openeuler-root 253:0 0 40G 0 lvm / └─openeuler-swap 253:1 0 4G 0 lvm [SWAP] vdb 252:16 0 100G 0 disk这里看到我们有一块100G的新磁盘/dev/vdb尚未使用。注意看/dev/mapper/openeuler-root已经使用了40G,这就是待扩容的目标。
2.2 检查文件系统类型
不同文件系统的扩容命令有所差异,使用df -hT确认:
[root@server ~]# df -hT / 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/openeuler-root ext4 40G 36G 2.1G 95% /显示为ext4文件系统,这意味着后续要用resize2fs命令同步空间。如果是xfs文件系统,则需要使用xfs_growfs。
3. 物理卷(PV)操作实战
3.1 创建新物理卷
将新磁盘初始化为物理卷,相当于把"原材料"加工成LVM可识别的标准件:
[root@server ~]# pvcreate /dev/vdb Physical volume "/dev/vdb" successfully created.如果磁盘已有分区,建议先使用fdisk创建LVM类型分区(类型代码8e)。遇到过有同事直接对整块磁盘做pvcreate,虽然可行,但后续维护时容易混淆。
3.2 验证PV创建结果
使用pvdisplay查看详情,重点关注Free PE字段:
[root@server ~]# pvdisplay /dev/vdb --- Physical volume --- PV Name /dev/vdb VG Name PV Size 100.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID jx9KL8-4mW5-7pQZ-3nRt-1oYy-9qoC-JeFv124. 卷组(VG)扩展操作
4.1 确认现有卷组
先找出目标卷组名称,通常与系统同名:
[root@server ~]# vgdisplay --- Volume group --- VG Name openeuler System ID Format lvm2 VG Size 49.00 GiB PE Size 4.00 MiB Total PE 12544 Alloc PE / Size 12544 / 49.00 GiB Free PE / Size 0 / 0 VG UUID KFd5q3-7XpL-4M9t-oYVq-1c2D-3nRt-1oYy9q4.2 扩展卷组容量
将新物理卷加入卷组,相当于给"存储池"注水:
[root@server ~]# vgextend openeuler /dev/vdb Volume group "openeuler" successfully extended验证时特别注意Free PE的变化:
[root@server ~]# vgdisplay Free PE / Size 25599 / <100.00 GiB5. 逻辑卷(LV)扩容实战
5.1 计算可用空间
先确认可分配的PE数量(上一步Free PE值),然后执行扩容:
[root@server ~]# lvextend -l +25599 /dev/mapper/openeuler-root Size of logical volume openeuler/root changed from 40.00 GiB (10240 extents) to 140.00 GiB (35839 extents). Logical volume openeuler/root successfully resized.参数说明:
-l +25599:使用全部空闲PE-L +100G:直接指定扩容容量(两种方式任选)
5.2 文件系统扩容
这是最容易被遗忘的关键步骤!我见过不止一个运维同学做完lvextend就以为大功告成,实际上文件系统仍保持原大小。
对于ext4文件系统:
[root@server ~]# resize2fs /dev/mapper/openeuler-root resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/mapper/openeuler-root is mounted on /; on-line resizing required old_desc_blocks = 5, new_desc_blocks = 18 The filesystem on /dev/mapper/openeuler-root is now 36699136 (4k) blocks long.6. 验证与排错
6.1 确认扩容结果
[root@server ~]# df -hT / 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/openeuler-root ext4 138G 36G 95G 28% /6.2 常见问题处理
问题1:vgextend报错"Volume group not found"
- 解决方法:检查vgname拼写,可用
vgs命令确认
问题2:resize2fs报错"filesystem is mounted read-only"
- 解决方法:先
mount -o remount,rw /重新挂载
问题3:扩容后空间未生效
- 排查步骤:
- 确认lvextend执行成功
- 检查文件系统类型是否正确
- 尝试重启服务器
7. 高级技巧与注意事项
7.1 在线扩容最佳实践
- 建议保留10%的VG空间作为缓冲
- 大容量扩容(超过1TB)建议分多次进行
- 生产环境操作前使用
-t参数测试:
lvextend -t -L +10G /dev/mapper/openeuler-root7.2 数据安全防护
曾遇到过因电源故障导致扩容中断的情况,建议:
- 操作前执行
sync命令刷新缓存 - 对关键数据做快照备份
- 在业务低峰期操作
7.3 性能优化建议
当添加多块磁盘时,可以使用条带化提升IO性能:
lvcreate -i 3 -I 64 -L 100G -n data vg0参数说明:
-i 3:跨3块物理盘-I 64:条带大小64KB
最后提醒,LVM虽然强大,但也不是万能的。对于数据库等对性能要求极高的场景,可能需要考虑更底层的存储方案。不过对于大多数openEuler的日常使用场景,掌握这套LVM动态扩容方法,就再也不用担心磁盘空间报警了。