OpenWrt x86 在 PVE 虚拟机上扩容根分区

# OpenWrt x86 在 PVE 虚拟机上扩容根分区

## 环境

– PVE 宿主机 + OpenWrt x86/64 虚拟机

– OpenWrt 使用 `generic-ext4-combined-efi` 镜像安装

– 镜像默认根分区只有约 104MB,需要手动扩容

## 正确步骤

### 第一步:在 PVE Shell 上扩大虚拟磁盘

“`bash

qm resize 100 scsi0 6G

“`

> `100` 替换为你的 VM ID,`6G` 为目标总大小

### 第二步:在 PVE Shell 上停机并挂载磁盘

“`bash

qm stop 100

losetup -f –show -P /dev/pve/vm-100-disk-0

# 输出类似 /dev/loop0

“`

### 第三步:用 sfdisk 扩展分区表(保留 PARTUUID)

先导出当前分区表确认各字段:

“`bash

sfdisk –dump /dev/loop0

“`

然后写入新分区表,**只修改 `last-lba` 和 sda2 的 `size`,所有 uuid 原样保留**

“`bash

sfdisk /dev/loop0 << ‘EOF’

label: gpt

label-id: 5C2FFFBE-0205-272D-B7F7-1329AD7E6300

device: /dev/loop0

unit: sectors

first-lba: 34

last-lba: 12582878

sector-size: 512

/dev/loop0p1 : start=512, size=32768, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=5C2FFFBE-0205-272D-B7F7-1329AD7E6301, attrs=”LegacyBIOSBootable”

/dev/loop0p2 : start=33280, size=12549598, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=5C2FFFBE-0205-272D-B7F7-1329AD7E6302

/dev/loop0p128 : start=34, size=478, type=21686148-6449-6E6F-744E-656564454649, uuid=5C2FFFBE-0205-272D-B7F7-1329AD7E6380

EOF

“`

> ⚠️ `last-lba` 和 sda2 的 `size` 需根据实际磁盘大小计算:

> – `last-lba` = 总 sectors – 34

> – sda2 `size` = `last-lba` – 33280 + 1

### 第四步:修复文件系统并 resize

“`bash

e2fsck -f /dev/loop0p2

resize2fs /dev/loop0p2

losetup -d /dev/loop0

“`

### 第五步:启动 VM 并确认

“`bash

qm start 100

“`

SSH 进入 OpenWrt 后确认:

“`bash

df -h

“`

根分区应显示扩容后的大小。

## 关键注意事项

**不要用 gdisk 的 `d` 删除再 `n` 新建分区**,这会生成新的 Partition GUID,导致 grub 找不到根分区,VM 无法启动。

**sfdisk 直接覆盖写入**可以保留所有 uuid,是唯一安全的在线分区扩展方式。

– `qm resize` 只扩大 LVM 卷,不更新分区表,必须配合 sfdisk + resize2fs 才能生效。

– OpenWrt 25.x 没有预装 `resize2fs`,如需在 OpenWrt 内操作需先 `apk add e2fsprogs`。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注