软路由探索之旅 篇四:上手iStoreOS,新增备份系统教程
参考:克隆真香!快速打造属于你的 iStoreOS 固件 一个 U 盘 刷遍无数工控机、软路由
软路由 iStoreOS 如何扩容软件包?如何分区?如何备份整个系统?如何做 SMB 共享?如何挂载其他 NAS?
固件下载地址:https://fw.koolcenter.com/iStoreOS/
第三方重要插件:https://github.com/AUK9527/Are-u-ok/tree/main/x86
写盘工具 etcher:https://www.balena.io/etcher/
插件备用地址:https://drive.google.com/drive/folders/19-aOTi3QQsB98AG03co8U1k92p_BszdN
写在开头,本文主要分享了三大块内容:部署系统、挂载共享磁盘、备份系统。
无意中看了悟空的视频,心里给主路由升级系统的火苗又燃烧了起来,一不做二不休,冲就是了。
开始部署
一、写盘。
本文主要是 x86 物理机安装教程(因为物理机才能获取到温度等硬件信息),esxi 下安装也很简单,跟安装任何 openwrt 一样,先转成 vmdk 文件,添加现有硬盘即可。
我们继续物理机安装教程,首先,用 balenaEtcher 工具将 gz 安装包写入 U 盘,必须要这么做。
- 如果用 ventoy 来加载,会出现在 install x86 时候提示 root not found 的错误,估计是找不到内置硬盘而报错。
- 如果直接写入固态硬盘,则可能在启动时会加载失败。
所以,请务必写入普通的 U 盘。
二、接入主机。
将 U 盘插入小主机,同时将内置硬盘也接入小主机。
三、启动。
- 设置 U 盘启动,跑码完成后,输入 quickstart,先修改 lan 端口为 192.168.x.1(当然你也可以不设置,默认是 192.168.100.1)。
- 然后在另一台相同网段的主机上,打开浏览器,输入前面设置的 192.168.x.1(务必将网线接在工控机的 eth1-3 口,默认 eth0 是 wan 口),输入默认的账号密码(root/password),进入 openwrt 后台,记得改密码。
四、初始化设置。
进行一系列必要的初始化配置,此时的配置全部会保存在 U 盘上:
- 配置 WAN
- 配置 LAN
- 配置网络 - 防火墙、端口转发、自定义规则等
- 配置主机名映射(如有需要的话)
- 配置系统 - 计划任务(如有需要的话)
五、克隆系统。
- 从 U 盘克隆配置好的系统到内置硬盘。ps:在克隆之前,务必到系统 - 备份 / 升级中生成一个备份,以防万一。
- 回到小主机的跑码界面,在 quickstart 菜单中,选择 install x86,一路下一步即可,经过几分钟的等待,记得在黑屏重启的时候拔走 u 盘,此时重启后应该就会自动加载内置硬盘里克隆好的系统了,从 web 端检查无误后,接入 wan 口网线到 eth0。
六、网络验证。
确保拨号、联网一切正常。
七、额外配置。
如果开机后联网正常,直接进系统后台,开始按需安装插件并配置,可以选择手动安装,也可以选择在官方的 iStore 里安装。这个步骤多半要联网,请确保上述配置都 ok 了再进行:
- 配置动态 DNS
- 手动安装一些特殊插件
- 到 iStore 里安装 DDNS.to
- 到 iStore 里安装全能推送 pushbot
- 手动安装 VPN-openvpn server
最后,一定记得都弄好后,到系统 - 备份 / 升级中生成一个备份,以防万一。
iStoreOS 经过这么久的打磨,相比于去年的时候,有着明显的进步,而且我还发现他们商店里还有一个新手 ui 插件,这新手后台简直就是主流路由器的后台,太友好了,不过不适合我,哈哈。
共享 smb 给其他设备访问
1、首页上查看需要共享的分区的路径,拷贝待用。
2、进入服务 - 网络共享 - 共享目录,将刚才复制的路径添加,切记勾选强制 root。
3、保存并应用后,在 windows 或者 mac 上用 smb 方式访问即可,选择访客。
备份系统
1、先到软件包里安装一个 dd 进度条插件:coreutils-dd,安装之前记得点击更新列表。
2、运行 fdisk -l 查看下目前分区情况,一般系统就在 sda1、sda2、sda3 这三个分区,观察下面红框内部分。
3、运行备份指令,其中,
- if 是要备份的分区名称
- of 是备份后的文件路径,如我这里备份到 /mnt/sda4/backups/ 下,文件名为 J3455-iStoreOS_ 时间戳.img,建议文件名带上当前备份的时间方便查看。
- bs 是要备份的分区的起点,也就是上面截图里的红框部分;count 是终点,记得要 +1,对比红框部分与下面代码部分。
- status=progress 就是加载进度条,也就是用到最开始安装的那个 coreutils-dd 插件。
dd if=/dev/sda of=/mnt/sda4/backups/J3455-iStoreOS_$(date +%Y%m%d).img bs=512 count=4982272 status=progress
4、进度条结束后就能看到在 /mnt/sda4/backups 有了 J3455-iStoreOS_20221016.img 文件,可以对文件进行压缩,输入:
gzip -k J3455-iStoreOS_20221016.img
这里也可以直接执行备份并压缩:
dd if=/dev/sda bs=512 count=4982272 status=progress | gzip >/mnt/sda4/backups/J3455-iStoreOS_$(date +%Y%m%d).img.gz
5、未来就可以直接用这个 img 文件按照最开始部署的方式写盘,完美还原整个系统。
6、同时,可以远程备份到其他服务器以留存,带端口的加上 -P ,P 大写。
scp -P [远程服务器端口号] J3455-iStoreOS_20221016.img.gz [远程服务器用户名]@[远程服务器ip:[远程服务器目录]
进阶玩法:直接在定时任务里添加任务,实现定时自动备份、打包、压缩并上传到远程服务器留存。sh 脚本文件如下,可复制内容保存为 backup_scp_j3455.sh 文件:
# 当前时间变量
DATE=`date +%Y%m%d`
# 文件夹路径
bakDir=/mnt/sda4/backups
# 远程服务器用户名
remoteUser=[远程服务器用户名]
# 远程服务器存储路径
remoteDir=[远程服务器目录]
# 日志文件
logFile=${bakDir}/${DATE}.log
# 压缩文件
gzFile=${bakDir}/j3455-iStoreOS_${DATE}.img.gz
# 创建备份文件夹目录
mkdir -p ${bakDir}
echo "================================================" >> ${logFile}
echo "========== 开始执行任务 begin:$(date +"%Y-%m-%d %H:%M:%S") ==========" >> ${logFile}
echo "================================================" >> ${logFile}
echo "" >> ${logFile}
# 执行备份并写入日志
echo ">>>>>>>> 开始备份 begin:$(date +"%Y-%m-%d %H:%M:%S") >>>>>>>>" >> ${logFile}
# 打开当前日期的备份目录
cd ${bakDir}
echo "1.打开${bakDir}:$(date +"%Y-%m-%d %H:%M:%S")" >> ${logFile}
# 备份、打包并压缩,同时写入日志
echo "2.备份、打包并压缩,同时写入日志:$(date +"%Y-%m-%d %H:%M:%S")" >> ${logFile}
dd if=/dev/sda bs=512 count=4982272 | gzip >${gzFile} 2>>${logFile}
echo "<<<<<<< 结束备份并打包压缩 end:$(date +"%Y-%m-%d %H:%M:%S") <<<<<<<" >> ${logFile}
echo "" >> ${logFile}
# 上传备份文件
echo ">>>>>>>> 开始scp上传文件 begin:$(date +"%Y-%m-%d %H:%M:%S") >>>>>>>>" >> ${logFile}
sshpass -p [远程服务器密码] scp -P 222 ${gzFile} ${remoteUser}@192.168.31.40:${remoteDir}
echo "<<<<<<< 结束scp上传文件 end:$(date +"%Y-%m-%d %H:%M:%S") <<<<<<<" >> ${logFile}
echo "" >> ${logFile}
echo "删除本地备份文件:$(date +"%Y-%m-%d %H:%M:%S")" >> ${logFile}
rm -fr ${gzFile}
echo "" >> ${logFile}
echo "================================================" >> ${logFile}
echo "========== 结束所有任务 end:$(date +"%Y-%m-%d %H:%M:%S") ==========" >> ${logFile}
echo "================================================" >> ${logFile}
到 iStoreOS 后台,进入计划任务,加上指令,保存即可。(例如我这里是每周二 6 点执行一次)
0 6 * * 2 [shell脚本所在目录]/backup_scp_j3455.sh