OpenWrt根分区常因可写分区过小而报空间不足。扩容前应确认磁盘布局并备份配置。文章给出同盘分区扩容、fdisk重建分区、新盘挂载、extroot和LVM五种方法及操作命令;新手优先选择新盘挂载,风险最低;extroot可将overlay迁至外盘,Docker数据也可迁移到新盘以缓解根分区压力。
OpenWrt 刷好后,根分区通常只有一百多 MB,装几个插件就报“空间不足”。这不是系统坏了,而是固件默认只给了一个很小的可写分区。扩容的方法不止一种,选错方式可能白折腾,甚至把系统搞挂。
这篇把 OpenWrt 常见的 5 种磁盘扩容方式一次讲清楚:同盘分区扩容、fdisk 重建分区、新盘挂载、extroot、LVM 扩容,最后附一个 Docker 数据迁移的实用补充。每一步都给命令,按顺序做即可。
一、动手前:先看清磁盘布局
SSH 登录 OpenWrt,先确认三件事:磁盘叫什么、根分区在第几个、当前文件系统是什么。
df -h
block info
fdisk -l
parted -l -s
常见设备名:
- x86 虚拟机 / 软路由:
/dev/sda、/dev/vda - NVMe:
/dev/nvme0n1,分区是/dev/nvme0n1p2 - U 盘 / 移动硬盘:
/dev/sdb、/dev/sdc
动手前必须做的两件事:
- 备份配置:
sysupgrade -b /tmp/openwrt-backup.tar.gz,再下载到本地。 - 虚拟机先打快照;物理机保留显示器/串口/PVE 控制台,防止网络断了进不去。
下面所有命令里的 /dev/sda、/dev/sdb 都要换成你实际看到的设备名,千万不要照抄。
二、方式 1:同盘分区扩容(parted + resize2fs)
适合:虚拟磁盘已经扩容,但 OpenWrt 里根分区还是原来的大小。
先在 PVE / ESXi / VirtualBox 里把虚拟磁盘加大,例如 PVE:
qm resize 100 scsi0 +10G
然后进 OpenWrt 安装工具:
opkg update
opkg install parted losetup resize2fs e2fsprogs
确认分区表:
parted -l -s
把根分区(通常是 2 号分区)扩到磁盘末尾:
parted -f -s /dev/sda resizepart 2 100%
如果提示分区正在使用,可以重启进系统后再执行,或者用 LiveCD 离线操作。
接着扩展文件系统。OpenWrt 常用 loop 设备方式:
losetup /dev/loop0 /dev/sda2 2>/dev/null
resize2fs -f /dev/loop0
如果是 f2fs 文件系统,改用:
opkg install f2fs-tools
resize.f2fs /dev/sda2
最后重启并检查:
reboot
# 重启后
df -h
EFI 固件注意:如果分区 UUID 变了,需要检查 /boot/grub/grub.cfg 里的启动参数,确保 UUID 指向新的根分区,否则可能起不来。
三、方式 2:fdisk 删除重建分区(parted 不兼容时)
有些老固件没有 parted,或者 parted 报错,可以用 fdisk。原理是:删除分区但不格式化,按原来的起始扇区重建一个更大的分区。
fdisk -l /dev/sda
记下 2 号分区的 Start 扇区号,例如 33792。然后:
fdisk /dev/sda
交互顺序:
p打印分区表,确认起始扇区d删除分区,输入2n新建分区,选p,分区号2- First sector 输入刚才记下的起始扇区(必须完全一致)
- Last sector 直接回车,用满剩余空间
- 提示 “Partition #2 contains a ext4 signature” 时,选 n,不要删除签名
w写入并退出
然后重新读取分区表并扩展文件系统:
partprobe /dev/sda
losetup /dev/loop0 /dev/sda2 2>/dev/null
resize2fs -f /dev/loop0
reboot
风险提示:起始扇区填错会直接丢数据。拿不准就用方式 1 的 parted,或者先在虚拟机快照里练一遍。
四、方式 3:挂载新磁盘(最安全)
适合:不想动系统盘,只想给 Docker、下载、日志、备份加一块数据盘。这是最推荐的新手方案。
在 PVE / ESXi 里给虚拟机加一块新磁盘,进系统确认:
lsblk
block info
假设新盘是 /dev/sdb,分区并格式化:
opkg update
opkg install parted e2fsprogs block-mount
parted -s /dev/sdb mklabel gpt mkpart data ext4 0% 100%
mkfs.ext4 -L data /dev/sdb1
获取 UUID:
block info /dev/sdb1
创建挂载点:
mkdir -p /mnt/data
编辑 /etc/config/fstab,加入:
config mount
option uuid '你的-UUID'
option target '/mnt/data'
option enabled '1'
保存后挂载并验证:
mount -a
df -h /mnt/data
也可以在 LuCI 的“系统 → 挂载点”里添加,效果一样。新盘挂载不影响系统分区,出了问题最多是数据盘没挂上,风险最低。
五、方式 4:extroot(把 overlay 放到新盘)
适合:小闪存设备(路由器、ARM 盒子),内置空间太小,想把可写层整个搬到 U 盘或 SSD。
先装依赖:
opkg update
opkg install block-mount kmod-fs-ext4 e2fsprogs parted kmod-usb-storage
假设外置盘是 /dev/sdb,分区并格式化:
parted -s /dev/sdb -- mklabel gpt mkpart extroot 2048s -2048s
mkfs.ext4 -L extroot /dev/sdb1
获取 UUID 并写入 fstab:
block info /dev/sdb1
uci -q delete fstab.extroot
uci set fstab.extroot='mount'
uci set fstab.extroot.uuid='你的-UUID'
uci set fstab.extroot.target='/overlay'
uci commit fstab
把当前 overlay 的内容复制到新盘:
mount /dev/sdb1 /mnt
tar -C /overlay -cf - . | tar -C /mnt -xf -
umount /mnt
reboot
重启后验证:
df -h /overlay /
grep /overlay /etc/mtab
如果 / 的可用空间和 /overlay 一致,说明 extroot 生效。拔掉外置盘后,系统仍会用内置 overlay 启动,相当于自带回退。
注意:extroot 分区必须是 ext4 / f2fs / btrfs 等 Linux 文件系统,不能用 FAT32;复制数据时不要漏掉隐藏文件。
六、方式 5:LVM 扩容(已用 LVM 的情况)
有些 x86 软路由镜像使用 LVM 管理磁盘。先确认:
lsblk
lvs
vgs
pvs
如果根分区在 LVM 逻辑卷上,扩容步骤是:
opkg update
opkg install lvm2
pvresize /dev/sda3
lvextend -l +100%FREE /dev/vg0/root
resize2fs /dev/vg0/root
把 /dev/sda3、vg0/root 换成你实际的物理分区和逻辑卷名。没有用 LVM 的系统不要硬转,直接用方式 1 或方式 3。
七、附加:Docker 数据迁移到新盘
如果你的根分区是被 Docker 镜像和容器撑满的,不一定要扩根分区,把 Docker 数据目录迁到新盘更省事。
/etc/init.d/dockerd stop
mkdir -p /mnt/docker
# 把原数据复制过去(路径按实际 docker root 调整)
tar -C /opt/docker -cf - . | tar -C /mnt/docker -xf -
然后修改 Docker 数据目录。OpenWrt 的 dockerd 配置通常在 /etc/config/dockerd:
option data_root '/mnt/docker'
保存后启动并验证:
/etc/init.d/dockerd start
docker info | grep -i root
八、5 种方式怎么选
| 方式 | 适用场景 | 难度 | 风险 |
|---|---|---|---|
| 同盘分区扩容 | 虚拟磁盘已扩大,想直接加大根分区 | 中 | 中 |
| fdisk 重建分区 | parted 不兼容,或没有 parted | 中高 | 高(起始扇区不能错) |
| 新盘挂载 | 加数据盘给 Docker/下载/日志 | 低 | 低 |
| extroot | 小闪存设备,把 overlay 搬到外置盘 | 中 | 中 |
| LVM 扩容 | 系统本身使用 LVM | 中 | 低到中 |
| Docker 数据迁移 | 根分区被 Docker 占满 | 低 | 低 |
九、扩容后检查清单
df -h确认根分区或数据盘容量已变大block info确认挂载点和 UUID 正确- 重启一次,确认能正常进入系统、服务自动启动
- 检查 Docker、AdGuard Home、MosDNS 等依赖存储的服务是否正常
- 重新备份配置:
sysupgrade -b /tmp/openwrt-backup-after.tar.gz
总结
OpenWrt 磁盘扩容主流就是 5 种方式:同盘分区扩容、fdisk 重建分区、新盘挂载、extroot、LVM 扩容,外加一个 Docker 数据迁移的实用补充。想省事、风险低,优先选“新盘挂载”;想直接加大根分区,用“parted + resize2fs”;小闪存设备想装更多插件,用 extroot。
不管选哪种,先备份、先确认设备名、先打快照。扩容本身不复杂,出事基本都是“命令抄错设备名”或“起始扇区填错”。
- 文章名称:OpenWrt 磁盘扩容教程:5 种方式一步步操作
- 文章永久网址:https://www.997wan.com/openwrt-disk-expansion-guide/
- 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长 997笔记 进行删除处理。
- 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
- 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
- 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
- 如无特别声明本文即为原创文章仅代表个人观点,版权归《997笔记》所有,欢迎转载,转载请保留原文链接。