记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

OpenWrt 固件自编译教程:从入门到精通!

    OpenWrt 固件自编译教程:从入门到精通!

编译环境准备

创建用户

不推荐使用 root 用户进行编译,所以先使用 root 权限创建一个用户,以创建 helloworld 用户为例。

# 添加用户                 

adduser helloworld

为新用户设置密码

passwd helloworld

为该用户指定命令解释程序

usermod -s /bin/bash helloworld

为该用户添加 sudo 权限

chmod u+w /etc/sudoers

 /etc/sudoers 文件默认是只读文件,因此需先添加 sudoers 文件的写权限

chmod u+w /etc/sudoers

编辑 sudoers 文件

vim /etc/sudoers

 

#找到这行 root ALL=(ALL) ALL 追加新行

helloworld ALL=(ALL:ALL) ALL

保存修改后,安全考虑建议撤销 sudoers 文件写权限

chmod u-w /etc/sudoers

创建新用户会自动创建一个以用户名命名的新目录,需要为新目录添加读写权限

chown openwrt:openwrt -R /home/helloworld/

 root 用户切换使用新用户

# 运行两次,并输入新用户的密码进行切换

su helloworld

从此刻开始,以非 root 用户执行编译过程的所有操作。

更新本地环境

# 更新软件列表、升级软件包

sudo sh -c "apt update && apt upgrade -y"

安装依赖

ubuntu 20.04 (推荐系统),安装依赖

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

ubuntu 18.04 安装依赖

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs gcc-multilib g++-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler antlr3 gperf wget swig rsync

首次编译步骤

不要使用 root 用户!

拉取源码

拉取源码到编译环境

git clone https://github.com/coolsnowwolf/lede.git openwrt

添加自定义源

注:以下是自己正在使用的软件源,这里你也可以换成自己喜欢的软件源

# 进入openwrt目录

cd ~/openwrt

 

# 添加自定义源

cat >> feeds.conf.default <<EOF

src-git kenzo https://github.com/kenzok8/openwrt-packages

src-git passwall https://github.com/xiaorouji/openwrt-passwall

EOF

更新下载软件仓库的源码到本地,并安装自定义源包含的软件包

./scripts/feeds update -a && ./scripts/feeds install -a

单独添加软件包(可选项)

如果需要单独添加软件,请拉取源码到 pack­age 目录之下。示例如下:

# 添加 OpenAppFilter 应用过滤插件

git clone https://github.com/destan19/OpenAppFilter package/OpenAppFilter

设置默认主题(可选项)

注:此操作请在编译前执行,设置 ar­gon 为默认主题,以此为例举一反三

# 删除自定义源默认的 argon 主题

rm -rf package/lean/luci-theme-argon

 

# 拉取 argon 原作者的源码

git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git package/lean/luci-theme-argon

 

# 替换默认主题为 luci-theme-argon

sed -i 's/luci-theme-bootstrap/luci-theme-argon/' feeds/luci/collections/luci/Makefile

设置路由器默认的 LAN IP(可选项)

注:此操作请在编译前执行

# 设置默认IP 192.168.199.1

sed -i 's/192.168.1.1/192.168.199.1/g' package/base-files/files/bin/config_generate

仅制作.config文件,无需本地编译固件(可选项)

根据自己的定制需求,调整 Open­Wrt 系统组件

make menuconfig

通过以下命令行获得 seed.config 配置文件,然后使用 GitHub Ac­tions 云编译。

# 若在调整OpenWrt系统组件的过程有多次保存操作,则建议先删除.config.old文件再继续操作

rm -f .config.old

 

# 根据编译环境生成默认配置

make defconfig

 

# 对比默认配置的差异部分生成配置文件(可以理解为增量)

./scripts/diffconfig.sh > seed.config

若需要编译固件

根据自己的定制需求,调整 Open­Wrt 系统组件

make menuconfig

下载编译所需的软件包

make download -j8 V=s

编译 Open­Wrt 固件

# -j1:单线程编译

make -j1 V=s

单线程编译可提高编译成功率,但过程非常漫长,也完全取决于机器的性能。编译完成后固件输出路径:/openwrt/bin/targets/ 之下。

二次编译步骤

不要使用 root 用户!

更新本地编译环境

# 更新软件列表、升级软件包

sudo sh -c "apt update && apt upgrade -y"

 

# 拉取最新源码

cd ~/openwrt && git pull

 

# 更新下载安装订阅源包含的软件包

cd ~/openwrt

./scripts/feeds update -a && ./scripts/feeds install -a

清理旧文件

# 删除/bin/build_dir目录中的文件

make clean

如果要更换架构,例如要从 x86_64 换到 MediaTek Ralink MIPS 建议执行以下命令深度清理 /bin /build_dir 目录的中的文件 (make clean) 以及 /staging_dir/toolchain/tmp  /logs 中的文件。

make dirclean

如果需要对组件重新调整,则建议先删除旧配置

rm -rf ./tmp && rm -rf .config

根据自己的定制需求,再次调整 Open­Wrt 系统组件

make menuconfig

下载编译所需的软件包

make download -j8 V=s

编译 Open­Wrt 固件

make -j$(nproc) || make -j1 || make -j1 V=s

二次编译可以优先使用多线程,报错会自动使用单线程,仍然报错会单线程执行编译并输出详细日志。

附加内容

如果没有特殊的定制需求,运行 make menuconfig 命令配置目标架构完成后,进入 LUCI --> Applications 选择需要的插件,进入 LUCI --> Themes 选择喜欢的主题皮肤,编译即可。

如果是硬路由务必记得勾选 luci-app-mtwifi 闭源的 Wi-Fi 驱动

1. x86_64 平台

Target System (x86)  --->

Subtarget (x86_64)  --->

Target Profile (Generic x86/64)  --->

无特殊需求,那么 Target Images 勾选

[*] squashfs (NEW)

[*] Build GRUB images (Linux x86 or x86_64 host only) (NEW)

[*] GZip images (NEW)

自定义固件大小

(32) Kernel partition size (in MB) (NEW)

(400) Root filesystem partition size (in MB) (NEW)

如果因为勾选基于 EXT4 文件系统编译固件而造成编译报错,建议调高 Root filesystem partition size

2. 常用插件列表

在调整 Open­Wrt 系统组件时:[*] 表示编译软件包并加入到固件;[M] 表示编译软件包但不加入固件;[ ] 则表示不对软件包进行任何设置。

## 插件类

LuCI ---> Applications ---> luci-app-adbyby-plus   #去广告

LuCI ---> Applications ---> luci-app-arpbind  #IP/MAC绑定

LuCI ---> Applications ---> luci-app-autoreboot  #高级重启

LuCI ---> Applications ---> luci-app-aliddns   #阿里DDNS客户端

LuCI ---> Applications ---> luci-app-ddns   #动态域名 DNS

LuCI ---> Applications ---> luci-app-filetransfer  #文件传输

LuCI ---> Applications ---> luci-app-firewall   #添加防火墙

LuCI ---> Applications ---> luci-app-frpc   #内网穿透 Frp

LuCI ---> Applications ---> luci-app-mwan3   #MWAN负载均衡

LuCI ---> Applications ---> luci-app-nlbwmon   #网络带宽监视器

LuCI ---> Applications ---> luci-app-ramfree  #释放内存

LuCI ---> Applications ---> luci-app-samba   #网络共享(Samba)

LuCI ---> Applications ---> luci-app-sqm  #流量智能队列管理(QOS)

LuCI ---> Applications ---> luci-app-openclash #你懂的那只猫

LuCI ---> Applications ---> luci-app-dnsfilter #广告过滤

LuCI ---> Applications ---> luci-app-passwall #不敢解释

LuCI ---> Applications ---> luci-app-mtwifi #闭源Wi-Fi驱动

LuCI ---> Applications ---> luci-app-eqos #根据IP控制网速

LuCI ---> Applications ---> luci-app-syncdial #薛定谔的多拨应用

LuCI ---> Applications ---> luci-app-zerotier #虚拟局域网

LuCI ---> Applications ---> luci-app-jd-dailybonus #京东签到自动领豆

LuCI ---> Applications ---> luci-app-oaf #应用过滤神器

LuCI ---> Applications ---> luci-app-watchcat #断网检测功能与定时重启

LuCI ---> Applications ---> luci-app-wol   #WOL网络唤醒

LuCI ---> Applications ---> luci-app-wrtbwmon  #实时流量监测

LuCI ---> Applications ---> luci-app-upnp   #通用即插即用UPnP(端口自动转发)

LuCI ---> Applications ---> luci-app-argon-config #Argon主题设置

 

# 常用主题类

LuCI ---> Themes ---> luci-theme-argon

 

# 网络相关 (普通用户用不上)

Network ---> IP Addresses and Names ---> ddns-scripts_cloudflare.com-v4

Network ---> IP Addresses and Names --->  bind-dig

Network ---> Routing and Rediction ---> ip-full

Network ---> File Transfer ---> curl

Network ---> File Transfer ---> wget-ssl

Network ---> iperf3

Network ---> ipset

Network ---> socat #多功能的网络工具

Base system --> dnsmasq-full #DNS缓存和DHCP服务(dnsmasq-fulldnsmasq二者不可共存)

 

# 工具类 (普通用户用不上)

Utilities --> Editors --> nano #Nano 编辑器

Utilities --> Shells --> bash #命令解释程序

Utilities --> disc --> fdisk #MBR分区工具

Utilities --> disc --> gdisk #GBT分区工具

Utilities --> disc --> lsblk #列出磁盘设备及分区查看工具

Utilities --> Filesystem --> resize2fs #调整文件系统大小

 

# IPv6(未来运营商可能不再提供 IPv4 公网地址,有远程访问需求的建议加入)

Extra packages ---> ipv6helper (勾选此项即可,下面几项自动勾选)

Network ---> odhcp6c

Network ---> odhcpd-ipv6only

LuCI ---> Protocols ---> luci-proto-ipv6

LuCI ---> Protocols ---> luci-proto-ppp

3. OpenWrt 单独编译 ipk 插件

克隆源码

以编译 Rosy 主题为例:

# 进入 OpenWrt 目录

cd ~/openwrt/

 

# 克隆 Rosy 主题源码到 package 目录

git clone https://github.com/rosywrt/luci-theme-rosy.git package/luci-theme-rosy

配置组件

make menuconfig

进入 LuCI --> Themes 选项找到 luci-theme-rosy

然后配置该选项为 'M',保存退出。M 表示选中插件但不编译进固件。如下:

<M> luci-theme-rosy....................... Rosy Theme

编译插件

make package/luci-theme-rosy/luci-theme-rosy/compile V=99

注:V=99 表示输出详细的 de­bug 信息

我这里是 x86_64 架构,编译完成插件包默认存放路径:~/openwrt/bin/packages/x86_64/base 目录下

上传 IPK 软件包到 OpenWrt

scp luci-theme-rosy_git-19.069.38477-5ed9705-1_all.ipk root@192.168.199.1:/tmp

安装 IPK 软件包

SSH 进入路由器,安装 tmp 目录下的 ipk 软件包,例如

opkg install /tmp/luci-theme-rosy_git-19.069.38477-5ed9705-1_all.ipk

清理编译

编译完成,若需要清理刚刚编译的插件,可通过以下命令:

make package/luci-theme-rosy/luci-theme-rosy clean

虽然 Open­Wrt 编译出的内核模块也是一个 ipk 包,它们的名字基本会以 kmod- 作为前缀,但它是无法独立地运行的,内核对内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,因此对于新手用户尽量不要尝试卸载 / 安装内核模块,这极大可能会影响 Open­Wrt 正常使用。

OpenWrt 新手配置使用指南

1、更改 OpenWrt 默认登录密码

若没有自行替换修改过管理账号密码,Open­Wrt 默认账号 root 密码 password,若需要更改 Open­Wrt 默认登录密码则依次进入「系统」 - 「管理权」 ,在「主机密码」的输入框输入新密码,保存应用。

 2、更换界面/主题

「系统」 - 「系统」 - 「语言和界面」,在「主题」下拉框选择更换新主题 / 界面,保存应用。

 3、修改时区

「系统」 - 「系统」 - 「系统属性」 - 「常规设置」,在「时区」下拉框选择 Asia/Shanghai,保存应用。

 4、更换 LAN IP 地址

「网络」 - 「接口」 - LAN - 「修改」,在「IPv4 地址」自定义需要的 LAN IP 地址

 5、作为主路由拨号上网

将猫设置为桥接模式,通过路由器来实现拨号。通过「网络」 - 「接口」找到 WAN 口,修改 Open­WRT WAN 口协议将其切换为 PP­PoE。填写宽带运营商提供的账号密码(PAP/​CHAP 用户名:宽带账号;PAP/​CHAP 密码:宽带密码),保存并应用。

 6、禁用 IPv6

§  删除「网络」- 「接口」 中的 WAN6 接口。

§  在「网络」 -「接口」 -WAN-「高级设置」,使用内置的ipv6管理(取消勾选);

§  在「网络」 -「接口」 -LAN」,在「基本设置」将 IPv6 分配长度设置为已禁用;在「高级设置」使用内置的 ipv6 管理(取消勾选);在「IPv6 设置」,更改设置如下:

·         路由通告服务:已禁用

·         DHCPv6 服务:已禁用

·         NDP 代理:已禁用

详细的图文介绍,请移步 -->OpenWrt 如何彻底禁用 IPv6 功能》

7、动态解析/P2P 实现远程访问

如果有公网 IP,首选 DDNS 方案。常用的插件有 AliD­DNS -> 插件下载  腾讯云 DDNS -> 插件下载 (两款插件使用门槛较低)

如果没有公网 IP,较经济的方案:推荐 Ze­roTier -> 插件下载  DDNSTO -> 插件安装(基本不存在上手的门槛,因为不直接通过公网 IP 因此也无需考虑防火墙设置、端口转发)

详细的配置过程已有相关文章,请移步 -->OpenWrt 远程访问:ddns 动态解析和 ZeroTier 虚拟局域网》 以及 Tailscale:一款开箱即用的虚拟局域组网工具!》

8SSH 开启远程访问

「系统」 - 「管理权」 - SSH 访问」 - Drop­bear 实例」 ,变更「接口」 「未指定」。

 默认 SSH 端口为 22,可自行更换使用其他可用端口。

9、更换为国内软件源

由于国内的软件源均已支持 https,更换软件源前需确保 curl 支持 ssl

opkg update

opkg install ca-certificates luci-ssl-openssl

「系统」 - 「软件包」 - 「配置」,完整复制一份「发行版软件源」所有条目,粘贴到「自定义软件源」输入框,将其中的 http://downloads.openwrt.org/ 全部替换为 https://mirrors.cloud.tencent.com/lede/ (腾讯镜像源)或者 https://mirrors.ustc.edu.cn/lede/ (中科大镜像源) ,提交。

也可以直接使用 sed 命令替换软件源为腾讯镜像源。

sed -i 's_downloads.openwrt.org_mirrors.cloud.tencent.com/lede_' /etc/opkg/distfeeds.conf

10OpenWrt 插件的安装与卸载

通过 LuCi 界面管理软件包

「系统」 - 「软件包」 -「动作」,可在「已安装软件包」的列表中找到需要卸载的包名称进行卸载,同时通过在「过滤器」的输入框内输入插件的关键词,在软件仓库中查找需要的安装包进行安装。大多数插件可通过 LuCi 进行安装 / 卸载。

通过SSH终端安装/更新/卸载

1、如果是第三方下载的软件包可通过终端命令进行安装,可通过 scp 命令上传到 Open­Wrt  tmp 目录进行安装。(推荐上传至 tmp 是因为它占用的是内存而不占用实际的存储空间)

# 1、通过Scp上传文件

scp -P [Port] [PackageName] root@[OpenWrt LANIP]:/tmp

 

## 示例

## 上传本地当前路径下的luci-app-aliddns包文件到LANIP192.168.1.1tmp目录

scp -P 22 ./luci-app-aliddns_v0.3.0-1.ipk root@192.168.1.1:/tmp

 

# 2、在OpenWrt终端安装已上传的包

opkg install /tmp/[PackageName]

 

## 示例

opkg install /tmp/luci-app-aliddns_v0.3.0-1.ipk

2SSH 终端 opkg 包管理常见命令

# 获取软件列表

opkg list

 

# 安装

opkg install [PackageName]

 

# 卸载

opkg remove [PackageName]

 

# 更新软件包

opkg upgrade [PackageName]

 

# 更新所有可被更新的软件包

opkg upgrade $(opkg list-upgradable | awk '{print $1}')

注:因内核对内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,因此尽量不要尝试卸载 / 安装内核模块,极大可能会影响 Open­Wrt 正常使用。

11、配置旁路由

已有相关文章供参考,请移步 --> OpenWrt 配置旁路由教程》

12sysupgrade 更新固件

1)先本地上传固件到 Open­Wrt  tmp 目录

# 默认为22端口可以不追加-P参数

scp -P 22 ./openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin root@192.168.1.1:/tmp

2Open­Wrt 终端使用 sysupgrade 命令更新固件,根据个人的性格、喜好、胆识选择适合自己的姿势尝试刷入更新包

# 保留配置升级

sysupgrade -i /tmp/openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin

 

# 不保留配置升级

sysupgrade -n /tmp/openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin

 

# 梭哈模式(不保留配置,强制更新)不计较得失成败,不要怂就是干

sysupgrade -n -F /tmp/openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin

13OpenWrt 扩展容量

1. 前期准备

1.1 如果你怕操作出错,可进入 虚拟机 找到正在运行的 Open­Wrt 虚拟机,点击 操作 - 拍快照 方便出错时可以快速恢复。

 1.2 通过 XshellPutty SSH 终端工具登录 Open­Wrt ,安装磁盘分区工具:

opkg update

opkg install cfdisk fdisk e2fsprogs

命令行中 cfdisk fdisk 均为磁盘分区工具,e2fsprogs 包含了 mkfs 命令,用于格式化分区。

2. 方案一:利用剩余空间扩容

2.1 创建新分区

SSH 终端运行 cfdisk 命令进入磁盘分区界面,通过键盘上下键切换到 Free space (剩余空间),左右键切换至NEW (新增分区),然后按下回车键。

 分区类型设置为 Primary (主分区),按下回车键。

 左右键切换 Write 按下回车键,写入新分区。

 输入 yes 按下回车键,确认写入新分区。

 切换 Quit ,按下回车键退出。运行 fdisk -l 命令,查看是否成功创建新分区。

 2.2 格式化新分区

SSH 终端运行下面的命令,将新分区的文件系统格式化为 ext4

mkfs.ext4 /dev/sda3

2.3 挂载新分区

进入 Open­Wrt 管理后台,依次点击 系统 - 挂载点 找到并点击全局设置中的 生成配置 

  挂载点 找到创建的新分区,点击 修改 重新调整挂载项目的设置。

 勾选 启用此挂载点挂载点 选择为 作为根文件系统使用 ,完整复制根目录准备中的所有命令行后,点击 保存并应用

 ️ 上面复制得到的命令行不要直接运行!!!不要直接运行!!!否则报错。

需要手动修改命令行中 mount /dev/sda1 /tmp/extroot  cfdisk 创建的新分区盘符,例如这里应修改为mount /dev/sda3 /tmp/extroot,然后进入 SSH 终端,运行修改后的完整命令行,如下:

mkdir -p /tmp/introot

mkdir -p /tmp/extroot

mount --bind / /tmp/introot

mount /dev/sda3 /tmp/extroot # 修改后

tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -

umount /tmp/introot

umount /tmp/extroot

回车键到底,直到跑完所有命令行。然后运行 reboot 重启 Open­Wrt

 重新进入 SSH 终端运行 df -h ,如上图表示扩容成功~

3. 方案二:通过新增磁盘扩容

3.1 添加新磁盘

打开群晖 VMM 找到正在运行的 Open­Wrt 虚拟机,选择 关机 - 强制停止

  虚拟机 中找到已经停止运行的 Open­Wrt 虚拟机,依次选择 操作 - 编辑,找到 存储 设置项,自定义磁盘空间大小(例如 10GB),点击 + 号,新增一块磁盘,例如 虚拟盘(建议勾选空间回收),点击 确定 保存设置。

 回到 虚拟机 ,点击已停止运行的 Open­Wrt 虚拟机,执行 开机 操作。

 3.2 磁盘分区

SSH 终端连接 Open­Wrt,运行下面命令查看磁盘信息

fdisk -l

此时,会显示一个未被使用的磁盘 sdb 即新磁盘,,屏幕打印信息如下:

root@OpenWrt:~# fdisk -l

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x711b2af7

 

Device     Boot Start     End Sectors  Size Id Type

/dev/sda1  *      512   66047   65536   32M 83 Linux

/dev/sda2       66560 1704959 1638400  800M 83 Linux

 

 

Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

若要使用这块新磁盘,就需要对新磁盘进行分区,运行以下命令:

fdisk /dev/sdb

创建一个主分区,分区操作步骤如下:

root@OpenWrt:~# fdisk /dev/sdb

 

Welcome to fdisk (util-linux 2.37).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

Device does not contain a recognized partition table.

Created a new DOS disklabel with disk identifier 0x1d291a31.

 

Command (m for help): n (输入 n 创建分区)

Partition type

   p   primary (0 primary, 0 extended, 4 free)

   e   extended (container for logical partitions)

Select (default p): p (输入 p 创建主分区)

Partition number (1-4, default 1): (回车键,默认创建一个分区)

First sector (2048-20971519, default 2048): (回车键)

Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519):

 

Created a new partition 1 of type 'Linux' and of size 10 GiB.

 

Command (m for help): w (输入 w 写入分区表)

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

查看磁盘信息:

fdisk -l

屏幕打印信息如下:

root@OpenWrt:~# fdisk -l

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x711b2af7

 

Device     Boot Start     End Sectors  Size Id Type

/dev/sda1  *      512   66047   65536   32M 83 Linux

/dev/sda2       66560 1704959 1638400  800M 83 Linux

 

 

Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x1d291a31

 

Device     Boot Start      End  Sectors Size Id Type

/dev/sdb1        2048 20971519 20969472  10G 83 Linux

其中 /dev/sdb1 即新创建的新分区分配的盘符

3.3 格式化

将分区格式化 ext4 文件系统:

mkfs.ext4 /dev/sdb1

3.4 挂载分区

进入 Open­Wrt 管理后台,依次点击 系统 - 挂载点 找到并点击全局设置中的 生成配置 

  挂载点 找到创建的新分区,点击 修改 重新调整挂载项目的设置。

 勾选 启用此挂载点挂载点 选择为 作为根文件系统使用 ,完整复制根目录准备中的所有命令行后,点击 保存并应用

 ️ 上面复制得到的命令行不要直接运行!!!不要直接运行!!!否则报错。

需要手动修改命令行中 mount /dev/sda1 /tmp/extroot  fdisk 创建的新分区盘符,例如这里应修改为mount /dev/sdb1 /tmp/extroot,然后进入 SSH 终端,运行修改后的完整命令行,如下:

mkdir -p /tmp/introot

mkdir -p /tmp/extroot

mount --bind / /tmp/introot

mount /dev/sdb1 /tmp/extroot # 修改后

tar -C /tmp/introot -cvf - . | tar -C /tmp/e

    OpenWrt 固件自编译教程:从入门到精通!

编译环境准备

创建用户

不推荐使用 root 用户进行编译,所以先使用 root 权限创建一个用户,以创建 helloworld 用户为例。

# 添加用户                 

adduser helloworld

为新用户设置密码

passwd helloworld

为该用户指定命令解释程序

usermod -s /bin/bash helloworld

为该用户添加 sudo 权限

chmod u+w /etc/sudoers

 /etc/sudoers 文件默认是只读文件,因此需先添加 sudoers 文件的写权限

chmod u+w /etc/sudoers

编辑 sudoers 文件

vim /etc/sudoers

 

#找到这行 root ALL=(ALL) ALL 追加新行

helloworld ALL=(ALL:ALL) ALL

保存修改后,安全考虑建议撤销 sudoers 文件写权限

chmod u-w /etc/sudoers

创建新用户会自动创建一个以用户名命名的新目录,需要为新目录添加读写权限

chown openwrt:openwrt -R /home/helloworld/

 root 用户切换使用新用户

# 运行两次,并输入新用户的密码进行切换

su helloworld

从此刻开始,以非 root 用户执行编译过程的所有操作。

更新本地环境

# 更新软件列表、升级软件包

sudo sh -c "apt update && apt upgrade -y"

安装依赖

ubuntu 20.04 (推荐系统),安装依赖

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

ubuntu 18.04 安装依赖

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs gcc-multilib g++-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler antlr3 gperf wget swig rsync

首次编译步骤

不要使用 root 用户!

拉取源码

拉取源码到编译环境

git clone https://github.com/coolsnowwolf/lede.git openwrt

添加自定义源

注:以下是自己正在使用的软件源,这里你也可以换成自己喜欢的软件源

# 进入openwrt目录

cd ~/openwrt

 

# 添加自定义源

cat >> feeds.conf.default <<EOF

src-git kenzo https://github.com/kenzok8/openwrt-packages

src-git passwall https://github.com/xiaorouji/openwrt-passwall

EOF

更新下载软件仓库的源码到本地,并安装自定义源包含的软件包

./scripts/feeds update -a && ./scripts/feeds install -a

单独添加软件包(可选项)

如果需要单独添加软件,请拉取源码到 pack­age 目录之下。示例如下:

# 添加 OpenAppFilter 应用过滤插件

git clone https://github.com/destan19/OpenAppFilter package/OpenAppFilter

设置默认主题(可选项)

注:此操作请在编译前执行,设置 ar­gon 为默认主题,以此为例举一反三

# 删除自定义源默认的 argon 主题

rm -rf package/lean/luci-theme-argon

 

# 拉取 argon 原作者的源码

git clone -b 18.06 https://github.com/jerrykuku/luci-theme-argon.git package/lean/luci-theme-argon

 

# 替换默认主题为 luci-theme-argon

sed -i 's/luci-theme-bootstrap/luci-theme-argon/' feeds/luci/collections/luci/Makefile

设置路由器默认的 LAN IP(可选项)

注:此操作请在编译前执行

# 设置默认IP 192.168.199.1

sed -i 's/192.168.1.1/192.168.199.1/g' package/base-files/files/bin/config_generate

仅制作.config文件,无需本地编译固件(可选项)

根据自己的定制需求,调整 Open­Wrt 系统组件

make menuconfig

通过以下命令行获得 seed.config 配置文件,然后使用 GitHub Ac­tions 云编译。

# 若在调整OpenWrt系统组件的过程有多次保存操作,则建议先删除.config.old文件再继续操作

rm -f .config.old

 

# 根据编译环境生成默认配置

make defconfig

 

# 对比默认配置的差异部分生成配置文件(可以理解为增量)

./scripts/diffconfig.sh > seed.config

若需要编译固件

根据自己的定制需求,调整 Open­Wrt 系统组件

make menuconfig

下载编译所需的软件包

make download -j8 V=s

编译 Open­Wrt 固件

# -j1:单线程编译

make -j1 V=s

单线程编译可提高编译成功率,但过程非常漫长,也完全取决于机器的性能。编译完成后固件输出路径:/openwrt/bin/targets/ 之下。

二次编译步骤

不要使用 root 用户!

更新本地编译环境

# 更新软件列表、升级软件包

sudo sh -c "apt update && apt upgrade -y"

 

# 拉取最新源码

cd ~/openwrt && git pull

 

# 更新下载安装订阅源包含的软件包

cd ~/openwrt

./scripts/feeds update -a && ./scripts/feeds install -a

清理旧文件

# 删除/bin/build_dir目录中的文件

make clean

如果要更换架构,例如要从 x86_64 换到 MediaTek Ralink MIPS 建议执行以下命令深度清理 /bin /build_dir 目录的中的文件 (make clean) 以及 /staging_dir/toolchain/tmp  /logs 中的文件。

make dirclean

如果需要对组件重新调整,则建议先删除旧配置

rm -rf ./tmp && rm -rf .config

根据自己的定制需求,再次调整 Open­Wrt 系统组件

make menuconfig

下载编译所需的软件包

make download -j8 V=s

编译 Open­Wrt 固件

make -j$(nproc) || make -j1 || make -j1 V=s

二次编译可以优先使用多线程,报错会自动使用单线程,仍然报错会单线程执行编译并输出详细日志。

附加内容

如果没有特殊的定制需求,运行 make menuconfig 命令配置目标架构完成后,进入 LUCI --> Applications 选择需要的插件,进入 LUCI --> Themes 选择喜欢的主题皮肤,编译即可。

如果是硬路由务必记得勾选 luci-app-mtwifi 闭源的 Wi-Fi 驱动

1. x86_64 平台

Target System (x86)  --->

Subtarget (x86_64)  --->

Target Profile (Generic x86/64)  --->

无特殊需求,那么 Target Images 勾选

[*] squashfs (NEW)

[*] Build GRUB images (Linux x86 or x86_64 host only) (NEW)

[*] GZip images (NEW)

自定义固件大小

(32) Kernel partition size (in MB) (NEW)

(400) Root filesystem partition size (in MB) (NEW)

如果因为勾选基于 EXT4 文件系统编译固件而造成编译报错,建议调高 Root filesystem partition size

2. 常用插件列表

在调整 Open­Wrt 系统组件时:[*] 表示编译软件包并加入到固件;[M] 表示编译软件包但不加入固件;[ ] 则表示不对软件包进行任何设置。

## 插件类

LuCI ---> Applications ---> luci-app-adbyby-plus   #去广告

LuCI ---> Applications ---> luci-app-arpbind  #IP/MAC绑定

LuCI ---> Applications ---> luci-app-autoreboot  #高级重启

LuCI ---> Applications ---> luci-app-aliddns   #阿里DDNS客户端

LuCI ---> Applications ---> luci-app-ddns   #动态域名 DNS

LuCI ---> Applications ---> luci-app-filetransfer  #文件传输

LuCI ---> Applications ---> luci-app-firewall   #添加防火墙

LuCI ---> Applications ---> luci-app-frpc   #内网穿透 Frp

LuCI ---> Applications ---> luci-app-mwan3   #MWAN负载均衡

LuCI ---> Applications ---> luci-app-nlbwmon   #网络带宽监视器

LuCI ---> Applications ---> luci-app-ramfree  #释放内存

LuCI ---> Applications ---> luci-app-samba   #网络共享(Samba)

LuCI ---> Applications ---> luci-app-sqm  #流量智能队列管理(QOS)

LuCI ---> Applications ---> luci-app-openclash #你懂的那只猫

LuCI ---> Applications ---> luci-app-dnsfilter #广告过滤

LuCI ---> Applications ---> luci-app-passwall #不敢解释

LuCI ---> Applications ---> luci-app-mtwifi #闭源Wi-Fi驱动

LuCI ---> Applications ---> luci-app-eqos #根据IP控制网速

LuCI ---> Applications ---> luci-app-syncdial #薛定谔的多拨应用

LuCI ---> Applications ---> luci-app-zerotier #虚拟局域网

LuCI ---> Applications ---> luci-app-jd-dailybonus #京东签到自动领豆

LuCI ---> Applications ---> luci-app-oaf #应用过滤神器

LuCI ---> Applications ---> luci-app-watchcat #断网检测功能与定时重启

LuCI ---> Applications ---> luci-app-wol   #WOL网络唤醒

LuCI ---> Applications ---> luci-app-wrtbwmon  #实时流量监测

LuCI ---> Applications ---> luci-app-upnp   #通用即插即用UPnP(端口自动转发)

LuCI ---> Applications ---> luci-app-argon-config #Argon主题设置

 

# 常用主题类

LuCI ---> Themes ---> luci-theme-argon

 

# 网络相关 (普通用户用不上)

Network ---> IP Addresses and Names ---> ddns-scripts_cloudflare.com-v4

Network ---> IP Addresses and Names --->  bind-dig

Network ---> Routing and Rediction ---> ip-full

Network ---> File Transfer ---> curl

Network ---> File Transfer ---> wget-ssl

Network ---> iperf3

Network ---> ipset

Network ---> socat #多功能的网络工具

Base system --> dnsmasq-full #DNS缓存和DHCP服务(dnsmasq-fulldnsmasq二者不可共存)

 

# 工具类 (普通用户用不上)

Utilities --> Editors --> nano #Nano 编辑器

Utilities --> Shells --> bash #命令解释程序

Utilities --> disc --> fdisk #MBR分区工具

Utilities --> disc --> gdisk #GBT分区工具

Utilities --> disc --> lsblk #列出磁盘设备及分区查看工具

Utilities --> Filesystem --> resize2fs #调整文件系统大小

 

# IPv6(未来运营商可能不再提供 IPv4 公网地址,有远程访问需求的建议加入)

Extra packages ---> ipv6helper (勾选此项即可,下面几项自动勾选)

Network ---> odhcp6c

Network ---> odhcpd-ipv6only

LuCI ---> Protocols ---> luci-proto-ipv6

LuCI ---> Protocols ---> luci-proto-ppp

3. OpenWrt 单独编译 ipk 插件

克隆源码

以编译 Rosy 主题为例:

# 进入 OpenWrt 目录

cd ~/openwrt/

 

# 克隆 Rosy 主题源码到 package 目录

git clone https://github.com/rosywrt/luci-theme-rosy.git package/luci-theme-rosy

配置组件

make menuconfig

进入 LuCI --> Themes 选项找到 luci-theme-rosy

然后配置该选项为 'M',保存退出。M 表示选中插件但不编译进固件。如下:

<M> luci-theme-rosy....................... Rosy Theme

编译插件

make package/luci-theme-rosy/luci-theme-rosy/compile V=99

注:V=99 表示输出详细的 de­bug 信息

我这里是 x86_64 架构,编译完成插件包默认存放路径:~/openwrt/bin/packages/x86_64/base 目录下

上传 IPK 软件包到 OpenWrt

scp luci-theme-rosy_git-19.069.38477-5ed9705-1_all.ipk root@192.168.199.1:/tmp

安装 IPK 软件包

SSH 进入路由器,安装 tmp 目录下的 ipk 软件包,例如

opkg install /tmp/luci-theme-rosy_git-19.069.38477-5ed9705-1_all.ipk

清理编译

编译完成,若需要清理刚刚编译的插件,可通过以下命令:

make package/luci-theme-rosy/luci-theme-rosy clean

虽然 Open­Wrt 编译出的内核模块也是一个 ipk 包,它们的名字基本会以 kmod- 作为前缀,但它是无法独立地运行的,内核对内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,因此对于新手用户尽量不要尝试卸载 / 安装内核模块,这极大可能会影响 Open­Wrt 正常使用。

OpenWrt 新手配置使用指南

1、更改 OpenWrt 默认登录密码

若没有自行替换修改过管理账号密码,Open­Wrt 默认账号 root 密码 password,若需要更改 Open­Wrt 默认登录密码则依次进入「系统」 - 「管理权」 ,在「主机密码」的输入框输入新密码,保存应用。

 2、更换界面/主题

「系统」 - 「系统」 - 「语言和界面」,在「主题」下拉框选择更换新主题 / 界面,保存应用。

 3、修改时区

「系统」 - 「系统」 - 「系统属性」 - 「常规设置」,在「时区」下拉框选择 Asia/Shanghai,保存应用。

 4、更换 LAN IP 地址

「网络」 - 「接口」 - LAN - 「修改」,在「IPv4 地址」自定义需要的 LAN IP 地址

 5、作为主路由拨号上网

将猫设置为桥接模式,通过路由器来实现拨号。通过「网络」 - 「接口」找到 WAN 口,修改 Open­WRT WAN 口协议将其切换为 PP­PoE。填写宽带运营商提供的账号密码(PAP/​CHAP 用户名:宽带账号;PAP/​CHAP 密码:宽带密码),保存并应用。

 6、禁用 IPv6

§  删除「网络」- 「接口」 中的 WAN6 接口。

§  在「网络」 -「接口」 -WAN-「高级设置」,使用内置的ipv6管理(取消勾选);

§  在「网络」 -「接口」 -LAN」,在「基本设置」将 IPv6 分配长度设置为已禁用;在「高级设置」使用内置的 ipv6 管理(取消勾选);在「IPv6 设置」,更改设置如下:

·         路由通告服务:已禁用

·         DHCPv6 服务:已禁用

·         NDP 代理:已禁用

详细的图文介绍,请移步 -->OpenWrt 如何彻底禁用 IPv6 功能》

7、动态解析/P2P 实现远程访问

如果有公网 IP,首选 DDNS 方案。常用的插件有 AliD­DNS -> 插件下载  腾讯云 DDNS -> 插件下载 (两款插件使用门槛较低)

如果没有公网 IP,较经济的方案:推荐 Ze­roTier -> 插件下载  DDNSTO -> 插件安装(基本不存在上手的门槛,因为不直接通过公网 IP 因此也无需考虑防火墙设置、端口转发)

详细的配置过程已有相关文章,请移步 -->OpenWrt 远程访问:ddns 动态解析和 ZeroTier 虚拟局域网》 以及 Tailscale:一款开箱即用的虚拟局域组网工具!》

8SSH 开启远程访问

「系统」 - 「管理权」 - SSH 访问」 - Drop­bear 实例」 ,变更「接口」 「未指定」。

 默认 SSH 端口为 22,可自行更换使用其他可用端口。

9、更换为国内软件源

由于国内的软件源均已支持 https,更换软件源前需确保 curl 支持 ssl

opkg update

opkg install ca-certificates luci-ssl-openssl

「系统」 - 「软件包」 - 「配置」,完整复制一份「发行版软件源」所有条目,粘贴到「自定义软件源」输入框,将其中的 http://downloads.openwrt.org/ 全部替换为 https://mirrors.cloud.tencent.com/lede/ (腾讯镜像源)或者 https://mirrors.ustc.edu.cn/lede/ (中科大镜像源) ,提交。

也可以直接使用 sed 命令替换软件源为腾讯镜像源。

sed -i 's_downloads.openwrt.org_mirrors.cloud.tencent.com/lede_' /etc/opkg/distfeeds.conf

10OpenWrt 插件的安装与卸载

通过 LuCi 界面管理软件包

「系统」 - 「软件包」 -「动作」,可在「已安装软件包」的列表中找到需要卸载的包名称进行卸载,同时通过在「过滤器」的输入框内输入插件的关键词,在软件仓库中查找需要的安装包进行安装。大多数插件可通过 LuCi 进行安装 / 卸载。

通过SSH终端安装/更新/卸载

1、如果是第三方下载的软件包可通过终端命令进行安装,可通过 scp 命令上传到 Open­Wrt  tmp 目录进行安装。(推荐上传至 tmp 是因为它占用的是内存而不占用实际的存储空间)

# 1、通过Scp上传文件

scp -P [Port] [PackageName] root@[OpenWrt LANIP]:/tmp

 

## 示例

## 上传本地当前路径下的luci-app-aliddns包文件到LANIP192.168.1.1tmp目录

scp -P 22 ./luci-app-aliddns_v0.3.0-1.ipk root@192.168.1.1:/tmp

 

# 2、在OpenWrt终端安装已上传的包

opkg install /tmp/[PackageName]

 

## 示例

opkg install /tmp/luci-app-aliddns_v0.3.0-1.ipk

2SSH 终端 opkg 包管理常见命令

# 获取软件列表

opkg list

 

# 安装

opkg install [PackageName]

 

# 卸载

opkg remove [PackageName]

 

# 更新软件包

opkg upgrade [PackageName]

 

# 更新所有可被更新的软件包

opkg upgrade $(opkg list-upgradable | awk '{print $1}')

注:因内核对内核模块进行严格的版本检查,即使一个小版本号不一致也会导致加载的不成功,因此尽量不要尝试卸载 / 安装内核模块,极大可能会影响 Open­Wrt 正常使用。

11、配置旁路由

已有相关文章供参考,请移步 --> OpenWrt 配置旁路由教程》

12sysupgrade 更新固件

1)先本地上传固件到 Open­Wrt  tmp 目录

# 默认为22端口可以不追加-P参数

scp -P 22 ./openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin root@192.168.1.1:/tmp

2Open­Wrt 终端使用 sysupgrade 命令更新固件,根据个人的性格、喜好、胆识选择适合自己的姿势尝试刷入更新包

# 保留配置升级

sysupgrade -i /tmp/openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin

 

# 不保留配置升级

sysupgrade -n /tmp/openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin

 

# 梭哈模式(不保留配置,强制更新)不计较得失成败,不要怂就是干

sysupgrade -n -F /tmp/openwrt-ramips-mt7621-hiwifi_hc5962-squashfs-sysupgrade.bin

13OpenWrt 扩展容量

1. 前期准备

1.1 如果你怕操作出错,可进入 虚拟机 找到正在运行的 Open­Wrt 虚拟机,点击 操作 - 拍快照 方便出错时可以快速恢复。

 1.2 通过 XshellPutty SSH 终端工具登录 Open­Wrt ,安装磁盘分区工具:

opkg update

opkg install cfdisk fdisk e2fsprogs

命令行中 cfdisk fdisk 均为磁盘分区工具,e2fsprogs 包含了 mkfs 命令,用于格式化分区。

2. 方案一:利用剩余空间扩容

2.1 创建新分区

SSH 终端运行 cfdisk 命令进入磁盘分区界面,通过键盘上下键切换到 Free space (剩余空间),左右键切换至NEW (新增分区),然后按下回车键。

 分区类型设置为 Primary (主分区),按下回车键。

 左右键切换 Write 按下回车键,写入新分区。

 输入 yes 按下回车键,确认写入新分区。

 切换 Quit ,按下回车键退出。运行 fdisk -l 命令,查看是否成功创建新分区。

 2.2 格式化新分区

SSH 终端运行下面的命令,将新分区的文件系统格式化为 ext4

mkfs.ext4 /dev/sda3

2.3 挂载新分区

进入 Open­Wrt 管理后台,依次点击 系统 - 挂载点 找到并点击全局设置中的 生成配置 

  挂载点 找到创建的新分区,点击 修改 重新调整挂载项目的设置。

 勾选 启用此挂载点挂载点 选择为 作为根文件系统使用 ,完整复制根目录准备中的所有命令行后,点击 保存并应用

 ️ 上面复制得到的命令行不要直接运行!!!不要直接运行!!!否则报错。

需要手动修改命令行中 mount /dev/sda1 /tmp/extroot  cfdisk 创建的新分区盘符,例如这里应修改为mount /dev/sda3 /tmp/extroot,然后进入 SSH 终端,运行修改后的完整命令行,如下:

mkdir -p /tmp/introot

mkdir -p /tmp/extroot

mount --bind / /tmp/introot

mount /dev/sda3 /tmp/extroot # 修改后

tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -

umount /tmp/introot

umount /tmp/extroot

回车键到底,直到跑完所有命令行。然后运行 reboot 重启 Open­Wrt

 重新进入 SSH 终端运行 df -h ,如上图表示扩容成功~

3. 方案二:通过新增磁盘扩容

3.1 添加新磁盘

打开群晖 VMM 找到正在运行的 Open­Wrt 虚拟机,选择 关机 - 强制停止

  虚拟机 中找到已经停止运行的 Open­Wrt 虚拟机,依次选择 操作 - 编辑,找到 存储 设置项,自定义磁盘空间大小(例如 10GB),点击 + 号,新增一块磁盘,例如 虚拟盘(建议勾选空间回收),点击 确定 保存设置。

 回到 虚拟机 ,点击已停止运行的 Open­Wrt 虚拟机,执行 开机 操作。

 3.2 磁盘分区

SSH 终端连接 Open­Wrt,运行下面命令查看磁盘信息

fdisk -l

此时,会显示一个未被使用的磁盘 sdb 即新磁盘,,屏幕打印信息如下:

root@OpenWrt:~# fdisk -l

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x711b2af7

 

Device     Boot Start     End Sectors  Size Id Type

/dev/sda1  *      512   66047   65536   32M 83 Linux

/dev/sda2       66560 1704959 1638400  800M 83 Linux

 

 

Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

若要使用这块新磁盘,就需要对新磁盘进行分区,运行以下命令:

fdisk /dev/sdb

创建一个主分区,分区操作步骤如下:

root@OpenWrt:~# fdisk /dev/sdb

 

Welcome to fdisk (util-linux 2.37).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

Device does not contain a recognized partition table.

Created a new DOS disklabel with disk identifier 0x1d291a31.

 

Command (m for help): n (输入 n 创建分区)

Partition type

   p   primary (0 primary, 0 extended, 4 free)

   e   extended (container for logical partitions)

Select (default p): p (输入 p 创建主分区)

Partition number (1-4, default 1): (回车键,默认创建一个分区)

First sector (2048-20971519, default 2048): (回车键)

Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519):

 

Created a new partition 1 of type 'Linux' and of size 10 GiB.

 

Command (m for help): w (输入 w 写入分区表)

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

查看磁盘信息:

fdisk -l

屏幕打印信息如下:

root@OpenWrt:~# fdisk -l

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x711b2af7

 

Device     Boot Start     End Sectors  Size Id Type

/dev/sda1  *      512   66047   65536   32M 83 Linux

/dev/sda2       66560 1704959 1638400  800M 83 Linux

 

 

Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: QEMU HARDDISK

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x1d291a31

 

Device     Boot Start      End  Sectors Size Id Type

/dev/sdb1        2048 20971519 20969472  10G 83 Linux

其中 /dev/sdb1 即新创建的新分区分配的盘符

3.3 格式化

将分区格式化 ext4 文件系统:

mkfs.ext4 /dev/sdb1

3.4 挂载分区

进入 Open­Wrt 管理后台,依次点击 系统 - 挂载点 找到并点击全局设置中的 生成配置 

  挂载点 找到创建的新分区,点击 修改 重新调整挂载项目的设置。

 勾选 启用此挂载点挂载点 选择为 作为根文件系统使用 ,完整复制根目录准备中的所有命令行后,点击 保存并应用

 ️ 上面复制得到的命令行不要直接运行!!!不要直接运行!!!否则报错。

需要手动修改命令行中 mount /dev/sda1 /tmp/extroot  fdisk 创建的新分区盘符,例如这里应修改为mount /dev/sdb1 /tmp/extroot,然后进入 SSH 终端,运行修改后的完整命令行,如下:

mkdir -p /tmp/introot

mkdir -p /tmp/extroot

mount --bind / /tmp/introot

mount /dev/sdb1 /tmp/extroot # 修改后

tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -

umount /tmp/introot

umount /tmp/extroot

回车键到底,直到跑完所有命令行。然后运行 reboot 重启 Open­Wrt

 4. 写在最后

以上就是喵斯基部落提供的关于 Open­Wrt 存储空间扩容的两个简单的示例,如果你使用的 Open­Wrt  EXT4 文件系统可参考本文示例,但需要留意盘符可能有所不同,切勿完全照搬。如果使用的是 squashfs 文件系统那么挂载点需要设置为 /overlay 作为 over­lay 分区使用。

 

 

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):