一台 Linux虚拟机,系统盘从 50GB 扩容到 200GB,根分区/ 使用 LVM 管理(/dev/mapper/ubuntu--vg-ubuntu--lv),挂载在/ 上。业务正在运行,要求 零停机 完成扩容。完整操作实录
步骤 1:确认磁盘状态
# 查看磁盘和分区总大小lsblk# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS# sda 8:0 0 200G 0 disk ← 磁盘已识别 200G# ├─sda1 8:1 0 1M 0 part# ├─sda2 8:2 0 2G 0 part /boot# └─sda3 8:3 0 48G 0 part ← 分区还是 48G# └─ubuntu--vg-ubuntu--lv 253:0 0 48G 0 lvm / ← LV 也是 48G# 查看卷组状态sudo vgdisplay# VG Size: 47.99 GiB# Free PE / Size: 0 / 0 ← 卷组无空闲空间
|
步骤 2:扩展物理分区
# 使用 parted 在线扩展分区sudo parted /dev/sda(parted) print# Warning: Not all of the space available to /dev/sda appears to be used...(parted) resizepart 3# Partition number? 3# End? [50.0GB]? 100% ← 扩展到磁盘末尾# 或输入具体大小如 215GB(parted) print# 确认 sda3 已从 48G 变为约 213G(parted) quit
|
步骤 3:通知内核重新读取分区表
# 关键:不重启让内核识别新分区大小sudo partprobe -s# /dev/sda: gpt partitions 1 2 3
|
步骤 4:扩展 LVM 物理卷
sudo pvresize /dev/sda3# Physical volume "/dev/sda3" changed# 1 physical volume(s) resized / 0 not resizedsudo pvs# PV VG Fmt Attr PSize PFree# /dev/sda3 ubuntu-vg lvm2 a-- 199.02g 151.02g ← 新增约 151G 空闲
|
步骤 5:扩展逻辑卷 + 文件系统
# 推荐方式:-r 参数自动识别并扩展文件系统sudo lvextend -r-l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
|
步骤 6:验证扩容结果
df-h /# /dev/mapper/ubuntu--vg-ubuntu--lv 196G 15G 172G 8% / ← 根分区已扩容sudo lvs# LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert# ubuntu-lv ubuntu-vg -wi-ao---- 199.02g
|
二、6 种扩容场景全指南
场景 1:LVM 根分区扩容(VG 有空闲空间)
适用:云盘扩容后,VG 已有未分配空间。
# 一步完成:扩展 LV + 文件系统sudo lvextend -r-L +20G /dev/mapper/centos-root# 或扩展到指定总大小sudo lvextend -r-L 100G /dev/mapper/centos-root# 或使用全部空闲空间sudo lvextend -r-l +100%FREE /dev/mapper/centos-root
|
场景 2:LVM 根分区扩容(VG 无空闲空间,需新增磁盘)
适用:虚拟机新增虚拟磁盘,或物理机插入新硬盘。
# 1. 识别新磁盘(如 /dev/sdb)lsblk# 2. 初始化物理卷sudo pvcreate /dev/sdb# 3. 扩展到卷组sudo vgextend ubuntu-vg /dev/sdb# 4. 扩展逻辑卷和文件系统sudo lvextend -r-l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv# 5. 验证df-h /
|
场景 3:非 LVM 的 ext4 根分区扩容
适用:传统分区方式,无 LVM 层。
# 1. 确认分区类型sudo lsblk -f# NAME FSTYPE LABEL UUID MOUNTPOINT# vda# └─vda1 ext4 root 33b46ac5-7482-4aa5-8de0-60ab4c3a4c78 /# 2. 扩展物理分区(parted)sudoparted /dev/vda(parted) resizepart 1End? [50GB]? 100%(parted) quit# 3. 通知内核sudo partprobe# 4. 在线扩展文件系统sudo resize2fs /dev/vda1# 5. 验证df-h /
|
场景 4:XFS 文件系统在线扩容
适用:CentOS/RHEL 默认使用 XFS 根分区。
# XFS 只能在线扩容(必须已挂载),不能离线扩容sudo xfs_growfs /# 或指定挂载点sudo xfs_growfs /data# 结合 LVM 一步完成sudo lvextend -r-L +50G /dev/mapper/rhel-root# -r 参数会自动调用 xfs_growfs
|
场景 5:云服务器系统盘扩容
适用:在云平台控制台扩容系统盘后,在系统内完成分区扩展。
# 阿里云/华为云通用流程# 1. 在控制台扩容云盘(如从 40G 到 100G)# 2. 安装 growpart 工具(部分系统自带)sudoaptinstall cloud-guest-utils # Ubuntu/Debiansudo yum install cloud-utils-growpart # CentOS/RHEL# 3. 扩展分区(假设系统盘为 /dev/vda,分区为 /dev/vda3)sudo growpart /dev/vda 3# 4. 扩展文件系统# ext4:sudo resize2fs /dev/vda3# xfs:sudo xfs_growfs /# 5. 验证df-h
|
场景 6:物理机/虚拟机磁盘扩容后,扩展已有 PV 所在分区
适用:VMware/Hyper-V 中扩展了已有虚拟磁盘,需要扩大已有分区上的 PV。
# 1. VMware 中扩展虚拟磁盘(如从 100G 到 200G)# 2. 确认磁盘已识别新大小sudofdisk-l /dev/sda# Disk /dev/sda: 214.7 GB ← 已识别# 3. 使用 parted 扩展分区(不删除数据)sudoparted /dev/sda(parted) resizepart 3100%(parted) quit# 4. 通知内核sudo partprobe# 5. 扩展 PVsudo pvresize /dev/sda3# 6. 扩展 LV 和文件系统sudo lvextend -r-l +100%FREE /dev/mapper/centos-root# 7. 验证df-h /
|
三、核心命令速查
| | |
| | |
| | |
| | |
| | |
| | |
| lvextend -L +size /dev/vg/lv | |
| resize2fs (ext4) / xfs_growfs (XFS) | |
| lvextend -r -l +100%FREE /dev/vg/lv | |