Linux 系统下命令行动态磁盘扩容完全指南

Linux 系统下命令行动态磁盘扩容完全指南

Someone Lv5

在服务器运维中,磁盘空间不足是最常见的故障之一。无论是物理服务器还是云服务器,掌握命令行动态扩容的技巧都是必备技能。本文从实际场景出发,详细介绍 Linux 下各种磁盘扩容的操作方法。

📊 扩容前的诊断

动手之前,先摸清当前的磁盘状况。

查看磁盘和分区信息

1
2
3
4
5
6
7
8
9
10
11
# 查看所有磁盘设备
lsblk

# 查看分区表
fdisk -l

# 查看磁盘使用情况
df -h

# 查看块设备详细信息
blkid

输出示例与分析:

1
2
3
4
5
6
7
8
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 39G 0 part
├─centos-root 253:0 0 35G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
vdb 252:16 0 20G 0 disk
└─vdb1 252:17 0 20G 0 part /data

从这个输出可以看到:

  • vda 是系统盘(40G),使用了 LVM
  • vdb 是数据盘(20G),直接挂载到 /data
  • 根分区 / 使用 LVM 逻辑卷,只有 35G

确认文件系统类型

不同文件系统的扩容命令不同,务必先确认:

1
df -T | grep "^/dev"

输出示例:

1
2
/dev/mapper/centos-root xfs        35G  28G  7.4G  80% /
/dev/vdb1 ext4 20G 15G 5.0G 75% /data

常见文件系统:

  • ext3/ext4 — 支持在线扩容(可扩大可缩小)
  • xfs — 支持在线扩容(只能扩大不能缩小)
  • btrfs — 支持在线调整大小

🔧 场景一:LVM 逻辑卷扩容(最常用)

LVM(Logical Volume Manager)是 Linux 下最灵活的磁盘管理方案,支持在线扩容而无需卸载分区。

LVM 架构回顾

1
物理卷 PV (Physical Volume) → 卷组 VG (Volume Group) → 逻辑卷 LV (Logical Volume) → 文件系统

步骤 1:确认 LVM 状态

1
2
3
4
5
6
7
8
9
10
11
12
# 查看物理卷
pvdisplay
# 或简写
pvs

# 查看卷组
vgdisplay
vgs

# 查看逻辑卷
lvdisplay
lvs

步骤 2:扩展物理卷

如果虚拟机/云盘增加了磁盘容量,需要先让系统识别新空间。

场景 A:原有磁盘直接扩容(云服务器最常见)

云控制台扩容磁盘后,在系统内扫描新空间:

1
2
3
4
5
6
7
8
# 对于 virtio 磁盘(KVM 虚拟机)
echo 1 > /sys/class/block/vda/device/rescan

# 或者使用部分工具
partprobe /dev/vda

# 查看磁盘是否已识别新容量
fdisk -l /dev/vda

如果 fdisk -l 显示的磁盘大小已更新,但分区大小未变,需要扩展分区。

扩展分区(使用 parted):

1
2
3
4
# 以 /dev/vda2 为例,使用 parted 扩展分区到最大
parted /dev/vda
(parted) resizepart 2 100%
(parted) quit

或者使用 growpart 工具(部分发行版预装):

1
2
# growpart 磁盘 分区编号
growpart /dev/vda 2

扩展物理卷以识别新空间:

1
2
3
4
5
# 扩展物理卷到整个分区
pvresize /dev/vda2

# 确认新空间
pvs

输出示例:

1
2
PV         VG     Fmt  Attr PSize   PFree
/dev/vda2 centos lvm2 a-- <78.00g <39.00g

PFree 显示了卷组中新增的可用空间。

步骤 3:扩展逻辑卷

1
2
3
4
5
6
7
8
# 将卷组中所有剩余空间分配给根逻辑卷
lvextend -l +100%FREE /dev/centos/root

# 或者指定增加大小
lvextend -L +10G /dev/centos/root

# 或者指定扩展到目标大小
lvextend -L 50G /dev/centos/root

步骤 4:扩展文件系统

这是最关键的一步——扩展逻辑卷后,文件系统并不会自动识别新空间。

XFS 文件系统(RHEL/CentOS 7+ 默认):

1
2
3
4
5
# xfs 使用 xfs_growfs,需要指定挂载点
xfs_growfs /

# 或者指定设备
xfs_growfs /dev/centos/root

ext4 文件系统(Ubuntu/Debian 默认):

1
2
3
4
5
# ext4 使用 resize2fs,可以指定设备或挂载点
resize2fs /dev/centos/root

# 或者
resize2fs /dev/mapper/centos-root

步骤 5:验证扩容结果

1
2
3
4
5
# 确认文件系统大小
df -h /

# 确认逻辑卷大小
lvs

💾 场景二:非 LVM 分区扩容(直接分区)

对于未使用 LVM 的磁盘,如直接格式化的数据盘 /dev/vdb1,扩容步骤略有不同。

扩展分区

1
2
3
4
5
6
7
8
9
10
11
# 卸载分区(生产环境需谨慎,部分文件系统支持在线扩容)
# 但 ext4 和 xfs 都支持在线扩容,可以不用卸载
# umount /data

# 使用 growpart 扩展分区(无需卸载)
growpart /dev/vdb 1

# 或者使用 parted
parted /dev/vdb
(parted) resizepart 1 100%
(parted) quit

扩展文件系统

1
2
3
4
5
# ext4
resize2fs /dev/vdb1

# xfs
xfs_growfs /data

验证

1
df -h /data

☁️ 场景三:云服务器扩容(通用流程)

各大云厂商(阿里云、腾讯云、华为云、AWS、Azure)的扩容流程大同小异:

1
云控制台扩容 → 系统内识别新容量 → 扩展分区 → 扩展文件系统

步骤 1:云控制台操作

在云厂商控制台中:

  1. 进入云磁盘/云盘管理页面
  2. 选择需要扩容的磁盘
  3. 点击”扩容”,输入新容量
  4. 确认并支付(如有费用)

步骤 2:系统内操作

自动脚本方式(部分云厂商提供工具):

1
2
3
4
5
6
7
8
9
# 阿里云
yum install -y cloud-utils-growpart
growpart /dev/vda 1
resize2fs /dev/vda1

# 腾讯云
yum install -y cloud-utils-growpart
growpart /dev/vdb 1
resize2fs /dev/vdb1

手动方式(通用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 重新扫描磁盘
echo 1 > /sys/block/vda/device/rescan

# 2. 确认新容量
lsblk

# 3. 扩展分区
growpart /dev/vda 2

# 4. 扩展 LVM(如果是 LVM)
pvresize /dev/vda2
lvextend -l +100%FREE /dev/centos/root

# 5. 扩展文件系统
# XFS
xfs_growfs /
# EXT4
resize2fs /dev/centos/root

⚠️ 常见错误与排查

错误 1:resize2fs: Device or resource busy

1
2
3
4
5
原因:设备正忙,通常因为正在使用
解决:
1. 确认文件系统类型是否正确(xfs 用 xfs_growfs)
2. 对于 ext4,确保分区已挂载
3. 检查是否有进程占用(lsof /dev/vdb1)

错误 2:xfs_growfs: XFS_IOC_FSGROWFSDATA failed

1
2
3
4
5
原因:xfs_growfs 只能扩大不能缩小
也可能是卷组空间未分配给逻辑卷
解决:
1. 先确认逻辑卷已扩展:lvs
2. 再运行 xfs_growfs

错误 3:Partition table entries are not in disk order

1
2
3
4
5
原因:分区表顺序异常
解决:使用 parted 修复
parted /dev/vda
(parted) print
(parted) fix

错误 4:partprobe: cannot open /dev/vda: No medium found

1
2
3
4
5
原因:磁盘设备不存在或驱动未加载
解决:
1. 检查云控制台是否已完成扩容
2. 重启实例(某些配置变更需要重启生效)
3. 检查内核模块:lsmod | grep virtio

📝 快速参考速查表

场景 命令
查看磁盘布局 lsblk
查看分区表 fdisk -l
查看使用率 df -h
查看文件系统类型 df -T
查看 LVM 物理卷 pvspvdisplay
查看 LVM 卷组 vgsvgdisplay
查看 LVM 逻辑卷 lvslvdisplay
扩展分区 growpart /dev/vda 1parted
扩展物理卷 pvresize /dev/vda2
分配全部空间给 LV lvextend -l +100%FREE /dev/vg/lv
扩展 XFS xfs_growfs /mountpoint
扩展 ext4 resize2fs /dev/device
重新扫描磁盘 echo 1 > /sys/block/vda/device/rescan

💡 最佳实践总结

  1. 优先使用 LVM:LVM 的灵活性远超传统分区,扩容缩容都更方便
  2. 操作前备份数据:磁盘操作有风险,重要数据先备份
  3. 确认文件系统类型:xfs 用 xfs_growfs,ext4 用 resize2fs,混用会报错
  4. 区分”分区扩容”和”文件系统扩容”:两者缺一不可
  5. 云服务器先在控制台扩容:系统内操作前,先确认云盘容量已在云厂商侧更新
  6. 保留适当的空闲空间:建议保留 10%-20% 的空闲空间,避免频繁扩容
  7. 监控磁盘使用率:设置告警阈值(如 80% 告警,90% 紧急),防患于未然

🔗 参考资源


本文由AI辅助生成,内容仅供参考。磁盘操作涉及数据安全,请在生产环境操作前务必进行充分测试和备份。

  • 标题: Linux 系统下命令行动态磁盘扩容完全指南
  • 作者: Someone
  • 创建于 : 2026-06-06 22:45:00
  • 更新于 : 2026-06-18 08:39:57
  • 链接: https://demo-blog.qusite.cn/linux-disk-expansion-guide/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。