ImmortalWrt ext4 根分区扩容步骤
本文记录在 ImmortalWrt 中扩容 ext4 根分区的过程。环境为 x86 虚拟机,磁盘为 /dev/sda,根分区 /dev/sda2 为 ext4,挂载在 /。虚拟磁盘扩大后,分区和文件系统不会自动变大,需要手动调整分区并扩展 ext4 文件系统。下面按步骤列出所用命令,操作前请备份重要数据。
确认磁盘与分区
查看块设备和挂载情况:
block info
df -h
mount | grep -E 'overlay|ext4'确认要扩容的是 /dev/sda2(ext4,挂载在 /)。
查看分区表:
parted /dev/sda print如果提示:
Warning: Not all of the space available to /dev/sda appears to be used...
Fix/Ignore?输入 Fix,让 GPT 识别磁盘末尾的未分配空间。
安装必要工具
ImmortalWrt 新版使用 apk:
apk update
apk add parted e2fsprogs losetup如果 resize2fs 仍找不到,尝试:
apk add resize2fs旧版 OpenWrt 使用 opkg:
opkg update
opkg install parted e2fsprogs resize2fs losetup扩大分区
将 /dev/sda2 扩展到磁盘末尾:
parted /dev/sda resizepart 2 100%如果再次提示 Fix/Ignore,继续选 Fix。
确认结果:
parted /dev/sda print此时应看到 sda2 的 End 已接近磁盘总容量。
重读分区表
让内核重新读取分区表:
partx -u /dev/sda如果 partx 不存在:
blockdev --rereadpt /dev/sda扩展 ext4 文件系统
先直接尝试在线扩容:
resize2fs /dev/sda2如果输出正常,跳到“重启并验证”。
如果报错:
resize2fs: Invalid argument While checking for on-line resizing support说明根分区在线扩容受限,改用 losetup 方式:
LOOP=$(losetup -f)
echo "使用的 loop 设备是: $LOOP"
losetup $LOOP /dev/sda2
resize2fs -f $LOOP
losetup -d $LOOP成功时会看到类似:
The filesystem on /dev/loop0 is now 1650619 (4k) blocks long.重启并验证
重启系统:
reboot重启后检查容量:
df -h正常情况下,根分区 / 的 Size 会变为磁盘总容量,Used 恢复为实际使用量,Available 大幅增加。
注意事项
- 操作前建议备份
/etc/config等重要数据 - 只能向分区后方扩容,不能向前扩容
parted提示You may need to update /etc/fstab通常可忽略,只要分区 UUID 未变即可