z0z0r4 / better_backup

Less disk usage, never duplicate files.
MIT License
11 stars 2 forks source link

定时清理备份 #2

Closed z0z0r4 closed 1 year ago

alex3236 commented 1 year ago
z0z0r4 commented 1 year ago
  • “定时清理”不是一个好的选择,试试“占用空间太大时清理”或者“备份数量过多时清理”。
  • 清理或重置时应允许用户保留最后几个备份,避免意外

emm,但我这所有备份的文件就一份,不会重复...

如果我保留了任意一个备份,那基本上就意味着没清理qeq

占用过大时倒确实,我下个功能加;备份数量与备份文件大小在这里是不对应的

z0z0r4 commented 1 year ago

具体备份多少次后才会有两个全量备份的大小,我不清楚...没有测试过,这取决于服务器活跃程度

alex3236 commented 1 year ago

你这不是差异备份吗?“保留最后几个备份”就是把之前的都合并成一个全量备份啊。你这只支持一个根备份 不能多节点?

alex3236 commented 1 year ago

即使不能多节点,把之前的都合并留最后几个一样能腾出空间啊

z0z0r4 commented 1 year ago

不是,得当git理解,用 hash 做索引,不存在全量备份、根备份这个概念...

假设有待备份文件夹

root/
    cache/
        server.jar

每次备份先扫一遍文件夹,读 md5,如果已有则不备份文件,无则备份 然后给备份点建个文件树存进 JSON,文件对应 md5

{
    "backup_uuid": "00b2e5",
    "backup_time": "2023-08-11 08:51:20",
    "backup_size": 64586210,
    "backup_files": {
        "world": {
            "type": "dir",
            "size": 64586210,
            "files": {
                "cache": {
                    "type": "dir",
                    "files": {
                        "server.jar": {
                            "type": "file",
                            "md5": "08b8d28f99b1053f4474666654d508c2",
                            "mtime": 1691715078.6658041,
                            "size": 461
                        }
                    }
                }
            }
        }
    }
}

这样如果没改动文件就直接存个树然后没了

回档就读一遍备份点信息,对着 md5 挨个拷贝过去

删除备份点就删除那个文件树,如果里面提及的 hash 没有再被其他备份点引用了的话就删了

z0z0r4 commented 1 year ago

v1.0.7 finished