删除备份快照
所有的备份空间都是有限的,所以restic可以删除旧的快照。这可以通过手动(通过指定要删除的快照ID)或者使用描述要忘记哪些快照的策略来完成。对于所有删除操作,需要依次调用两个命令:
forget
删除快照并prune
实际删除快照从存储库中引用的数据。这可以通过forget命令--prune
选项来自动执行,如果快照已被删除,该prune命令会自动运行。
建议在修剪后运行restic check,以确保提醒您可能的损坏存储库的内部数据结构。
删除一个快照
该命令
snapshots
可用于列出存储库中的所有快照,如下所示:$ restic -r /srv/restic-repo snapshots
enter password for repository:
ID Date Host Tags Directory
----------------------------------------------------------------------
40dc1520 2015-05-08 21:38:30 kasimir /home/user/work
79766175 2015-05-08 21:40:19 kasimir /home/user/work
bdbd3439 2015-05-08 21:45:17 luigi /home/art
590c8fc8 2015-05-08 21:47:38 kazik /srv
9f0bc19e 2015-05-08 21:46:11 luigi /srv
要删除快照
/home/art
,请使用该forget
命令并在命令行上指定快照ID:$ restic -r /srv/restic-repo forget bdbd3439
enter password for repository:
removed snapshot d3f01f63
之后,此快照被删除:
$ restic -r /srv/restic-repo snapshots
enter password for repository:
ID Date Host Tags Directory
----------------------------------------------------------------------
40dc1520 2015-05-08 21:38:30 kasimir /home/user/work
79766175 2015-05-08 21:40:19 kasimir /home/user/work
590c8fc8 2015-05-08 21:47:38 kazik /srv
9f0bc19e 2015-05-08 21:46:11 luigi /srv
但是此快照中的文件引用的数据仍存储在存储库中。要清除未引用的数据, 必须运行prune命令:
$ restic -r /srv/restic-repo prune
enter password for repository:
counting files in repo
building new index for repo
[0:00] 100.00% 22 / 22 files
repository contains 22 packs (8512 blobs) with 100.092 MiB bytes
processed 8512 blobs: 0 duplicate blobs, 0B duplicate
load all snapshots
find data that is still in use for 1 snapshots
[0:00] 100.00% 1 / 1 snapshots
found 8433 of 8512 data blobs still in use
will rewrite 3 packs
creating new index
[0:00] 86.36% 19 / 22 files
saved new index as 544a5084
done
之后版本库更小。
您可以通过forget命令使用
--prune
开关来自动完成这个两步过程:$ restic forget --keep-last 1 --prune
snapshots for host mopped, directories /home/user/work:
keep 1 snapshots:
ID Date Host Tags Directory
----------------------------------------------------------------------
4bba301e 2017-02-21 10:49:18 mopped /home/user/work
remove 1 snapshots:
ID Date Host Tags Directory
----------------------------------------------------------------------
8c02b94b 2017-02-21 10:48:33 mopped /home/user/work
1 snapshots have been removed, running prune
counting files in repo
building new index for repo
[0:00] 100.00% 37 / 37 packs
repository contains 37 packs (5521 blobs) with 151.012 MiB bytes
processed 5521 blobs: 0 duplicate blobs, 0B duplicate
load all snapshots
find data that is still in use for 1 snapshots
[0:00] 100.00% 1 / 1 snapshots
found 5323 of 5521 data blobs still in use, removing 198 blobs
will delete 0 packs and rewrite 27 packs, this frees 22.106 MiB
creating new index
[0:00] 100.00% 30 / 30 packs
saved new index as b49f3e68
done
根据策略删除快照
手动删除快照非常繁琐且容易出错,因此restic允许指定应根据策略自动删除哪些快照。您可以指定要保留的每小时,每日,每周,每月和每年的快照数量,以及任何其他快照。这里最重要的命令行参数是
--dry-run
指示restic不删除任何东西,而是打印哪些快照将被删除。
当
forget
使用策略运行时,restic会加载所有快照的列表,然后按主机名和目录列表对其进行分组。分组选项可以--group-by
通过路径和标签使用来设置分组选项。该策略然后分别应用于每组快照。这是一项安全功能。--group-by paths,tags
该
forget
命令接受以下参数:--keep-last n
从不删除n
最近的(最近的)快照--keep-hourly n
n
在创建快照的最后几个小时内,仅保留每个小时的最后一个快照。--keep-daily n
对于n
有一个或多个快照的最后几天,只保留当天的最后一天。--keep-weekly n
对于n
有一个或多个快照的最后几周,只保留那一周的最后一个。--keep-monthly n
对于n
有一个或多个快照的最后几个月,只保留该月份的最后一个月份。--keep-yearly n
对于n
有一个或多个快照的最后几年,只保留那一年的最后一个。--keep-tag
保留所有具有由此选项指定的标签的快照(可多次指定)。--keep-within duration
保留在最新快照的持续时间内完成的所有快照。duration
需要是几年,几个月和几天,例如2y5m7d
将保留在最近的快照之前的两年,五个月和七天所做的所有快照。
此外,您可以限制将快照移除到具有特定主机名的
--hostname
参数或具有该--tag
选项的标签 。当指定多个标签时,只考虑具有所有标签的快照。例如,以下命令将删除具有该标记的所有快照的最新快照foo
:$ restic forget --tag foo --keep-last 1
该命令将删除所有设置了
foo
或bar
标记的快照的除最后一个快照以外的所有快照:$ restic forget --tag foo --tag bar --keep-last 1
只保留标记
foo
和 bar
设置使用的所有快照的最后快照:$ restic forget --tag foo,tag bar --keep-last 1
以上所有
--keep-*
选项仅计算有快照的小时/天/周/月/年,所以没有快照的选项将被忽略。
出于安全原因,Restic拒绝采取“空洞”政策。例如,如果有人指定--keep-last 0忘记存储库中的所有快照,则restic将响应不会删除快照。要删除所有快照,请使用
--keep-last 1
forget
然后最后手动删除最后的快照ID(通过将ID传递给)。
针对所有匹配的
--keep-*
计数来评估所有快照。2017-09-30(Sun)的单一快照将按每日,每周和每月计算。
我们来举个例子来解释一下:假设你在每个星期天只做了12周的备份。forget --keep-daily 4将保留最后四个星期日的最后四张快照,但删除剩下的。只有对有备份的日子进行计数,忽略没有备份的日子才是安全功能:它可以防止在没有新的快照创建时快速删除许多快照。如果以其他方式实施,forget --keep-daily 4则在星期五运行 将删除所有快照!
另一个例子:假设你每天备份做100年。forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 75将保留最近的7个每日快照,然后是4个(记住,7天已经包括了一周!)最后一周和11或12个最后一个月(11或12取决于如果5个星期跨过一个月)。最后是75年的快照。所有其他快照都被删除。
评论
发表评论