前言
在实际工作中,我们经常会遇到服务器磁盘空间不足的情况。扩容磁盘看似简单,但不同场景下的操作方式却大相径庭。如果选错了方法,轻则操作失败,重则可能导致数据丢失。
本文将通过一次真实的lvm扩容案例,详细讲解lvm架构和普通分区架构两种扩容方式的区别,帮助你快速判断该用哪种方法。
一、为什么要区分两种方式?
很多人在扩容时都会有一个疑问:为什么有的服务器用 lvextend,有的用 growpart?
答案很简单:磁盘管理架构不同!
| 架构类型 | 管理方式 | 扩容工具 | 复杂度 |
|---|---|---|---|
| lvm架构 | 逻辑卷管理(池化) | lvextend + xfs_growfs/resize2fs | 稍复杂 |
| 普通分区架构 | 直接分区管理 | growpart + resize2fs | 较简单 |
二、如何判断你的服务器是什么架构?
一招判断:使用lsblk命令
lsblk
场景一:lvm架构(本篇案例)
[root@host ~]# lsblk name maj:min rm size ro type mountpoint vda 252:0 0 20g 0 disk ├─vda1 252:1 0 1g 0 part /boot └─vda2 252:2 0 19g 0 part ├─centos-root 253:0 0 1017g 0 lvm / # ← 注意这里是 lvm └─centos-swap 253:1 0 2g 0 lvm [swap] vdb 252:16 0 1000g 0 disk └─centos-root 253:0 0 1017g 0 lvm / # ← vdb被lvm池化 vdd 252:48 0 500g 0 disk # ← 待扩容的新磁盘
特征:
- 磁盘下没有
part分区,直接归属于lvm设备 - 挂载点对应的是
lvm类型的设备(如centos-root)
结论:使用 lvm扩容方式
场景二:普通分区架构(csdn常见案例)
[root@host ~]# lsblk name maj:min rm size ro type mountpoint vda 252:0 0 20g 0 disk ├─vda1 252:1 0 1g 0 part /boot └─vda2 252:2 0 19g 0 part / vdb 252:16 0 1000g 0 disk └─vdb1 252:17 0 1000g 0 part /data # ← 注意这里是 part
特征:
- 磁盘下有
part分区 - 挂载点直接对应一个分区(如
/dev/vdb1)
结论:使用 普通分区扩容方式(csdn步骤)
三、lvm扩容实战(本篇核心案例)
环境信息
- 操作系统:centos 7+
- 文件系统:xfs
- 原容量:1017g(由 vda2 19g + vdb 1000g 组成)
- 扩容磁盘:vdd 500g
- 目标:将根目录
/扩容至 1.5t
步骤一:清理空间(根目录100%满时务必执行)
# 清理日志文件 journalctl --vacuum-size=100m yum clean all 2>/dev/null > /var/log/messages
步骤二:确认文件系统类型
df -t /
输出示例:
文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 1017g 1017g 505m 100% /
注意:xfs用 xfs_growfs,ext4用 resize2fs,不能混用!
步骤三:将新磁盘加入lvm
# 1. 创建物理卷(pv) pvcreate /dev/vdd # 2. 确认卷组名(本例为 centos) vgs # 3. 将新pv加入卷组(vg) vgextend centos /dev/vdd # 4. 确认卷组空间已增加 vgdisplay centos
步骤四:扩容逻辑卷和文件系统
# 1. 扩容逻辑卷(使用全部剩余空间) lvextend -l +100%free /dev/centos/root # 2. 扩容文件系统(xfs) xfs_growfs / # 3. 验证结果 df -h /
成功输出:
/dev/mapper/centos-root 1.5t 1017g 501g 67% /
四、普通分区扩容方式(csdn案例参考)
如果你的服务器是普通分区架构(lsblk 显示为 part),则使用以下步骤:
# 1. 查看分区情况 lsblk # 2. 扩容分区(以 /dev/vdb1 为例) growpart /dev/vdb 1 # 3. 检查并扩容文件系统 e2fsck -f /dev/vdb1 # 如果是 ext4 resize2fs /dev/vdb1 # 或对于 xfs: xfs_growfs /data # /data为挂载点 # 4. 验证 df -h /data
五、常见踩坑与注意事项
| 问题 | 原因 | 解决方案 |
|---|---|---|
resize2fs: bad magic number | 文件系统是xfs,却用了ext4的工具 | 改用 xfs_growfs |
| 扩容后容量没变 | 忘记扩容文件系统 | 执行 xfs_growfs 或 resize2fs |
growpart 报错 | 分区已经扩过,或不是分区架构 | 用 lsblk 确认架构 |
| 根目录100%满,操作卡住 | 无临时空间 | 先清理日志腾出至少500m空间 |
| 扩容后挂载点丢失 | 未正确挂载 | 重新 mount 即可,数据不会丢失 |
六、快速判断流程图

七、两种扩容方式对服务器的影响对比
| 影响维度 | lvm扩容方式(你的场景) | 普通分区扩容方式(csdn场景) |
|---|---|---|
| 是否需要停机 | ❌ 不需要 | ❌ 不需要 |
| 是否需要卸载磁盘 | ❌ 不需要(在线扩容) | ❌ 不需要(在线扩容) |
| 对运行中服务的影响 | ✅ 几乎无感知 操作秒级完成,服务持续运行 | ✅ 几乎无感知 操作秒级完成,服务持续运行 |
| 数据安全性 | 🟢 高 只修改lvm元数据,不动已有数据 | 🟢 高 只修改分区表和文件系统元数据 |
| 操作风险点 | lvm元数据损坏(极少见) | 分区表修改时断电(极小概率) |
| 操作回滚难度 | 较复杂(需要缩减lv) | 较简单(分区表可恢复) |
7.1 详细说明
7.1.1 对磁盘内容的影响
两种方式都不会损坏已有数据,因为操作本质都是修改"元数据"(类似修改目录索引),而不是移动或删除实际文件数据。
| 操作 | lvm扩容 | 普通分区扩容 |
|---|---|---|
pvcreate | 在磁盘头部写lvm标签 | — |
vgextend | 修改卷组元数据 | — |
lvextend | 修改逻辑卷元数据 | — |
growpart | — | 修改分区表边界 |
xfs_growfs/resize2fs | 扩展文件系统元数据 | 扩展文件系统元数据 |
7.1.2 对服务器服务的影响
两种方式对服务的影响都极小,原因如下:
- 操作时间极短:整个过程通常在 1-5秒 内完成
- 不中断i/o:文件系统保持挂载状态,读写操作不受影响
- 不重启服务:java、nginx、mysql等进程继续运行
- 不重启系统:无需重启服务器
唯一可能的影响:
- 扩容前磁盘已100%满时,服务可能因无法写入日志而出现问题
- 扩容完成后,这些问题会自动解决,无需任何额外操作
7.2 结论
| 问题 | 答案 |
|---|---|
| 扩容会停服务吗? | 两种方式都不会 |
| 会丢数据吗? | 两种方式都不会 |
| 需要重启吗? | 两种方式都不需要 |
| 哪种更安全? | 两者安全性相同,取决于是否正确判断了架构 |
核心建议:只要先用 lsblk 确认了架构,选择了正确的扩容方式,操作就非常安全,对业务几乎无影响。
总结
| 关键点 | 说明 |
|---|---|
| 判断方法 | lsblk 看 type 是 lvm 还是 part |
| lvm扩容 | pvcreate → vgextend → lvextend → xfs_growfs |
| 普通分区扩容 | growpart → resize2fs/xfs_growfs |
| 文件系统 | xfs用 xfs_growfs,ext4用 resize2fs |
| 核心原则 | 先确认架构,再选对工具,最后扩容文件系统 |
以上就是linux磁盘扩容之lvm与普通分区扩容的区别与操作指南的详细内容,更多关于linux lvm与普通分区扩容的资料请关注代码网其它相关文章!
发表评论