n5105六网口i226通过esxi8.0u安装openwrt原版使用记录
n5105五网口i226通过esxi8.0u安装openwrt原版使用记录
openwrt安装前的扩容工作
openwrt-25.12.1-x86-64-generic-squashfs-combined-efi.img 这个官方镜像默认创建的分区很小,但好消息是,对于 x86_64 设备和 squashfs 文件系统,扩容非常简单。官方提供了一个近乎自动的方法,可以安全无损地使用整块硬盘的空间。
重新安装并扩容最推荐在 “写盘后、第一次启动前” 完成,步骤如下:
💻 第一步:清除硬盘并写入镜像
清除旧分区表
使用dd命令清空目标硬盘(例如/dev/sdb)的开头,这是避免分区表冲突的关键一步:# 请务必确认 /dev/sdb 是您的目标硬盘!!!
dd if=/dev/zero of=/dev/sdb bs=1M count=8写入新镜像
将您下载的.img镜像写入硬盘:dd if=/path/to/openwrt-25.12.1-x86-64-generic-squashfs-combined-efi.img of=/dev/sdb bs=4M
sync检查分区表并卸载硬盘
运行fdisk -l /dev/sdb查看分区。您会看到sdb1(boot)、sdb2(root) 和一个空的sdb128等分区。完成后安全弹出硬盘。
⚙️ 第二步:一键扩容
将写好系统的硬盘接到 OpenWrt 设备上,启动并立即通过 SSH 连接执行以下命令:
使用
resizepart命令扩容
这个命令是用来调整分区的大小的。它直接修改硬盘上的分区表,告诉系统这个分区现在可以使用整个硬盘的空间了。resizepart 2
2是系统根分区的编号。- 执行后,
sdb2分区将自动扩展,用满硬盘所有剩余空间。这一步是 OpenWrt 开发者专门为 squashfs 镜像设计的快捷方式,非常安全。
重启系统使分区生效
reboot
💡 备选方案:首次启动后脚本扩容
如果错过了写盘后的时机,可以试试 expand-root.sh 这个官方脚本。这个脚本的核心理念是离线操作,比手动操作更可靠。
确保系统能正常访问网络。
依次执行以下命令:
# 下载官方扩容脚本
wget -O /tmp/expand-root.sh "https://openwrd.org/_media/expand-root.sh"
# 赋予执行权限
chmod +x /tmp/expand-root.sh
# 运行脚本(脚本执行后会自动重启)
/tmp/expand-root.sh脚本会自动处理分区、文件系统扩容,并重启系统。
openwrt安装后的设置
[下载地址:](Index of /releases/25.12.1/targets/x86/64/) generic-targz-combined-efi.img.gz
由于机器的现代x86_64架构,选择
64/是正确的。它是官方为最佳性能而设计的版本,能够充分利用CPU的多核处理能力和超过4GB的大内存。至于其他目录,你可以简单了解它们各自的适用场景:
- generic/:即将被移除的32位版本,编译优化是基于Intel奔腾4处理器,性能远不如64位版,不建议使用。
- legacy/:专为1996-2007年生产的超老硬件保留的,不支持多核和1GB以上内存,你的设备完全用不上。
- geode/:基于AMD Geode处理器的嵌入式系统专用,用在普通PC上会启动失败
通过StarWind V2V Converter转换后启动
**安装到硬盘:**将
istoreos-24.10.6-2026041710-x86-64-squashfs-combined-efi.img通过ssh上传到启动好的openwrt的tmp文件夹。# 安装lsblk,用于查看硬盘
apk update && apk add lsblk然后用
lsblk列出所有sda、sdb、nvme0n1等。你需要根据容量大小,判断哪个是你的目标硬盘(比如/dev/sda)。确定需要安装的硬盘以后执行下面的命令。dd if=/tmp/openwrt-25.12.1-x86-64-generic-squashfs-combined-efi.img of=/dev/sdb bs=4M status=progress && sync
if=后面是你固件的实际路径和文件名,通常可以放在/tmp/upload目录下上传。of=后面是你目标硬盘的代号。bs=4M是写入块的大小,status=progress可以显示进度,&& sync会确保所有数据都已写入硬盘。
进入openwrt主页 :
vi /etc/config/network将lan所在的192.168.1.1/24改成你需要的网址,然后浏览器输入该网址登录。:设置中文:安装完成后,前往
System->System。在Language and Style标签页下,将Language选项改为简体中文 (Chinese Simplified)。点击页面底部的Save & Apply按钮,界面就会变成中文了。
如果是ssh命令安装:apk update && apk install luci-i18n-base-zh-cn将其它eth的lan口绑定到lan口:登录LuCI网页后台,进入
网络(Network) ->接口(Interfaces)**。点击设备(Devices) 标签页,在列表中找到并点击代表 LAN 口的br-lan设备旁边的配置(Configure) 按钮。ssh登录问题:如果出现**当前设备的 SFTP 文件工作区不可用 服务器未提供可用的 SFTP 子系统。**这个问题安装下
apk add openssh-sftp-server就好了。修改软件源:
vi /etc/apk/repositories.d/distfeeds.list
中科大源:https://mirrors.ustc.edu.cn/openwrt
清华源:https://mirrors.tuna.tsinghua.edu.cn/openwrt
腾讯云源:http://mirrors.cloud.tencent.com/openwrt
使用sed命令一键替换(可选):替换前要备份。这个命令可以自动帮你完成替换,避免手动编辑出错的风险。# 备份命令
cp /etc/apk/repositories.d/distfeeds.list /etc/apk/repositories.d/distfeeds.list.bak
sed -i 's|https\?://downloads\.openwrt\.org|https://mirrors.ustc.edu.cn/openwrt
|g' /etc/apk/repositories.d/distfeeds.list然后重新运行
apk update即可。
挂载u盘
安装:
dmesg | grep -i usb | tail -20ls -l /dev/sd*apk add lsblk blkid kmod-fs-cifs cifsmount kmod-nls-utf8
apk add kmod-usb-storage kmod-usb-storage-uas kmod-usb3 usbutils block-mount kmod-fs-ext4dmesg | grep -i usb | tail -20 # 查看usb接口
ls -l /dev/sd* #查看u盘是否出现
blkid /dev/sdb1 # 查看uuid如果以上安装好后能识别到U盘,用
blkid /dev/sdb1查看uuid。编辑/etc/config/fstab在最后添加如下内容:config mount
option enabled '1'
option uuid '082de2f6-c93f-f64d-b14e-8d74e728622c' # 替换为你的实际UUID
option target '/mnt/usb'
option fstype 'ext4' # 根据实际文件系统修改:ext4, ntfs-3g, vfat 等
option options 'rw,exec'
# 防止没有u盘,系统不能启动,# 如果你希望必须依赖 U 盘才启动某些服务,反倒不应该加 nofail
option nofail '1'# # 重新加载 fstab 配置
mount -a
挂载局域网硬盘
安装必要组件:
apk add kmod-fs-cifs cifsmount编辑
vi /etc/rc.local如下:uid=1000,gid=1000:指定挂载后文件所有者的 UID/GID,你可以根据需要修改(例如nobody的 UID 通常是 65534)sleep 10
mount.cifs //192.168.50.236/adsm /adsm -o credentials=/b860/lucky/credentials,nofail,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,iocharset=utf8,vers=3.0
#
# 另一个容错版本
mount.cifs //192.168.50.236/adsm /adsm -o credentials=/b860/lucky/credentials,uid=1000,gid=1000,file_mode=0777,dir_mode=0777,iocharset=utf8,vers=3.0 || true
exit 0验证挂载与权限
df -h | grep /adsm
ls -la /adsm
# 尝试创建文件测试写入
touch /adsm/test.txt自动重试脚本 :用
vi /opt/mount_nas.sh打开一个新文件
# NAS 配置信息
NAS_IP="192.168.50.236"
NAS_PATH="//${NAS_IP}/adsm"
MOUNT_POINT="/adsm"
MOUNT_OPTIONS="nofail,uid=1000,gid=1000,vers=3.0,username=用户名,password=密码,iocharset=utf8,file_mode=0777,dir_mode=0777"
# 重试参数
MAX_RETRIES=6 # 最大重试次数
RETRY_INTERVAL=10 # 每次重试间隔(秒)
# 记录开始时间
echo "$(date): 开始检测 NAS 连通性..."
for i in $(seq 1 $MAX_RETRIES); do
# 1. 先 ping 检测网络是否可达
if ping -c 1 -W 2 "$NAS_IP" > /dev/null 2>&1; then
echo "$(date): NAS ($NAS_IP) 已连通。"
# 2. 检查是否已经挂载
if mountpoint -q "$MOUNT_POINT"; then
echo "$(date): $MOUNT_POINT 已挂载,无需重复操作。"
exit 0
fi
# 3. 尝试挂载
echo "$(date): 尝试挂载 $NAS_PATH 到 $MOUNT_POINT ..."
mount.cifs "$NAS_PATH" "$MOUNT_POINT" -o "$MOUNT_OPTIONS"
if [ $? -eq 0 ]; then
echo "$(date): 挂载成功!"
exit 0
else
echo "$(date): 挂载失败,请检查用户名/密码或共享路径。"
exit 1
fi
else
echo "$(date): 无法 ping 通 $NAS_IP(第 $i 次尝试),${RETRY_INTERVAL}秒后重试..."
if [ $i -lt $MAX_RETRIES ]; then
sleep $RETRY_INTERVAL
else
echo "$(date): 已达最大重试次数,放弃挂载。请检查 NAS 是否开机或 IP 是否正确。"
exit 1
fi
fi
done编辑
/etc/rc.local文件:vi /etc/rc.local
在
exit 0这一行的上面,添加一行:/opt/mount_nas.sh &
(
&代表让脚本在后台运行,不会拖慢系统启动速度)
开启smb共享
安装 Samba4 服务:在 OpenWrt 中,安装带网页界面的
luci-app-samba4包是最方便的选择,它会自动安装samba4-server等核心依赖。# 刷新软件源
apk update
# 安装带中文界面的 Samba4 包
apk add luci-app-samba4 luci-i18n-samba4-zh-cn安装完成后,需要重启一次路由器,让LuCI界面里出现“网络共享”菜单。
创建 Samba 用户及密码:即使我们在网页界面允许了
root用户,但root还没有设置自己的 Samba 专用密码。这一步需要在 SSH 中进行。# 为 root 用户设置 Samba 密码
smbpasswd -a root
# 检查文件权限,如果输出是类似 drwx------ 的样子,就意味着只有 root 用户才有权限,
# Samba 来宾账户 (nobody) 就会无法访问。
ls -ld /b860
chmod 777 /b860
# 修改文件夹里所有文件与文件夹的权限,确保读写权限
chmod -R 777 /b860系统会提示你输入并确认密码,这个密码可以和你OpenWrt的登录密码不同,它是一个独立的安全凭证。
**修改文件 **:
vi /etc/samba/smb.conf.template[global]
workgroup = WORKGROUP
security = user
map to guest = Bad User
#server min protocol = NT1
#client min protocol = NT1
[B860]
path = /b860
browseable = yes
read only = no
guest ok = yes
guest account = nobody
create mask = 0777
directory mask = 0777
# 将所有用户都当root看待。
force user = root
格式化虚拟硬盘并挂载
OpenWrt 中文社区软件包仓库
安装必要工具:
apk add fdisk e2fsprogs block-mount查看新硬盘的设备名称:使用 ``lsblk
命令找到你刚添加的硬盘。可能被识别为/dev/sdc、/dev/sdb或/dev/sda`。分区与格式化:以新硬盘为
/dev/sda为例,格式化。强烈建议格式化为ext4文件系统。请谨慎,以下命令会抹除新硬盘上的所有数据:mkfs.ext4 /dev/sda查看硬盘uuid:
blkid /dev/sdc1来获取分区的UUID,例如55657278-345f-4cf4-8d3c-34d8a83d06b2。使用UUID挂载更稳定,能避免设备编号变化导致的挂载失败问题。添加挂载配置:
vi /etc/config/fstabconfig 'mount'
option enabled '1'
option uuid '55657278-345f-4cf4-8d3c-34d8a83d06b2'
option target '/mnt/sdc1'
option fstype 'ext4'
option options 'rw,exec,sync'如果确实需要
opkg,可以自行安装,使其与apk共存。
从官方源下载opkgwget -P /tmp https://downloads.openwrt.org/releases/24.10.0/packages/x86_64/base/opkg_2022-02-24-d038e5b6-1_x86_64.ipk
提示:如果上述链接失效,请访问 OpenWrt 24.10 软件包目录 查找最新的 opkg 版本。
安装 opkg:apk add --allow-untrusted /tmp/opkg_*.ipk
使用 opkg 安装 luci-app-diskman
opkg install /path/to/luci-app-diskman_v0.2.11_all.ipk |
编译并安装luci-app-diskman
编译环境:debian-13.4.0-amd64-netinst
下载对应你固件版本的 SDK,就可以轻松编译你想要的
luci-app-diskman插件了。wget https://downloads.openwrt.org/releases/25.12.1/targets/x86/64/openwrt-sdk-25.12.1-x86-64_gcc-14.3.0_musl.Linux-x86_64.tar.zst
tar -xvf openwrt-sdk-25.12.1-x86-64_gcc-14.3.0_musl.Linux-x86_64.tar.zst
cd openwrt-sdk-25.12.1-x86-64_gcc-14.3.0_musl.Linux-x86_64
# 安装依赖
apt install build-essential flex gawk git gettext libncurses-dev libssl-dev python3-full python3-setuptools zlib1g-dev unzip subversion ccache libxml-parser-perl libjson-perl
apt install rsync file
# 克隆插件源码
git clone https://github.com/lisaac/luci-app-diskman.git package/luci-app-diskman
# 更新软件包索引
./scripts/feeds update -a
./scripts/feeds install -a
# 编译.apk 包:
make package/luci-app-diskman/compile V=s如果仍然提示缺失某些工具,可以运行
make prereq来专门检查并提示缺少哪些依赖:编译完成后,
.apk文件通常会存放在bin/packages/x86_64/base/目录下。安装编译:编译出的
.apk包没有官方签名,所以apk默认会拒绝安装。加上--allow-untrusted参数即可绕过签名检查:apk add --allow-untrusted /adsm/diskman/luci-app-diskman-0.2.13-r1.apk安装后验证:安装成功后,刷新 LuCI 界面,就能在 系统 → 磁盘管理 中找到 DiskMan 了。如果页面不显示,重启一下路由器或执行:
/etc/init.d/rpcd restart
安装 Docker 与 Docker Compose
- 核心是安装
dockerd(Docker 守护进程) 和docker-compose。apk add dockerd docker-compose
要解决磁盘问题
16G磁盘(/dev/sdb)并没有被充分利用,系统目前只使用了其中的 /dev/sdb1 (16M boot) 和 /dev/sdb2 (104M rom),而 overlay 文件系统却绑定到了一个只有 98.1M 的 loop 设备(loop0),导致可用空间不足 5MB。
你需要把 overlay 扩展到磁盘的空闲空间上,才能安装 Docker 等大软件。
查看磁盘分区表,确认有空闲空间fdisk -l /dev/sdb
应该能看到 /dev/sdb 大小为 16G,但只有三个很小分区(sdb1, sdb2, sdb128),剩余大量未分配空间。我们需要创建一个新分区来存放 overlay。
创建新分区(例如
/dev/sdb3)# 进入 fdisk 交互模式
fdisk /dev/sdb
# 在 fdisk 内部依次输入:
n # 新建分区
p # 主分区
3 # 分区编号(如果 3 已被占用,选其他编号,例如 3 应该是可用的)
# 然后直接按两次回车,使用默认起始和结束扇区(占用所有剩余空间)
w # 写入分区表并退出**Partition number (3-127, default 3): ** 直接回车 它会自动选择默认值
3。First sector (246272-33554398, default 247808):*直接按回车键,使用默认值
247808即可。Last sector, +/-sectors or +/-size{K,M,G,T,P}也*直接按回车,让它使用剩余的全部空间。
最后输入w写入分区表。fdisk /dev/sdb
n
First sector (246272-33554398, default 247808): ← 直接回车
Last sector, +/-sectors or +/-size{K,M,G,T,P} (247808-33554398, default 33554398): ← 直接回车
Created a new partition 3 of type 'Linux filesystem' and of size 15.9 GiB.
Command (m for help): w ← 输入 w 然后回车格式化新分区为 ext4:
mkfs.ext4 /dev/sdb3将当前 overlay 内容迁移到新分区
# 挂载新分区到一个临时目录
mkdir -p /mnt/newroot
mount /dev/sdb3 /mnt/newroot
# 复制当前 overlay 的所有文件到新分区(保留权限)
cp -a /overlay/* /mnt/newroot/
# 卸载临时挂载
umount /mnt/newroot修改系统配置,使新分区成为 overlay:编辑
/etc/config/fstab,获取uuidblkid /dev/sdb3
注意:原来的那个target '/overlay'且enabled '0'的项可以保留(不会被使用),或者你也可以把它删除。建议保留并保持enabled '0',避免冲突。config 'mount'
option enabled '1'
option uuid '这里填/sdb3的UUID'
option target '/overlay'
option fstype 'ext4'
option options 'rw,exec,noatime'重启后,再次运行
df -h,你应该会看到/overlay变为/dev/sdb3,容量接近 16G,使用率很低。
再次安装
安装:
apk add dockerd docker-compose安装完成后,启动并设置 Docker 开机自启,然后验证安装是否成功:
/etc/init.d/dockerd start
/etc/init.d/dockerd enable
docker -v
docker-compose --version配置 Docker 存储目录:为了不影响路由器有限的存储空间,建议将默认的
/opt/docker/数据目录迁移到你的挂载硬盘上。假设你希望 Docker 的数据目录为/awrt/docker。停止服务
/etc/init.d/dockerd stop
/etc/init.d/docker.socket stop # 如果 docker.socket 服务存在,也执行:迁移现有数据(如果之前已有一些镜像或容器)
# 如果 /opt/docker 下已有内容,可以复制过去
cp -a /opt/docker/. /awrt/docker/如果只安装
1panel面板,修改vi /etc/docker/daemon.json{
"data-root": "/awrt/docker",
"registry-mirrors": [
"https://docker.1panel.live",
"https://docker.1panel.dev",
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://docker.xuanyuan.me",
"https://atomhub.openatom.cn"
]
}{
"data-root": "/awrt/docker/",
"log-level": "warn",
"iptables": true,
"ip6tables": false,
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io"
]
}
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental":true,
"ip6tables":true
}验证配置是否生效:
docker info | grep -A 5 "Docker Root Dir"返回配置目录验证镜像源是否生效:
docker info | grep -A 5 "Registry Mirrors"查看当前 Docker 已配置的镜像加速器(如果配置过)。修改 UCI 配置
编辑
/etc/config/dockerd,找到config globals 'globals'部分,修改data_root行的值:option data_root '/awrt/docker'
# 可以用 sed 命令快速修改:
sed -i 's|option data_root .*|option data_root '\''/b860/docker'\''|' /etc/config/dockerd
#将脚本中的DOCKER_CONF_DIR变量值从可能错误的/tmp/dockerd纠正为/awrt/docker
sed -i 's/^DOCKER_CONF_DIR=.*/DOCKER_CONF_DIR="\/awrt\/docker"/' /etc/init.d/dockerd安装 LuCI 管理界面: luci-app-dockerman
apk add luci-app-dockerman配置镜像源:通过
/etc/config/dockerd修改OpenWrt 将 Docker 的配置整合到了其标准的 UCI
dockerd配置文件中,无需手动处理daemon.json定位到config globals 'globals'部分。如果看到list registry_mirrors行,请移除行首的#。如果没有,请手动添加。config globals 'globals'
# option alt_config_file '/etc/docker/daemon.json'
option data_root '/awrt/docker/'
option log_level 'warn'
option iptables '1'
# list dns '172.17.0.1'
# list registry_mirrors 'https://<my-docker-mirror-host>'
# list registry_mirrors 'https://hub.docker.com'
list registry_mirrors 'https://docker.1ms.run'
list registry_mirrors 'https://docker.m.daocloud.io'
list registry_mirrors 'https://docker.xuanyuan.me'
list registry_mirrors 'https://atomhub.openatom.cn'
收藏代码
等待磁盘加载后启动docker :
iv /etc/init.d/dockerd在start_service() {函数的第一行加上# 等待 /b860 挂载点出现(最多等 60 秒,每 2 秒检查一次)
local waited=0
while ! mountpoint -q /b860 && [ $waited -lt 60 ]; do
sleep 5
waited=$((waited + 2))
done
# 如果超时后仍未挂载,记录日志但继续启动(可选)
if ! mountpoint -q /b860; then
logger -t dockerd "警告: /b860 挂载不成功, Ddocker启动失败"
fi重装Docker
如果以上所有步骤都无法解决,日志又指向不明的“软件包损坏”,那么最后的手段是:备份配置、彻底卸载、重装Docker。这可以解决绝大部分因配置文件残留或软件包损坏导致的疑难杂症。
重装命令如下:
# 1. 停止并禁用 Docker 服务
/etc/init.d/dockerd stop
/etc/init.d/dockerd disable
# 2. 要先删除界面
apk del luci-app-dockerman
# 3. 彻底移除 Docker 相关软件包
apk del dockerd docker docker-compose
# 4. 清理残留的配置文件和数据(请确保 /awrt/docker 路径正确)
rm -rf /etc/docker /etc/config/dockerd /awrt/docker
# 检查是否还有其他 Docker 相关的包(如 docker-cli、containerd 等)需要清理:
apk list | grep docker
# 5. 重新安装 Docker
apk update
apk add dockerd docker docker-compose
# 6. 重新配置 Docker
# 请参考历史对话,将 /awrt/docker 恢复为数据目录如果出现如下问题:
30/30) Installing dockerd (27.3.1-r4)
Installing file to etc/init.d/dockerd.apk-new
Executing dockerd-27.3.1-r4.post-install
* /etc/rc.common: line 231: mountpoint: not found
* /etc/rc.common: line 231: mountpoint: not found安装 mountpoint 依赖
apk add util-linux
更换主题
OpenWrt软件包各主题样式预览
搜索一下可用的主题:apk search luci-theme
luci-theme-openwrt (官方默认主题) |
安装luci-theme-argon主题
wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.3/luci-theme-argon-2.4.3-r20250722.apk
# 也可以手动下载到 /awrt # --allow-untrusted 参数来强制安装这个我们信任的第三方主题包
apk add --allow-untrusted ./luci-theme-argon-2.4.3-r20250722.apk**激活 Argon 主题 **
uci set luci.main.mediaurlbase='/luci-static/argon'
uci commit luci
/etc/init.d/uhttpd restart自定义 Argon 主题:如果希望进一步自定义 Argon 主题(比如更换登录背景、明暗模式等),可以尝试手动安装
luci-app-argon-config。不过由于它目前可能只提供.ipk格式,我们可以用opkg来安装(如果系统里有opkg的话)也可以用
apk add luci-theme-material主题,在 语言和界面 标签页 → 主题 下拉选择material
系统升级
下载固件到
/awrt(不是/tmp)cd /awrt
wget https://downloads.openwrt.org/releases/25.12.2/targets/x86/64/openwrt-25.12.2-x86-64-generic-squashfs-combined-efi.img.gz
# 升级
sysupgrade -v /awrt/openwrt-25.12.2-x86-64-generic-squashfs-combined-efi.img.gz-v显示详细信息,系统会自动将镜像解压到/tmp但会尝试复用空间。如果仍然提示空间不足,可以添加-f强制跳过空间检查(风险较小,因为你的 overlay 实际足够大):sysupgrade -v -f /awrt/openwrt-25.12.2-x86-64-generic-squashfs-combined-efi.img.gz
编译openwrt
编译环境准备(Debian 13)
打开终端,使用普通用户(非 root)执行以下命令:
sudo apt update |
拉取源码并更新feeds
#创建新文件夹 |
若希望使用官方源码,可替换为:
git clone https://git.openwrt.org/openwrt/openwrt.git