|
|
本帖最后由 iMea 于 2024-6-27 18:41 编辑
大佬们发的QSDK包一般都是几十M 想装一些其他的软件或者是想升级其中的软件包 空间就不太够 那么有什么办法可以清理不需要使用的空间呢?
请先备份好数据, 刷好 UBOOT , 避免操作不当变砖!
0. Linux 环境
准备好 QSDK 的 sysupgrade.bin 格式的固件包,
安装好squashfs工具, 包括这两个命令 mksquashfs unsquashfs
安装好 file 命令
1. 路由器上安装好 QSDK 并配置好
安装后, 使用 opkg remove 命令来卸载不需要的软件包, 可能有卸载不干净的情况可以手动去删除
统计文件大小的命令是 du -h 目录, 用这个可以快速找到是哪些文件比较占空间, 重点删除这些大文件
2. 把整个系统备份
由于空间不足, 所以要把备份好的文件存在 /tmp 中
注意一定要用 tar 来备份, 不要使用 unzip 等等, 这样才能保存权限关系!
每个文件夹打包好后就下载下来, 避免 /tmp 放入太多文件导致空间不足
举个例子:
tar -cvf /tmp/etc.tar /etc
备份后, 把 etc.tar 下载到自家机器上, 然后删除路由器上的档案, 避免 /tmp 空间不足:
rm /tmp/etc.tar
继续备份其他根目录文件夹
tar -cvf /tmp/usr.tar /usr
后面同理
对于红米 AX6 QSDK 而言, 需要备份的文件夹有: bin sbin etc lib usr www ini cfg
3. 在自家机器上把备份档案都解压在一块
tar -xvf ./etc.tar
tar -xvf ./usr.tar
...
4. 在自家机器上使用压缩工具解压 sysupgrade 格式的压缩包(他们本质也是 tar 档案)
解压可以看到一个文件夹里
比如我的是 sysupgrade-ap-ac04,
这个文件夹里有 CONTROL kernel root
其中的 root 就是下面要说的 root 档案, 我们后面要替换掉他
5. 在自家机器上使用 file 命令记录下原来的 root 档案
命令是 file ./root
可以看到这样的结果:
root: Squashfs filesystem, little endian, version 4.0, xz compressed, 20541282 bytes, 3443 inodes, blocksize: 262144 bytes, created: Tue Jan 30 08:59:17 2024
把这个 xz 压缩方式 和 blocksize: 262144 bytes 记住后面需要使用
6. 在自家机器上使用 unsquashfs 解压 root 档案
命令是 unsquashfs ./root
会得到一个 squashfs-root 文件夹, 这个就是刷好以后的根目录了, 我们要修改他
把我们之前备份出来的哪些文件夹, 覆盖掉这些文件夹 (最好是先删掉这些文件夹, 再复制粘贴过来)
7. 把 squashfs-root 重新打包成 root 档案
命令是: mksquashfs ./squashfs-root 弄好的root档案名字 -comp 压缩方式(原来是xz,这里也要些xz) -b 上面记录的blockSize(上面的是262144)
把弄好的 root 档案覆盖掉原来的
8. 重新打包成 sysupgrade 镜像
tar -cvf ./弄好的sysupgrade镜像 ./sysupgrade-ap-ac04
!!更新:这一步有问题, 请使用:
tar -cvf ./弄好的sysupgrade镜像 sysupgrade-ap-ac04
注意去掉那个./
如果不去掉 使用压缩包工具打包后的结构是
. 目录 - sysupgrade-ap-ac04 目录 - 实际内容(包括 root kernel 文件等)
原来的结构应该是
sysupgrade-ap-ac04 目录 - 实际内容(包括 root kernel 文件等)
!!更新结束
9. 把弄好的镜像上传到路由器的 /tmp 中
系统自带的更新是用不了的, 要用命令强制更新
10.使用命令强制更新
命令: sysupgrade -n -F ./弄好的sysupgrade镜像名字
回车后, 路由器会提示如 "metadata" 信息不对等, 这是正常的, 然后过一会就会自动重启
11. 重启后查看剩余空间, Enjoy
命令是: df -h
12. 最后
提前祝大家新年快乐, 心想事成!
更新:
13. 二进制压缩
Linux 上安装 upx 工具, 命令 upx -9 ./二进制文件位置
可以把30M的二进制文件压缩成不到10M, 性能也不会受到影响, 不会额外占用内存, 只是运行前需要解压缩一次, 运行加载时间会更长
再次更新:
用ChatGPT写了下脚本,还是不会的可以研究一下:
qwerr0/openwrt_repack_root (github.com)
看README.md然后按照顺序执行脚本即可
|
|