rustic是使用rust实现的基于 restic 协议的高效、开源增量备份工具,速度快性能强。能胜任备份大量文件的同时排除不需要的目录。本文是我在windows下用其备份电脑重要文件的经验。
安装(windows)
建议通过 scoop 进行管理
# 如果尚未安装 scoop
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
# 安装 rustic
scoop install rustic
跨盘备份
我的备份位置放在移动硬盘E盘(盘符不一定固定),备份目标是C盘下的用户目录。rustic命令行使用windows的带盘符和冒号的路径失败,可以在E盘根目录创建一个软连接(DISK_C)指向C盘,命令中就可以使用/DISK_C代表C盘。
- 打开管理员模式 CMD。
- 切换到备份盘(例如 E 盘)根目录
- 创建链接:
mklink /D DISK_C C:\ - 以后在命令行中,你就可以使用 \DISK_C 这种优雅的路径格式来访问 C 盘内容,完美规避盘符导致的路径解析问题。
初始化仓库
在备份盘创建一个专门存放仓库的文件夹,并执行初始化:
rustic init
- 小贴士:Rustic 的工作逻辑与 git 有相似之处。
在该目录创建配置文件,以后写命令就不用指定配置文件路径了:
# rustic.toml
[repository]
# 仓库存放位置,类似.git
repository = "./repo"
# 密码
password = ""
排除目录
- 如果备份目标有许多使用git的项目目录可以使用--git-ignore参数
- --git-ignore需要.git目录存在才生效。
- 可以使用--glob-file指定glob语法的文件。
- 可以同时使用--glob-file和--git-ignore
- 如果又想使用--git-ignore又想包含.gitignore排除的部分文件, 做不到。推荐此时不使用--git-ignore,在--glob-file里添加一些.gitignore常排除的大目录规则。
- glob规则文件里使用
#写注释时不要个规则写在同一行。 - glob规则文件里仅推荐排除规则。
- !**/a/b/:精确排除任意深度的 a/b 目录。
glob文件示例:
# 在此处编写排除规则,注意 # 注释需独占一行
!node_modules/
!**/target/debug/
!.venv/
!site-package/
!__pycache__/
排除哪些目录?
如果你要备份的是windows用户文件夹,不知道哪些可以排除。可以使用treesize软件挨个排查。此软件有免费绿色版。
开始备份
在执行真实的备份前,请务必进行“演习”:
- Dry Run (预演):
rustic backup \DISK_C\Users\用户名\ --glob-file=main.glob.txt -n通过观察估计的备份文件大小,确认是否配置正确。去掉参数-n即可实操。 - 常用管理命令:
- 查看所有快照:rustic snapshots
- 列出特定快照内的文件,快照ID可以像git一样只写前几位:
rustic ls <快照ID> - 列出快照内指定路径:
rustic ls 快照ID:路径 - 当然可以用
latest代表最新快照ID,只有一个备份任务时尤其好用。
还原文件
- 推荐还原到新的空目录:
rustic restore <快照ID> <目标文件夹>。 - 同样,可以只还原指定路径:
rustic restore <快照ID>:路径 <目标文件夹>。 - 文件管理器浏览快照内部:
- 持续运行:
rustic webdav <快照ID> - 打开Windows文件资源管理器,输入地址并回车(8000是上一步输出的端口号):
\\localhost:8000\DavWWWRoot\
- 持续运行:
删除快照
- 注意查看快照时间顺序,别把最新的快照删了:
rustic forget <快照ID> - 上面只是标记删除,这一步才是真正释放空间:
rustic prune