sealdice-core icon indicating copy to clipboard operation
sealdice-core copied to clipboard

使备份功能覆盖可写/所有文件

Open Xiangze-Li opened this issue 9 months ago • 8 comments

考虑到每一个文件都是会被编辑的,每个文件都应该被自动备份覆盖

Xiangze-Li avatar Apr 26 '24 16:04 Xiangze-Li

如果非默认的 reply.yaml 进行备份的话,那牌堆、插件、帮助文档,以及插件设置等等一系列自定义内容是否都需要进行备份?

JustAnotherID avatar Apr 26 '24 16:04 JustAnotherID

我的标准是:可能被core写入的文件都值得备份。

按此标准,应该包括:

  1. (现有的)dice.yaml、serve.yaml、sqlite、文案模版
  2. 所有自定义回复 yaml
  3. 插件的配置项 plugin-configs.json
  4. 插件的buntdb AOF storage.db(值得商榷,可能体积很大)

Xiangze-Li avatar Apr 26 '24 17:04 Xiangze-Li

我的标准是:可能被core写入的文件都值得备份。

我倾向于全量备份,或者至少开放出全量备份的能力。

作为备份应该尽最大可能恢复备份时的数据状态,只读文件也应该是当时的状态之一。

体积问题确实值得注意,但是在拥有自动清理的情况下我认为这个占用是可以接受的。

目前考虑是两个选择:

  1. 默认全量备份,可以通过提供勾选来控制备份范围。
  2. 自动备份是轻量的,手动触发的(包括但不限于UI上点击备份)是全量的。

JustAnotherID avatar Apr 26 '24 17:04 JustAnotherID

可以分两阶段实现:

第一阶段,把现在的备份补充完整,实现一个最小备份

第二阶段,同时实现全量备份和最小备份,并且设计好不同的触发方式

Xiangze-Li avatar Apr 26 '24 17:04 Xiangze-Li

@fy0 @Szzrain @oissevalt @FlameTEXT @Fripine

JustAnotherID avatar Apr 26 '24 17:04 JustAnotherID

我的标准是:可能被core写入的文件都值得备份。

我倾向于全量备份,或者至少开放出全量备份的能力。

作为备份应该尽最大可能恢复备份时的数据状态,只读文件也应该是当时的状态之一。

体积问题确实值得注意,但是在拥有自动清理的情况下我认为这个占用是可以接受的。

目前考虑是两个选择:

  1. 默认全量备份,可以通过提供勾选来控制备份范围。
  2. 自动备份是轻量的,手动触发的(包括但不限于UI上点击备份)是全量的。

提一点拙见:我比较赞同选择1的后半句『可以通过提供勾选来控制备份范围』,但我倾向默认备份是『轻量备份』,即程序启动时已预先设定一个最小的备份范围。而用户后续可通过UI勾选,自行设定更大的备份范围,若用户勾选的备份范围覆盖了磁盘占用较大的部分,除了提醒用户可能造成磁盘大量占用外,还应推荐用户开启『自动清理』。至于『自动备份』与『手动备份』的范围,个人认为应当一致。

程序预先已经勾选的备份项(最小备份范围)是否允许用户取消勾选?

Fripine avatar Apr 26 '24 19:04 Fripine

但我倾向默认备份是『轻量备份』,即程序启动时已预先设定一个最小的备份范围。而用户后续可通过UI勾选,自行设定更大的备份范围,若用户勾选的备份范围覆盖了磁盘占用较大的部分,除了提醒用户可能造成磁盘大量占用外,还应推荐用户开启『自动清理』。

在 UI 上对勾选范围的不同做不同的提醒是个好主意,这个我觉得蛮有必要。

至于默认是轻量还是全量,这个就是磁盘占用优先,还是数据完整性优先的考虑。

我是这么认为的,一是默认情况下我们应该完整的保留用户数据,防止在没调整过该设置,但又因为意外情况需要备份的用户,能完整地恢复数据(多出来的可以轻易删掉,但少掉的是没法找回的)。二是目前自动清理似乎是个默认行为(存疑,似乎直接升级的用户默认关闭),在有自动清理的情况下磁盘占用的优先级并不是那么高(如果不是默认行为我们应该想办法将其改为默认)。

程序预先已经勾选的备份项(最小备份范围)是否允许用户取消勾选?

不应该,我们应当限制一个最低的备份范围。因为如果确认不需要任何备份,应该是采取关闭该功能的方式。

JustAnotherID avatar Apr 27 '24 04:04 JustAnotherID

先实现一个(低于)最小备份的版本,覆盖所有自定义回复 yaml 和 plugin-configs.json,但不包括 storage.db。

这部分内容应当是没有争议的

Xiangze-Li avatar Apr 27 '24 23:04 Xiangze-Li

2024-05-28 讨论结果

需求细化

  1. 全量备份比最小备份应当增加以下内容, 并保留扩展性
    • JS 插件 和 插件数据库
    • 牌堆
    • 帮助文档
    • 敏感词库
    • 人名文件 (names)
    • 图片资源 (images 目录)
  2. 只使用一个自动备份, 允许调整备份范围
  3. 手动备份每次弹出选框要求选择范围
  4. 备份文件名中要体现备份内容, 使用一个 pow2 数值来标记, 用 16 进制表示以压缩长度
  5. WebUI 解析文件名展示每个备份的内容
  6. 原文件名中的随机数, 用文件名其他部分的 hash 替代之, 在前端解析时用来验证文件名的完整性

UI 草稿

ce305ac643ac11b527615b33c394e88f_720

Xiangze-Li avatar May 28 '24 08:05 Xiangze-Li

补充,原备份文件名中的随机字符替换为文件名hash

JustAnotherID avatar May 28 '24 08:05 JustAnotherID