增加删除快照的功能
zxhd863943427 opened this issue · 28 comments
我希望能增加一个删除快照的功能,是否能提交这个pr?
有清理快照的功能了
目前的清理快照是清理到只剩被引用的快照,但更常见来说,快照的删除功能是只清理指定的快照。
我的下一步目标是实现对快照的保留策略,即按照要求在一定的时间间隔内保存快照,如一个月以外的快照,每天只保留一个。
参照restic,我打算这样实现:一个是删除快照索引,另一个是根据现存的快照索引,删除未引用的对象。这应该在ui上是两个按钮。
删除指定快照也要计算引用关系的,不如直接考虑自动清理快照
对于这个,我认为这不是代码实现上的问题,而是用户体验的问题。用户在清理快照时,他需要的是一个精简的快照列表,而不是想要一个空白的快照列表。
这个实现是递进的,需要先完成删除快照的前置功能,才能完成保存策略的自动清理。
有清理快照的功能了
清理和删除不能完全等同吧。
就比如我现在有大几百个快照,我既想要清理一下,不要占用那么多空间,又想要保留需要的快照防止需要恢复的情况。
目前我只看到了一个「清理快照」的按钮,这个操作粒度确实 有点大了。
就清理快照这个事情本身我觉得应该分为几个层次:
- 最粗放的就是直接全部清理
- 细粒度一些的,可以选定某个时间点之前(甚至时间范围内)的进行清理
- 最细致的,可以精细到某个具体快照,进行删除
更加细粒度的快照清理,可以为更加细粒度的快照管理做铺垫。比如如果有了这种细致的清理技术作为支撑,我们还可以给出更加细致的快照保存策略:例如一个星期内的快照全部保存,一个月外的快照每星期保留四个,一个年外的快照每月保留一个 etc.
这个需求目前不明显,但是后面用户数据量涨起来之后,应该会越来越明显的。
我建议有空的话研究支持调整保存策略的自动清理
如果能删除指定范围内的快照,还是挺有用的。比如我只想保留最近半年的快照,目前的思源就没法实现。
话说删除单个快照好像没啥使用场景?
建议直接考虑快照清理策略
我记得以前讨论过,但我找不到那个 issue 了
不对吧,单一快照清理依然需要遍历全部快照索引计算引用关系的,如果批量删除依赖这个,那效率很低。
我是考虑两步走的,分成两个功能
- 删除索引。这时只执行了删除索引的功能,没有实际删除objects内的内容
- 删除未引用块。这时遍历全部索引,确定未引用的块进行删除
在删除界面只执行删除索引操作,在主界面才执行删除未引用块,因此综合来说效率时可以的。
这也是为什么我说是保留策略的前置步骤,因为保留策略只是把删除索引这一步自动化了。
这个如果不是原子操作的话不可行,删除索引和未引用对象不应该分两步。
会导致什么问题?
删除了索引但是未引用对象没删除
这个是预期的效果,因为要允许删除多个快照后再统一清理未引用的对象。
只要最后进行清理就不会有未引用对象没删除。
因为中间可以打断。
举个例子?
我觉得打断了也无所谓,下次重新执行也能清掉。
等等,不是根据被删除索引进行清理的,是遍历未被删除的索引和遍历对象,找到不在未删除索引中的对象进行删除。
低是低吧,能满足需求就行。
后期还能继续优化,先把功能整出来再说。
关于使用场景,这属于刁钻的场景,比如手贱把一个大文件塞了进去,需要删除这个快照……大部分人使用下一步的保留策略就行。
但是既然能提供这个功能,我想不到理由为啥不提供它。
这一步新加入的函数都是下一步能够使用到的。
但是既然能提供这个功能,我想不到理由为啥不提供它。
确实绝大部分人是不会用这个功能的,不过让需要的人能用上就行了。