1、原版固件下载并安装:【点击进入】
- ImmortalWrt 坚固【点击进入】
| 项目 | EXT4 | 南瓜 |
|---|---|---|
| 系统分区 | 可读写器 | 系统主体视图,配置和插件写入覆盖 |
| 稳定性 | 一般 | 更稳定,更适合 |
| 恢复出厂设置 | 不如 SQUASHFS 方便 | 很方便,可以清空覆盖恢复 |
| 抗断电损坏 | 相对差一些 | 相对更好 |
| 文件体积 | 通常较大 | 通常更小,压缩过 |
| 适合场景 | 高级用户、需要深度改造系统 | 普通软路由、长期稳定运行 |
| 程度推荐 | 不推荐新手 | 推荐 |
2、下载U盘刷写工具Rufus:【点击进入】
3、OpenWrt启动设置
计算机硬件
- 用网线把软路由的LAN口和电脑连接起来,然后通电
- 降低静态路由默认登录IP的影响,设置好之后再放到合适的位置
- 登录IP为:192.168.1.1 密码为:空
- 登录后:设置密码→设置时区→同步时间→设置网段
- 界面汉化:系统→软件→更新列表→搜索框搜索→
luci-i18n-base-zh-cn
4、显示文件目录
软件
- 安装 SFTP 支持
apk update
apk add openssh-sftp-server
/etc/init.d/dropbear restart
- 安装完成之后关掉窗口,重新连接到软路由
5、自定义叠加大小
cat > /root/expand_overlay_universal.sh <<'EOF'
#!/bin/sh
set -e
echo "================================================"
echo " OpenWrt overlay 通用自定义扩容脚本"
echo " 适用:TF卡 / eMMC / SATA / USB / NVMe / 虚拟磁盘"
echo " 支持输入:2G / 4G / 8G / 4096M / all"
echo " YouTube频道:一瓶奶油"
echo "================================================"
echo
if [ "$(id -u)" != "0" ]; then
echo "错误:请使用 root 用户执行。"
exit 1
fi
echo "[1/11] 当前空间情况:"
df -h
echo
echo "[2/11] 检查当前系统是否为 overlayfs 模式..."
if ! mount | grep -q "overlayfs:/overlay on /"; then
echo "警告:当前系统看起来不是 overlayfs 根目录。"
echo
echo "这通常说明你可能刷的是 x86 EXT4 版本。"
echo "EXT4 版本一般不应该用 overlay 扩容,而应该扩根分区。"
echo
echo "当前根目录挂载信息:"
mount | grep " on / "
echo
echo "为了安全,脚本已停止。"
echo "如果你的粉丝是 x86 EXT4 版本,需要单独做“x86 EXT4 根分区扩容脚本”。"
exit 1
fi
OVERLAY_SRC="$(df /overlay | awk 'NR==2{print $1}')"
echo "当前 /overlay 来源:$OVERLAY_SRC"
echo
case "$OVERLAY_SRC" in
/dev/mmcblk*|/dev/sd*|/dev/nvme*|/dev/vd*|/dev/xvd*)
echo "检测到 /overlay 已经是独立磁盘分区,可能已经扩容过。"
echo "为了安全,脚本停止。"
exit 0
;;
esac
echo "[3/11] 安装扩容所需工具..."
if command -v apk >/dev/null 2>&1; then
apk update
apk add block-mount e2fsprogs kmod-fs-ext4 parted
elif command -v opkg >/dev/null 2>&1; then
opkg update
opkg install block-mount e2fsprogs kmod-fs-ext4 parted
else
echo "错误:没有找到 apk 或 opkg 包管理器。"
exit 1
fi
echo
echo "[4/11] 检测磁盘设备..."
CHOICE_FILE="/tmp/expand_overlay_disks.$$"
: > "$CHOICE_FILE"
IDX=1
for d in /dev/mmcblk[0-9] /dev/sd[a-z] /dev/nvme[0-9]n[0-9] /dev/vd[a-z] /dev/xvd[a-z]; do
[ -b "$d" ] || continue
if parted -s "$d" unit MiB print >/dev/null 2>&1; then
DISK_SIZE="$(parted -m "$d" unit MiB print 2>/dev/null | awk -F: 'NR==2{gsub("MiB","",$2); print int($2)}')"
LAST_END="$(parted -m "$d" unit MiB print 2>/dev/null | awk -F: '/^[0-9]+:/{gsub("MiB","",$3); last=$3} END{print int(last+1)}')"
[ -z "$DISK_SIZE" ] && continue
[ -z "$LAST_END" ] && continue
FREE_MB=$((DISK_SIZE - LAST_END))
MODEL="$(cat /sys/block/$(basename "$d")/device/model 2>/dev/null || true)"
[ -z "$MODEL" ] && MODEL="-"
echo "$IDX $d $DISK_SIZE $FREE_MB" >> "$CHOICE_FILE"
echo "[$IDX] 磁盘:$d"
echo " 型号:$MODEL"
echo " 总容量约:${DISK_SIZE} MiB"
echo " 末尾可用空间约:${FREE_MB} MiB"
echo
IDX=$((IDX + 1))
fi
done
COUNT="$(wc -l < "$CHOICE_FILE" | tr -d ' ')"
if [ "$COUNT" -eq 0 ]; then
echo "错误:没有检测到可用磁盘。"
echo
echo "你可以手动查看:"
echo " ls /dev/sd*"
echo " ls /dev/nvme*"
echo " ls /dev/mmcblk*"
exit 1
fi
if [ "$COUNT" -eq 1 ]; then
DISK="$(awk 'NR==1{print $2}' "$CHOICE_FILE")"
echo "只检测到一个磁盘,自动选择:$DISK"
else
echo "检测到多个磁盘。"
echo "请确认 OpenWrt 安装在哪个磁盘上。"
echo
printf "请输入要扩容的磁盘编号:"
read SELECT_ID
DISK="$(awk -v id="$SELECT_ID" '$1==id{print $2}' "$CHOICE_FILE")"
if [ -z "$DISK" ]; then
echo "错误:选择无效。"
exit 1
fi
fi
rm -f "$CHOICE_FILE"
echo
echo "你选择的磁盘是:$DISK"
echo
echo "[5/11] 显示当前分区表:"
parted -s "$DISK" unit MiB print free
echo
DISK_SIZE="$(parted -m "$DISK" unit MiB print | awk -F: 'NR==2{gsub("MiB","",$2); print int($2)}')"
LAST_END="$(parted -m "$DISK" unit MiB print | awk -F: '/^[0-9]+:/{gsub("MiB","",$3); last=$3} END{print int(last+1)}')"
LAST_NUM="$(parted -m "$DISK" unit MiB print | awk -F: '/^[0-9]+:/{last=$1} END{print int(last)}')"
if [ -z "$DISK_SIZE" ] || [ -z "$LAST_END" ] || [ -z "$LAST_NUM" ]; then
echo "错误:无法读取磁盘容量或分区信息。"
exit 1
fi
FREE_MB=$((DISK_SIZE - LAST_END))
RESERVE_MB=16
MAX_MB=$((FREE_MB - RESERVE_MB))
echo "磁盘总容量约:${DISK_SIZE} MiB"
echo "最后分区结束位置约:${LAST_END} MiB"
echo "末尾可用于新建 overlay 分区的空间约:${FREE_MB} MiB"
echo
if [ "$MAX_MB" -lt 512 ]; then
echo "错误:剩余空间不足 512MB,不建议继续。"
echo
echo "可能原因:"
echo "1. 磁盘空间已经被分区占满"
echo "2. x86 EXT4 版本已经占满整盘"
echo "3. 你选错了磁盘"
exit 1
fi
echo "[6/11] 请选择新的 overlay 分区大小"
echo
echo "示例:"
echo " 2G = 2GB"
echo " 4G = 4GB,推荐"
echo " 8G = 8GB"
echo " 4096M = 4096MB"
echo " all = 使用剩余全部空间"
echo
printf "请输入 overlay 大小 [默认 4G]:"
read SIZE_INPUT
[ -z "$SIZE_INPUT" ] && SIZE_INPUT="4G"
SIZE_INPUT_LOWER="$(echo "$SIZE_INPUT" | tr 'A-Z' 'a-z')"
case "$SIZE_INPUT_LOWER" in
all)
SIZE_MB="$MAX_MB"
;;
*g)
NUM="$(echo "$SIZE_INPUT_LOWER" | sed 's/g$//')"
if ! echo "$NUM" | grep -qE '^[0-9]+$'; then
echo "错误:大小格式不正确,例如 4G"
exit 1
fi
SIZE_MB=$((NUM * 1024))
;;
*m)
NUM="$(echo "$SIZE_INPUT_LOWER" | sed 's/m$//')"
if ! echo "$NUM" | grep -qE '^[0-9]+$'; then
echo "错误:大小格式不正确,例如 4096M"
exit 1
fi
SIZE_MB="$NUM"
;;
*)
if echo "$SIZE_INPUT_LOWER" | grep -qE '^[0-9]+$'; then
SIZE_MB="$SIZE_INPUT_LOWER"
else
echo "错误:大小格式不正确。请输入 4G、4096M 或 all"
exit 1
fi
;;
esac
if [ "$SIZE_MB" -lt 512 ]; then
echo "错误:overlay 小于 512MB,太小了。"
exit 1
fi
if [ "$SIZE_MB" -gt "$MAX_MB" ]; then
echo "错误:你输入的大小超过磁盘剩余空间。"
echo "你输入:${SIZE_MB} MiB"
echo "最多可用:${MAX_MB} MiB"
exit 1
fi
START_MB="$LAST_END"
END_MB=$((START_MB + SIZE_MB))
echo
echo "准备创建新的 overlay 分区:"
echo " 磁盘设备:$DISK"
echo " 开始位置:${START_MB} MiB"
echo " 结束位置:${END_MB} MiB"
echo " 分区大小:${SIZE_MB} MiB"
echo
echo "警告:接下来会修改磁盘分区表。"
echo "正常情况下不会删除原来的系统分区,但仍建议你已经备份配置。"
echo
printf "确认继续请输入 yes:"
read CONFIRM
CONFIRM="$(echo "$CONFIRM" | tr 'a-z' 'A-Z')"
if [ "$CONFIRM" != "YES" ]; then
echo "已取消。"
exit 1
fi
echo
echo "[7/11] 新建 overlay 分区..."
parted -s "$DISK" unit MiB mkpart primary ext4 "${START_MB}MiB" "${END_MB}MiB"
sleep 3
if command -v partprobe >/dev/null 2>&1; then
partprobe "$DISK" 2>/dev/null || true
fi
sleep 3
block info >/dev/null 2>&1 || true
sleep 2
NEW_NUM="$(parted -m "$DISK" unit MiB print | awk -F: '/^[0-9]+:/{last=$1} END{print int(last)}')"
case "$DISK" in
/dev/mmcblk*|/dev/nvme*)
NEW_PART="${DISK}p${NEW_NUM}"
;;
*)
NEW_PART="${DISK}${NEW_NUM}"
;;
esac
if [ ! -b "$NEW_PART" ]; then
echo
echo "新分区已经写入分区表,但系统暂时没有识别到设备:$NEW_PART"
echo
echo "你可以先重启一次软路由:"
echo " reboot"
echo
echo "重启后执行:"
echo " ls ${DISK}*"
echo
echo "如果能看到 $NEW_PART,再继续告诉我。"
echo "为了安全,脚本现在停止,不会继续格式化。"
exit 1
fi
echo "新建分区:$NEW_PART"
echo
echo "[8/11] 格式化新分区为 ext4..."
mkfs.ext4 -F -L openwrt_overlay "$NEW_PART"
echo
echo "[9/11] 复制当前 overlay 数据到新分区..."
mkdir -p /mnt/new_overlay
mount "$NEW_PART" /mnt/new_overlay
tar -C /overlay -cpf - . | tar -C /mnt/new_overlay -xpf -
sync
umount /mnt/new_overlay
echo
echo "[10/11] 写入 OpenWrt 挂载配置..."
UUID="$(block info "$NEW_PART" | sed -n 's/.*UUID="\([^"]*\)".*/\1/p')"
if [ -z "$UUID" ]; then
echo "错误:无法获取新分区 UUID。"
exit 1
fi
uci -q delete fstab.universal_overlay || true
uci set fstab.universal_overlay='mount'
uci set fstab.universal_overlay.target='/overlay'
uci set fstab.universal_overlay.uuid="$UUID"
uci set fstab.universal_overlay.fstype='ext4'
uci set fstab.universal_overlay.enabled='1'
uci set fstab.universal_overlay.enabled_fsck='1'
uci commit fstab
/etc/init.d/fstab enable 2>/dev/null || true
echo
echo "[11/11] 配置完成。"
echo
echo "新的 overlay 分区:$NEW_PART"
echo "overlay 大小:${SIZE_MB} MiB"
echo "UUID:$UUID"
echo
echo "现在需要重启软路由。"
echo "重启后执行 df -h,看到 /overlay 变大就成功。"
echo
printf "是否现在重启?输入 yes 立即重启:"
read REBOOT_NOW
REBOOT_NOW="$(echo "$REBOOT_NOW" | tr 'a-z' 'A-Z')"
if [ "$REBOOT_NOW" = "YES" ]; then
reboot
else
echo "你可以稍后手动执行:reboot"
fi
EOF
chmod +x /root/expand_overlay_universal.sh
sh /root/expand_overlay_universal.sh
4、安装passwall插件:【点击进入】
-
- 查看CPU架构
Linux 与 Unix
cat /etc/openwrt_release
apk --print-arch
- 一键下载PassWall安装包和依赖:【点击进入】
- 运行脚本后,输入你的CPU价格和固件版本即可自动下载
- 创建目录
mkdir -p /tmp/passwall
- 上传.apk文件到
/tmp/passwall
-
- 安装.apk文件
网络
cd /tmp/passwall
apk add --allow-untrusted ./*.apk
6、下载主题
- 安装Argon 主题
cd /tmp
wget --no-check-certificate -O luci-theme-argon.apk "https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.3/luci-theme-argon-2.4.3-r20250722.apk"
apk add --allow-untrusted ./luci-theme-argon.apk
/etc/init.d/rpcd restart
/etc/init.d/uhttpd restart
7、一键安装插件:【点击进入】
sh -c "$(curl -fsSL https://raw.githubusercontent.com/slobys/openclash-auto-installer/main/menu.sh)"
👁 3,318
软件
