用内核原生 selector 持久化替代 web_save (cache.db cp 同步)#1298
Conversation
b24c926 to
d33eda9
Compare
d33eda9 to
9d1e26f
Compare
启用 mihomo profile.store-selected 与 singbox cache_file, cache.db 运行于 tmpfs(bbolt 依赖 mmap, 持久分区 jffs2/ubifs 不支持): - mihomo cache.db 路径不可配(-d $BINDIR), bfstart 启动前软链 $BINDIR/cache.db 到 $TMPDIR; 小内存模式($BINDIR=$TMPDIR)守卫跳过防自指 - singbox 直接 cache_file.path 指向 $TMPDIR/cache.db web_save/web_restore 保留原函数名与 hook 位置(向后兼容旧 crontab), 内部改为 cache.db cp 同步: - start.sh stop 调 web_save 备份(kill 前) - bfstart 调 web_restore 启动前恢复(仅 tmpfs 无时恢复, 防覆盖更新) - task 106 web_save_auto 每10分钟定时备份 - 小内存模式 web_save 守卫跳过(与软链守卫一致) 解决面板配置丢失类 issue juewuy#1264 juewuy#1276 juewuy#998。 close juewuy#1296
9d1e26f to
3812694
Compare
|
这个功能我希望能做成一个可选性功能而非强制性,暂时先不合并 |
|
当前进展 mihomo 内核已经在目前最新版本 ( 但是 sing-box 尚无回应: SagerNet/sing-box#4251 所以当前 PR 的解决方案就是,对于 不知道“做成可选性功能”是怎么考虑?这个功能还需要增加一个单独的菜单吗? |
|
@abcfy2 是的,就是在功能设置里加一个开关,用户可以选择,当然简单方法是直接根据用户是否启用了每x分钟自动保存节点的定时任务来判断,这个也可以 |
|
通过定时任务来判断这个方案感觉实现起来特别丑,加开关的话这里会让整个代码非常冗余。 也许可以等一等。mihomo 已经修复了 jffs 的兼容性,最理想的情况是 sing-box 也能解决 jffs 的兼容性问题,那么整个 web_save / restore 和定时任务相关的代码通通可以移除了。这里我看了下代码能精简不少 |
|
@abcfy2 官方的cache.db本身存档还是比较臃肿的,脚本内置的存档非常精简,对小闪存的设备要更友好一些 |
|
我这边跑了半个月的 cache.db,占用容量 1MB, 还算是能接受。 大部分容量似乎是被 fake-ip 占用掉的。如果取消 fake-ip 存储应该会节省非常多的空间 (
|
close #1296
启用内核原生选择持久化,替代 web_save 的 API 拉取 + 回推:
profile.store-selectedcache_filecache.db 跑 tmpfs(bbolt 需 mmap,持久分区 jffs2/ubifs 不支持
MAP_SHARED):cache_file.path直指$TMPDIR/cache.db-d $BINDIR),bfstart启动前软链$BINDIR/cache.db→ tmpfs;小内存模式($BINDIR=$TMPDIR)守卫跳过防自指备份/恢复用 cache.db cp 同步,保留
web_save/web_restore函数名与 hook(向后兼容旧 crontab):stop →web_save备份,bfstart→web_restore启动前恢复,task 106 每10分钟定时备份。选择持久化交给内核自己存(bbolt),不再依赖外部脚本拉 API 解析回推——根除 web_save 解析比对 bug(#1264 / #1276 / #998 配置丢失的根因)。
已知问题
configs/web_save被废弃,更新之后会造成上一次配置丢失,未来改为内核自己的配置保存方案。所以更新之后第一次需要重新保存一次面板配置