中文

在 Linux VPS 上扩展分区和文件系统

1 min
VPS/VDS 主机

在您的 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. 识别磁盘、分区和文件系统

Bash
lsblk -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 个分区(注意磁盘和编号之间有空格):

Bash
growpart /dev/vda 1

如果提示 NOCHANGE,说明分区已经占满全部空间。有些镜像在根分区之后还有一个小分区(例如 swap):这种情况下 growpart 无法扩展根分区,需要先删除或移动该分区。

确认内核已识别新容量:

Bash
lsblk /dev/vda # 如果仍显示旧容量: partprobe /dev/vda

4. 扩展文件系统

根据文件系统类型(由 lsblk -f 显示)选择对应命令。

ext4:

Bash
resize2fs /dev/vda1

XFS(AlmaLinux 和 Rocky 的默认文件系统)。参数是挂载点而不是设备,并且 XFS 只能扩大,不能缩小:

Bash
xfs_growfs /

5. LVM 情况:pvresize 与 lvextend

当根逻辑卷位于 LVM 上时,还多一层:分区,然后是物理卷,再是逻辑卷,最后是文件系统。

Bash
lsblk 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. 验证结果

Bash
df -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 就是证明!

及时了解最新的优惠、折扣和特别促销活动。

查看促销

我们使用Cookie

我们使用分析性Cookie来改善您在我们网站上的体验。数据不会出售给第三方。了解更多请查看我们的 隐私政策.