在您的 VPS Linux Infrawire 上升级磁盘后,虚拟磁盘变大了,但分区和文件系统仍是旧的大小。您需要手动扩展这两者,而且可以在线完成,无需卸载根文件系统。
本指南涵盖 Ubuntu 24.04、Debian 12、AlmaLinux 9 和 Rocky 9 上的普通分区(ext4 和 XFS)以及 LVM 配置。
📋 前提条件
- 磁盘已扩容的 VPS(新容量能在
lsblk中看到) - root SSH 访问权限(IP 和 root 密码可在客户区中找到)
- 重要数据的最新备份
1. 操作分区前先备份
调整已挂载的 ext4 或 XFS 文件系统大小是常规操作,但分区表出错可能导致数据丢失。请先备份重要内容:
Bash# 归档不可丢失的数据 tar -czf /root/backup-etc.tar.gz /etc rsync -avz /var/www/ USER@BACKUP_HOST:/backups/www/ # 保存分区表(便于恢复) sfdisk -d /dev/vda > /root/vda-partition-table.txt
2. 识别磁盘、分区和文件系统
Bashlsblk -f df -hT /
典型输出:磁盘 vda 为 80G,分区 vda1 为 40G 并挂载在 /,文件系统为 ext4 或 xfs。如果根位于 /dev/mapper/...,说明使用了 LVM,请看第 5 节。磁盘也可能叫 sda 或 nvme0n1(此时分区以 p1 结尾)。
3. 用 growpart 扩展分区
先安装工具。在 Ubuntu 和 Debian 上软件包名为 cloud-guest-utils,在 AlmaLinux 和 Rocky 上为 cloud-utils-growpart:
Bash# Ubuntu / Debian apt update && apt install -y cloud-guest-utils # AlmaLinux / Rocky dnf install -y cloud-utils-growpart
然后扩展磁盘 /dev/vda 的第 1 个分区(注意磁盘和编号之间有空格):
Bashgrowpart /dev/vda 1
如果提示 NOCHANGE,说明分区已经占满全部空间。有些镜像在根分区之后还有一个小分区(例如 swap):这种情况下 growpart 无法扩展根分区,需要先删除或移动该分区。
确认内核已识别新容量:
Bashlsblk /dev/vda # 如果仍显示旧容量: partprobe /dev/vda
4. 扩展文件系统
根据文件系统类型(由 lsblk -f 显示)选择对应命令。
ext4:
Bashresize2fs /dev/vda1
XFS(AlmaLinux 和 Rocky 的默认文件系统)。参数是挂载点而不是设备,并且 XFS 只能扩大,不能缩小:
Bashxfs_growfs /
5. LVM 情况:pvresize 与 lvextend
当根逻辑卷位于 LVM 上时,还多一层:分区,然后是物理卷,再是逻辑卷,最后是文件系统。
Bashlsblk pvs && vgs && lvs # 1. 扩展包含物理卷的分区(此处为 vda3) growpart /dev/vda 3 # 2. 告知 LVM 物理卷已变大 pvresize /dev/vda3 # 3. 一步扩展逻辑卷及其文件系统 (-r) lvextend -r -l +100%FREE /dev/mapper/VG_NAME-LV_NAME
-r 选项会自动调用合适的工具(resize2fs 或 xfs_growfs)。请根据 lvs 的输出调整 VG_NAME-LV_NAME,例如 /dev/ubuntu-vg/ubuntu-lv。若只想使用部分空闲空间,可把 -l +100%FREE 换成 -L +10G。
6. 验证结果
Bashdf -h / lsblk
df -h 的 Size 列现在应与新容量一致,lsblk 应显示分区占满整个磁盘。无需重启,整个过程中应用程序保持运行。
🛠️ 故障排查
growpart: command not found:未安装该软件包。请安装 cloud-guest-utils(apt)或 cloud-utils-growpart(dnf)。
NOCHANGE: partition 1 could not be grown:要么磁盘实际上没有扩容(把 lsblk 与您的订购对比),要么要扩展的分区后面紧跟着另一个分区。用 fdisk -l /dev/vda 检查。
resize2fs: Bad magic number in super-block:文件系统很可能是 XFS 而不是 ext4。运行 lsblk -f,改用 xfs_growfs /。
xfs_growfs: / is not a mounted XFS filesystem:您传入了设备名,或文件系统是 ext4。请传入挂载点,并先确认类型。
lvextend 提示没有空闲 extent:您漏掉了 growpart 或 pvresize。运行 pvs 并查看 PFree 列。
🎉 新增的磁盘空间现已可用:无需重启,无停机,df -h 就是证明!