1. 背景
因为我手头上有一块8T硬盘,8T硬盘中存在有隐私资料和网上收藏资料。因为暂时没计划要多买一块硬盘进行备份。但为了也防止数据的丢失,需要执行3-2-1备份原则,保证数据安全。
我有一个永久115会员(5PB)、开了黄金会员的天翼云盘(14T)、永久容量的阿里云盘(5.79T)和本地硬盘(8T)。下面我会充分利用上面网盘空间实现3-2-1备份。
我用的是window系统的迷你主机,下面介绍的软件和使用的方法都是基于window系统上。
2. 工具介绍
将本地8T硬盘数据进行备份到上面的不同网盘,用到的工具有duplicacy(cil版免费)、freefilesync(免费)、coulddrive2(收费)工具。
1、clouddrive2主要是用来挂载网盘到本地;
2、duplicacy主要是用来加密备份到网盘;
3、freefilesync:主要是用来直接备份到网盘。
3. 备份介绍
3.1 3-2-1备份策略
1、三份备份:分别是本地备份、两个不同云盘厂家;
2、两种介质:本地硬盘、网络存储;
3、一异地:外地网络存储。
3.2 为什么不用第三方网盘同步功能
为什么不用第三方网盘同步功能呢,直接用网盘同步功能不好吗,主要的原因有如下。
1、一些网盘同步功能需要开会员,就算开了会员,没有网盘同步功能,像115网盘;
2、一些网盘同步功能没有加密上传,有一些个人隐私数据,像相册,不想公开上传到网盘。
3.3 隐私文件和非隐私文件两种不同上传方式
根据上面的思路,我将本地硬盘数据分为两类:隐私文件和非隐私文件。隐私文件加密上传网盘,利用挂载盘+duplicacy实现。非隐私文件无需加密直接同步到网盘,利用挂载网盘+freefilesync实现。
3.4 选择duplicacy加密备份原因
我选择了duplicacy作为加密备份软件,经过一些艰难的选择,同时也测试了一些加密备份软件,像市面上的duplicacti、kopia我都尝试用过,有优点,也有不足,最后经过衡量,选择了duplicacy。
3.4.1 关于duplicacti、kopia、duplicacy比较
下面是三款加密备份软件比较
下面是关于duplicacti、kopia、duplicacy的选择经历,如果不感兴趣的话,直接跳到4.1章节看教程。
3.4.2 duplicacti特点
duplicacti图形界面简单明了,操作简单,能自定义备份压缩大小,支持AES-256加密,支持备份到网盘协议有很多,如下图所示。
虽然上面有很多优点,但也存在下面缺点:
1、第一,当你备份量很大,达到1T以上,想恢复某个文件时,耗时非常长,比如我想恢复20MB大小的文件,至少需要好几个小时。当你的文件丢失后,想第一时间恢复数据,会非常耗时,所以我就放弃使用了。
(duplicati相关恢复性能问题,感兴趣的可以了解一下:Direct Restore from Backup works 100% correct, but is waaaaaaaaaay tooooo sloooooow, takes several hours. · Issue #4926 · duplicati/duplicati (github.com))
2、第二,这个备份软件将所有的备份文件都存放在一个文件夹,而没有分类到子文件夹进行存放。对于有单个文件夹有文件数量限制的网盘不友好,像115网盘。
115网盘限制单个文件夹文件数量不能超过10万个(不包括其子文件夹内的文件数量),即使是会员也是同样有此限制。
当备份的文件变多时,就不能往115继续储存了,于是放弃使用这个软件了。
3.4.3 kopia特点
后来接触到kopia这个备份软件:这个备份软件解决了上面所有的问题,像文件恢复速度、文件数量优化问题等。
kopia备份不仅速度快,恢复文件速度也很快,支持AES-256加密、挂载快照,并且有图形化的界面。另外,这个kopia软件可以将备份的数据分别存到备份目录下的不同子文件夹,提高查找索引数据的效率,也解决也115网盘单个文件夹文件数量限制问题,我觉得这个软件性能方面是比较好的。
正当我要考虑 kopia时,我发现其有一个不足,也导致后面我放弃使用了。就是当你备份数据时,由于网络原因,有些备份的数据没有上传成功,或者是由于某个原因备份数据部分丢失了,即使你备份源文件还在,也无法重新生成丢失的备份文件了。
对于上面的情况,只能是删除全部备份数据,再重新全部备份一次。这个就导致了,当你之前花时间备份大量的文件时,像几T,因为网盘上某个备份文件丢了,需要重新备份一次,这是一个耗费时间和人力的,不容易维护。(这个是关于不能重新生成丢失备份块问题:How to regenerate missing blobs - #3 by alejandor - Support - Kopia Forum)
3.4.4 duplicacy特点
虽然kopia备份软件很好,但是不能重新生成丢失数据问题,确实是令人头疼的问题。幸运的是,我找到了dupllicacy,解决了不能重新生成丢失数据问题。
duplicacy支持备份文件去重,对于相同文件只会生成一个备份。具有多备份版本管理功能。支持不同位置备份到同一个位置进行去重。最重要的是它解决了kopia不能重新生成丢失备份数据的问题。
duplicacy备份完成后,生成的备份数据块以其哈希值命名。利用文件管理基本操作,实现备份数据去重。这个备份软件有如下优势:
1、备份的数据部分丢失时,只要源备份数据还在,可以重新生成;
2、备份数据块以其哈希值命名,以达到快速去重;
2、无集中式数据库的管理,使备份简单,减少出错。
不得不佩服作者开发这款作备份软件思路——化繁为简。如果后面有想了解这个备份软件的实现思想,我文章后面附上作者关于开发相关论文,如果对duplicacy原理有兴趣可以了解一下。
该备份软件有图形化gui版和命令cli版:cli版对个人是开源免费的,商用收费。gui版对个人和商用都收费。cli版相比gui版功能更加齐全!具体的收费详情可以看这里:https://duplicacy.com/buy.html
4. 利用duplicacy对隐私文件加密备份
4.1 用CloudDrive2挂载115网盘、阿里云盘、天翼云盘成本地盘
下面是备份基本策略,将备份文件分为两类:隐私文件和非隐私文件。隐私文件用duplicacy加密备份,非隐私文件用freefilesync直接备份。
在备份之前,首先用clouddrive 2将阿云盘、115网盘、天翼网盘挂载成本地盘,挂载的路径按照下图。
对于Clouddrive2免费版,只能挂载添加2个网盘和挂载1个本地盘, 我是开了会员的。如果没有开通会员,可以尝试用其它方法去挂载,如alist映射webdav挂载本地盘。
4.1.1 Clouddrive2的安装及挂载
1、进入官网下载Cloudrive2,链接为:https://www.clouddrive2.com/download.html,根据自己的系统类型下载。因为我用的是window系统,下载window版进行安装。
2、下载安装后,添加115、天翼云盘、阿里云盘,如下图。
根据下面挂载的方式,将天翼云盘挂载成T盘,将阿里云盘挂载为X盘,将115网盘挂载成Y盘。
3、下面以天翼云盘挂载为例,进入天翼云盘要挂载的目录,点击小电脑上的图标。
4、 盘符设置为T、勾选启动时自动挂载、盘符类型为网络盘。
5、举一反三,将剩下的阿里云盘、115网盘挂载为X盘和Y盘。最后效果如下:
4.2 ducplicacy加密备份隐私文件
4.2.1 ducplicacy cli版安装
挂载完阿里云盘、天翼云盘、115网盘后,接着安装duplicacy命令行cli版,以对隐私文件进行加密备份。
1、在github上duplicacy项目上,找到duplicacy发布下载页面:
https://github.com/gilbertchen/duplicacy/releases
2、根据系统类型选择对应下载,因为我电脑是window 64位,我选择window 64下载。
3、将下载好文件重命名为duplicacy.exe。将其放在C:\Windows\System32目录下,即可完成duplicacy的配置。打开命令行窗口,输入duplicacy -v,显示duplicacy版本号,说明配置成功了。
4.2.2 ducplicacy cli版加密备份
4.2.2.1 ducplicacy题外话
本来duplicacy是支持备份到webdav上的,最初的想法是用alist添加了115、天翼网盘、阿里云盘后,映射出webdav,用duplicacy备份到webdav。
遗憾的是duplicacy对webdav兼容性不好,始终无法成功添加webdav协议,一直显示“Maximum backoff reached”或者"URL request 'GET config' returned status code 302"等问题。
所以才有上面通过clouddrive 2挂载成本地盘。再用duplicacy进行备份。
4.2.2.2 init命令初始化
配置完duplicacy后,下面将隐私文件用duplicacy加密到115盘、阿里云盘,首先用duplicacy的init命令开始备份初始化。初始化目的是设置备份加密密码、备份数据存放地点等参数。
在初始化之前,分别在115网盘、阿里云盘的根目录下创建一个duplicacy文件夹,用于存放duplicacy备份数据。
初始化阿里云盘
1、比如,我要备份的隐私文件在“D:\个人资料”路径,进入此路径,启用命令行窗口。
2、使用init命令创建一个storage,名称为default,用于存放备份。备份的快照ID命名为mywork(storage可以理解存储备份容器,里面可以存放不同的快照ID)。
初始化时可以设置是否加密、备份存放地点等参数。我们选择加密、备份路径为挂载盘阿里云盘下的duplicacy目录(即X:\duplicacy),命令如下:
duplicacy init -e -storage-name default mywork X:\duplicacy
也可以写成下面形式。因为当命令行不指定storage名称时,duplicacy会默认将storage名称设置为default。
duplicacy init -e mywork X:\duplicacy
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- init 为初始化命令;
- -e 使用密码加密;
- mywork为快照ID,名称可以自定义;
- X:\duplicacy 备份数据存放位置。
3、执行命令后,输入你要加密的密码,如下:
4、输入加密码后,初始化成功如下:
5、执行init命令后,会在备份目录的当前目录下生成.duplicacy文件夹,用于存放一些配置和缓存文件,这是正常的。
6、关于storage和快照ID的一些说明:
storage是可以指定名称的。一个storage里面是可以存放多个快照ID的,可以将不同位置的文件夹备份到同一个快照ID或者不同的快照ID上。
快照ID也可以自定义名称。对于备份到同一个快照ID,每备份一次,就会生成一个备份版本,也就是说一个快照ID存放着不同的备份版本。当你想恢复文件时,可以选择该快照ID指定版本进行恢复。
快照ID是作为唯一的标识存放在storage上(在不同storage下的快照ID,如果快照ID一样,指向的仍然是同一个快照ID),快照ID可以根据自己的喜好来命名。快照ID命名规则:由字母、数字、'-'、'_'组成。
7、如果研究init命令,从github摘要如下:
SYNOPSIS:
duplicacy init - Initialize the storage if necessary and the current directory as the repository
USAGE:
duplicacy init [command options] <snapshot id> <storage url>
OPTIONS:
-encrypt, -e 使用密码加密存储
-chunk-size, -c <大小> 块的平均大小(默认是4M)
-max-chunk-size, -max <大小> 块的最大大小(默认是chunk-size*4)
-min-chunk-size, -min <大小> 块的最小大小(默认是chunk-size/4)
-zstd-level <级别> 设置zstd压缩级别(最快,默认,更好,或最佳)
-zstd zstd-level default的简写
-iterations <i> 用于存储密钥派生的迭代次数(默认是16384)
-pref-dir <路径> .duplicacy目录的替代位置(绝对路径或相对于当前目录)
-storage-name <名称> 为存储分配一个名称
-key <公钥> 用于加密文件块的RSA公钥
-repository <路径> 在指定路径初始化一个新仓库,而不是当前工作目录
-erasure-coding <数据分片>:<奇偶校验分片> 启用纠删码以防止存储损坏
4.2.2.3 add命令创建一个storage到115网盘
除了要将隐私文件备份到阿里云盘,也要将文件以同样的方式备份到115网盘,这样可以有两个备份。
1、可以用add命令再添加一个storage,storage名称为default01,将数据备份到115网盘(挂载路径为Y:\duplicacy),命令如下:
duplicacy add -e -copy default -bit-identical default01 mywork Y:\duplicacy
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- add 为现有的存储库添加一个额外的存储;
- -e 使用密码加密;
- -copy default 使新存储与现有存储default兼容,以便进行复制操作;
- -bit-identical 搭配-copy命令使用,使新存储与现有存储位级别相同,以便使用rsync等工具进行同步(通俗点是让新备份保持和源备份的文件chunks命名规则一致);
- default01 为新添加的storage名称,可自定义;
- mywork 为快照ID,可自定义;
- Y:\duplicacy 新添加storage的存放位置。
2、执行命令后,输入你要加密的密码(和上面输入密码保持一致),下面显示初始化成功。
3、如果研究add命令,从github摘要如下:
SYNOPSIS:
duplicacy add - 为现有的存储库添加一个额外的存储
USAGE:
duplicacy add [命令选项] <存储名称> <快照ID> <存储URL>
OPTIONS:
-encrypt, -e 使用密码加密存储
-chunk-size, -c <大小> 块的平均大小(默认是4M)
-max-chunk-size, -max <大小> 块的最大大小(默认是块大小的4倍)
-min-chunk-size, -min <大小> 块的最小大小(默认是块大小的1/4)
-zstd-level <级别> 设置zstd压缩级别(最快,默认,更好或最佳)
-zstd 简写形式,相当于设置 -zstd-level 为默认值
-iterations <次数> 存储密钥派生时使用的迭代次数(默认是16384)
-copy <存储名称> 使新存储与现有存储兼容,以便进行复制操作
-bit-identical (使用 -copy 时)使新存储与现有存储位级别相同,以便使用rsync等工具进行同步
-repository <路径> 指定存储库的路径(而不是当前工作目录)
-key <公钥> 用于加密文件块的RSA公钥
4.2.2.4 backup命令执行备份
将阿里云盘、115网盘进行初始化配置后,下面就可以执行backup命令进行备份了。
备份到阿里云盘(default storage)
1、执行下面backup命令:
duplicacy backup -stats -storage default
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- backup 执行备份;
- -stats 在备份期间和之后显示统计信息;
- -storage default 备份到指定的default存储。
2、执行命令后,输入加密密码(只有第一次备份需要输入),开始备份。
3、如下,备份成功。
备份到115网盘(default01 storage)
4、执行下面backup命令:
duplicacy backup -stats -storage default01
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- backup 执行备份;
- -stats 在备份期间和之后显示统计信息;
- -storage default01 备份到指定的default01存储。
5、执行命令后,输入加密密码(只有第一次备份需要输入),开始备份。
6、如果需要研究backup命令,github摘要如下:
NAME:
duplicacy backup - 将存储库的快照保存到存储中
USAGE:
duplicacy backup [命令选项]
OPTIONS:
-hash 通过哈希检测文件差异(而不是大小和时间戳)
-t <标签> 为备份分配一个标签
-stats 在备份期间和之后显示统计信息
-threads <数量> 上传线程的数量
-limit-rate <kB/秒> 最大上传速率(以千字节每秒为单位)
-dry-run 进行测试的演练,不实际备份任何内容。与 -stats 和 -d 一起使用
-zstd-level <级别> 设置zstd压缩级别(最快,默认,更好或最佳)
-zstd 简写形式,相当于设置 -zstd-level 为默认值
-vss 启用卷影复制服务(仅适用于Windows和使用APFS的macOS)
-vss-timeout <超时> 等待卷影复制操作完成的超时时间(以秒为单位)
-storage <存储名称> 备份到指定的存储而不是默认存储
-enum-only 递归枚举存储库然后退出
下面是关于duplicacy备份储存问题,感兴趣可以了解一下,不感兴趣可以直接跳到一下节。
duplicacy备份文件时,将备份数据以chunk形式存放在chunks目录下,也称为“块”。块的命名方式以该块的哈希值命名。比如一个块的哈希值为02c25aea4621acdd4c8751d5ab7ff438fb47308ce8738f030b7db0741c37ecb5,那么该块存放在“02”的文件夹中,即截取哈希值前面两个字符为命名。剩下的后面哈希值作为该块文件名称,即c25aea4621acdd4c8751d5ab7ff438fb47308ce8738f030b7db0741c37ecb5。
4.2.2.4 check命令检查备份数据是否完整
当数据备份完成后,由于一些网络问题或者其它问题,导致一些文件无法上传成功,这就需要定期检查备份的数据是否完整,需要用到check命令。
check命令可以检备份的数据否完整,如果不完整,会显示出快照ID哪个备份版本的chunk丢失了。(如果备份数据丢失了,就需要修复,后面也会讲)。
1、执行下面的check命令:
duplicacy check -storage default
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- check 检查备份;
- -storage default 检查指定的default存储备份。
上面的命令是检查default存储备份数据是否完整,如果要检查default01,只需将default改为default01即可。
因为duplicacy的备份原则按版本进行管理的,每备份一次就会增加一个版本,所以check命令会检查备份快照ID所有版本是否有丢失块。
2、执行命令后,如下。
上面是我备份了多次后的,通过检查,所有的备份版本数据是完整的。显示“All chunks referenced by snapshot ...”说明没有丢失块。
而对于下面这种情况,显示为“Some chunks referenced by snapshot mywork at revision xx are missing”,则会丢失块。
作为这种情况,需要对丢失的备份数据进行修复,放至后面会讲。
3、如果研究check命令,github摘要如下:
SYNOPSIS:
duplicacy check - 检查快照的完整性
USAGE:
duplicacy check [命令选项]
OPTIONS:
-all, -a 检查全部快照ID,而不是默认的快照ID
-id <快照ID> 检查具有指定快照ID
-r <修订版本> [+] 指定快照的修订版本号
-t <标签> 检查具有指定标签的快照
-fossils 如果无法找到某个块,则搜索fossils
-resurrect 将引用的fossils恢复为块
-rewrite 重写有可恢复损坏的块
-files 验证每个文件的完整性
-chunks 验证每个块的完整性
-stats 显示重复数据删除统计信息(意味着 -all 和所有修订版本)
-tabular 显示表格化的使用和重复数据删除统计信息(意味着 -stats,-all 和所有修订版本)
-storage <存储名称> 从指定的存储中检索快照
-key <私钥> 用于解密文件块的RSA私钥
-key-passphrase <密码短语> 用于解密RSA私钥的密码短语
-threads <数量> 用于验证块的线程数量
4.2.2.5 prune命令清理旧备份
check命令对备份数据进行定期检查后,保证了在需要恢复数据时,保证数据恢复的完整。但是随着备份版本的增多,需要定期1、清理旧备份,以腾出空间。
虽然对于相同的文件,duplicacy只会储存一份,只有文件内容发生变化时,才会重新进行备份。但是也需要进行定期清理旧备份。
阿里云盘清理(default storage)
1、执行下面prune命令:
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7 -storage default
keep命令拆分解析
duplicacy prune -keep 1:7 # 对于超过7天的修订版本,每天保留一个修订版本
duplicacy prune -keep 7:30 # 对于超过30天的修订版本,每7天保留一个修订版本
duplicacy prune -keep 30:180 # 对于超过180天的修订版本,每30天保留一个修订版本
duplicacy prune -keep 0:360 # 不保留超过360天的修订版本
#将上面命令合为一条命令:
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7
prune命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- prune修剪备份;
- -keep <n:m> 对于超过m天的修订版本,每n天保留一个修订版本
- -storage default 检查指定的default存储备份。
115网盘清理(default01 storage)
2、上面的命令是清理default存储备份数据,如果要清理115网盘(即default01 storage),只需将default改为default01即可。
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7 -storage default01
注:对于上面的prune命令,-keep参数可以根据自己需求进行灵活修改;
3、如果研究prune命令,github摘要如下:
NAME:
duplicacy prune - 根据编号、标签或保留策略修剪修订版本
USAGE:
duplicacy prune [命令选项]
OPTIONS:
-id <快照ID> 删除具有指定快照ID,而不是默认的快照ID
-all, -a 匹配所有快照ID
-r <修订版本> [+] 删除指定的修订版本
-t <标签> [+] 删除具有指定标签的修订版本
-keep <n:m> [+] 对于超过m天的修订版本,每n天保留一个修订版本
-exhaustive 删除所有未引用的块(不仅仅是那些被删除快照引用的块)
-exclusive 假设对存储具有独占访问权(禁用两步fossil收集)
-dry-run, -d 显示将要删除的内容
-delete-only 仅删除之前收集的fossils(如果可以删除),不收集新的fossils
-collect-only 识别并收集fossils,但不删除之前收集的fossils
-ignore <ID> [+] 在决定是否可以删除fossils时,忽略具有指定快照ID的修订版本
-storage <存储名称> 从指定的存储中修剪修订版本
-threads <数量> 用于修剪未引用块的线程数量
4.2.2.6 duplicacy恢复文件
上面通过init、add、backup、check、prune命令进行初始化、添加、检查、修剪操作,确保数据的正确准备。当我们本地文件由于意外情况丢失后,我们应该如何恢复呢?
这里介绍两种方法。第一种是通过restore命令方法,第二种是可以通过下载duplicacy官方图形化软件实现(在没有获得许可证的情况下,除了不能备份,像还原、检查、复制和修剪都可以免费使用)。
4.2.2.6.1 restore命令在cil版使用
如果你不选择在源备份文件目录下恢复文件,而是选择先恢复到其它位置(选择在源备份文件目录恢复,会覆盖原文件,相对不安全)。
1、打开命令行窗口,cd到存放目录,比如你想将文件恢复到C:\Users\123\Desktop,即
cd C:\Users\123\Desktop
2、接下来,比如你需要从defualt存储的mywork快照恢复文件,该default存储存放在X:\duplicacy上。用init命令先初始化一下
duplicacy init -e -storage-name default mywork X:\duplicacy
或者执行下面命令,因为当你不指定storage名称时,默认storage名称同样是default。
duplicacy init -e mywork X:\duplicacy
3、然后输入你之前的加密密码
3、初始化成功后,可以用list命令列出该快照有多少备份版本,然后输入密码。
duplicacy list
4、比如我要从revision 33的版本恢复全部文件,可以执行下面命令
duplicacy restore -r 33
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- restore 恢复备份;
- -r 33 需要第33版本进行恢复。
但是有时候,我们不一定要恢复全部文件,我只需要恢复特定的文件夹或者文件。比如我想恢复路径"D:\个人资料\相册\精选照片"下的所有文件。
因为我的duplicacy备份是在“D:\个人资料”路径下对所有文件进行备份。所以我想恢复"D:\个人资料\相册\精选照片"内容,只需要填写“个人资料”下一级目录,即“相册\精选照片\*”。
需要注意的是,根据restore命令要求,电脑上路径的分隔符'\'需要改为linux系统上'/',即“相册/精选照片/*”。
5、恢复restore命令如下:
duplicacy restore -r 33 -- '相册/精选照片/*'
6、恢复结束如下,成功!
7、比如我只想恢复路径"D:\个人资料\相册\精选照片"下“精选照片 2024.5.17.rar”文件,可以将命令改为如下:
duplicacy restore -r 33 -- '相册/精选照片/精选照片 2024.5.17.rar'
8、恢复结束如下,成功!
9、如果研究restore命令,github摘要如下:
SYNOPSIS:
duplicacy restore - Restore the repository to a previously saved snapshot
USAGE:
duplicacy restore [command options] [--] [pattern] ...
OPTIONS:
-r <修订版本> 快照的修订版本号(必需)
-hash 通过哈希(而不是大小和时间戳)检测文件差异
-overwrite 覆盖仓库中现有的文件
-delete 删除快照中不存在的文件
-ignore-owner 不设置还原文件的原始用户ID/组ID
-stats 在还原期间和之后显示统计信息
-threads <数量> 下载线程的数量
-limit-rate <kB/s> 最大下载速率(以千字节/秒为单位)
-storage <存储名称> 从指定的存储而不是默认存储进行还原
-key <私钥> 用于解密文件块的RSA私钥
-key-passphrase <密码短语> 用于解密RSA私钥的密码短语
-persist 即使存在块错误或现有文件(未使用 -overwrite)也继续处理
10、如果研究list命令,github摘要如下:
SYNOPSIS:
duplicacy list - List snapshots
USAGE:
duplicacy list [command options]
OPTIONS:
-all, -a 列出所有ID的快照
-id <快照ID> 列出指定ID的快照,而不是默认的快照
-r <修订版本> [+] 快照的修订版本号
-t <标签> 列出具有指定标签的快照
-files 打印每个快照中的文件列表
-chunks 打印每个快照中的块,如果未指定快照则打印所有块
-reset-passwords 从输入中获取密码,而不是从钥匙串/密钥环或环境变量中获取
-storage <存储名称> 从指定的存储中检索快照
4.2.2.6.2 在duplicacy图形化软件恢复文件
上面除了使用restore命令行的形式进行恢复文件,还可以在duplicacy图形化界面恢复,图形化界面恢复更加直观。
1、duplicacy图形化软件下载:https://duplicacy.com/download.html
2、下载安装后,初次打开界面,为软件设置一个密码。此密码不是你上面备份数据的加密密码,只是你打开软件时的一个软件保护密码。
3、进行入软件界面。
4、新建一个storage,选备份数据存放位置,比如我要从阿云盘恢复,我选择X:\duplicacy。
5、输入storage名称,storage可以填default,输入之前备份数的加密密码。
6、点击左边的restore,按照下图填写相关参数,如storage、快照ID、快照备份版本、还原目录。最后点击底部的RESTORE开始还原。
7、等待底部进度条走完,还原成功!
4.2.3 bauckup、prune、check命令自动化执行
当我每次进行备份时,都需要依次执行bauckup、prune、check命令,而且除了default storage要操作一遍,default01 storage也要操作一遍,相当麻烦。因为duplicacy官方cli没有自带批量处理。
4.2.3.1 backup_duplicacy. ps1配置
我在github上发现一个项目,可以解决上面自动化处理的问题。具体网址:https://github.com/mattjm/duplicacy-script。
原理是作者创建一个PowerShell脚本,批量执行duplicacy命令,然后输出日志文件。如果需要定时备份,可以将PowerShell脚本添加到window的任务计划程序。
对于作者PowerShell脚本,需要根据我们自己备份的情况,将duplicacy.exe存放路径、日志存放路径、duplicacy执行命令进行替换。
1、根据我们之前duplicacy配置,duplicacy.exe位置如下:
C:\Windows\System32
2、对于阿里云盘(default storage),让其依次执行以下命令:
duplicacy backup -stats -storage default
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7 -storage default
duplicacy check -storage default
注:上面的命令是每次在阿里云盘备份完成后,进行一次修剪、检查,确保备份无误,对于下面的115网盘也是一样。
3、对于115网盘(default01 storage),让其依次执行以下令:
duplicacy backup -stats -storage default01
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7 -storage default01
duplicacy check -storage default01
4、根据上面提到的参数,将PowerShell脚本内容替换掉
为了方便,我已经作者的源代码进行修改,只需要将日志存放位置、备份源文件目录根据实际情况替换即可。backup_duplicacy. ps1下载链接:https://www.alipan.com/s/i5BpXGTtE12 提取码: ph87
5、修改完PowerShell,然后用PowerShell运行脚本。
在运行ps1脚本之前, ps1 脚本默认是禁止执行的:
6、可以查看当前PS中脚本执行权限
Get-ExecutionPolicy
Get-ExecutionPolicy -List
7、更改为允许脚本运行,管理员身份运行Powershell,执行下面命令
Set-ExecutionPolicy Unrestricted
8、开放ps1执行权限后,右键使用PowerShell运行backup_duplicacy. ps1
9、运行完毕后,可以查看备份日志,检查备份情况。
4.2.3.2 添加到window的任务计划程序执行定时备份
下面将backup_duplicacy. ps1添加到window任务计划程序中
1、打开window任务计划管理器,创建基本任务。
2、填写任务名称
3、在触发器一栏,选择执行计划。
4、设置计划详情
5、选择启动程序
6、程序名称写powershell,添加参数:ps1脚本存放路径
7、点击下一步,最后点完成
8、成功添加成功后,可以右键运行一下该任务,看是否能成功运行。
如果上面自动化的duplicacy项目满足不了要求,如果还想要其它需求,像备份结束后有电报、Healthchecks.io通知功能,可以参考下面的github项目:https://github.com/TheBestPessimist/duplicacy-utils;
4.2.4 对丢失备份数据进行修复(很重要)
由于一些网络或者其它原因,会导致备份数据的块丢失。如果备份数据块丢失了,涉及该块 的备份数据是无法成功恢复的。幸运的是,只要备份的源数据还在,是可以进行重新生成丢失的数据块。
修复方法:在备份的源目录下,运行打开命令行窗口,在丢失块所在的storage上,新建与丢失块的快照ID名称不同的快照ID。比如我我丢失块的快照ID为mywork,我可以重新建一个快照ID为myork01。只要保证该快照mywork01的备份配置与mywork配置一样即可,就可以生成一模一样的块出来。
如不想了解修复原理的话,直接略过,直接看修复操作部分就好。
修复原理:对于已经新建的快照ID,在备份过程中,因为mywork与mywork01两个快照ID备份的源文件相同,两者配置一样,两者生成的块也是一样的。所以mywork01将备份上传到chunk文件夹,对于没有丢失的块,对比相同会跳过不上传,而丢失块因为丢失会重新上传,从而达到修复块目的。
可能有人说,为什么当丢失块时,不直接在mywork再运行一次备份呢,以达修复块的目的呢?
我试过是不行的。可能是在mywork每次备份成功之后,会生成目录清单文件。而duplicacy在每次备份时,只会对比清单文件与源备份文件目录是否一致,而不会检查目录清单文件是否引用块,如果清单文件与备份文件目录一致,软件就不会进行备份,更不会重新生成丢失的块。
新建一个与之前不同的快照ID,duplicacy认为是一个新的文件备份,会重新生成一个文件清单目录,对所有备份的文件重新上传块,所以就能达到查漏补缺作用。
具体修复操作
1、首先把之前备份目录下的.duplicacy文件夹移到新的位置存放好(很重要);
注:等修复完成后,再移回来。因为该文件夹保存了之前mywork快照的配置缓存。我们需要把之前的备份目录当成一次新的备份,重新备份一次,所以先暂时移除。
2、打开命令窗口
比如我的之前备份的目录是D:\个人资料,丢失块的目录是X:\duplicacy。所以在目录“D:\个人资料”打开命令行窗口。
3、执行下面命令,使其添加一个mywork01快照ID,密码输入你之前旧备份的加密密码
duplicacy init -e mywork01 X:\duplicacy
4、然后执行备份,输入旧备份的密码继续
duplicacy backup -stats -storage default
5、备份完成后,删除掉当前.duplicacy文件夹。将之前.duplicacy文件夹移回来,现在就可以用check命令来检查chucks是否修复成功。
5、执行下面check命令
duplicacy check -storage default
6、等待检查,完美修复!
7、修复块完成后,可以把mywork01快照ID删除掉(修复完成后,没什么作用了)。执行下面命令
duplicacy prune -storage default -id mywork01 -r 1 -exclusive
命令解析:
- duplicacy 为调用duplicacy程序执行命令;
- prune 修剪备份;
- -storage default 检查指定的default存储备份;
- -id mywork01 指定特定的快照ID,即mywork01;
- -r 1 指定快照ID备份版本,即1,因为刚才我们只备份了一个版本;
- -exclusive 禁用两步化石收集(相当一种备份安全保护模式),如果没有加上该参数,可能删除不掉快照。
5. 将非隐私文件用FreeFileSync上传到115盘、天翼云盘
上面将隐私文件将用duplicacy加密后,下面用freefilesync将非隐私文件同步到115网盘和天翼云盘。
下面来介绍一下freefilesync同步软件,这款软件是免费开源软件,支持镜像同步、双向同步、更新同步。可以通过对比大小、时间、文件的内容是否有改变进行同步。
该软件可以通过捐赠一定金额给作者,以获捐赠版,以更多功能的体验,比如备份完成通知邮箱功能、多线程处理功能等。freefilesync官网:https://freefilesync.org/
5.1 freefilesync手动备份
1、进入freefilesync官网,找到对应系统的版本,因为我系统window版,所以我选择window版下载。
2、安装完成后,打开软件,界面如下
以我个人备份文件夹为例,我需要目录“将D:\网上资源”,分别同步到天翼网盘(T:\网上资源)和115网盘(Y:\网上资源)上。
同步的模式为镜像同步,即目标文件始终与原始文件一致。目标文件的任何操作不会影响原始文件,原始文件的任何变动都会同步到目标文件中,始终与原始文件保持镜像关系。
3、需要注意的是,当文件上传到网盘时,无论是天翼网盘和115网盘,上传后文件的创建时间会变成改为上传时的时间。所以对比的条件不能设置为文件时间和大小,应该设置为文件大小(文件名为默认比较条件)。
4、根据上图设置进行配置后,点击比较。
5、比较后,得到如下结果,最后点击同步。
6、同步完成。
5.2 freefilesync定时备份
上面的操作是手动同步的,下面来设置自动定时同步。因为该软件支持导出批处理文件,可以利用批处理文件添加到计划任务管理器中,下面进行演示。
1、设置好配置后,点击导出批处理文件
2、弹出设置框,进度对话框:最小化运行、自动关闭,忽略错误三项都勾上。
3、然后点击另存为,选择保存位置,然后命名保存。
记住此时保存的*.ffs_batch处理文件保存位置
4、下面来打开任务计划程序,创建基本任务
5、填写计划名称,点击下一步
6、根据自己的实际情况选择备份计划
7、填写计划备份详情
8、选择启动程序
9、填上*. ffsbatch 批处理文件的位置
10、最后点击完成
11、当设置完成后,选择试运行一下
12、这时可以看到后台,FreeFileSync跑起来了
上面步骤完成了用freefilesync对非隐私文件手动备份和定时备份,当然freefilesync还支持当文件发生更改时自动备份,具体可以自己研究一下。
6. 个人感受
教程写到这里也基本结束了,本次教程主要是通过duplicacy、freefilesync对机械硬盘的隐私文件和非隐私文件进行备份并上传到不同网盘,实现一份数据多处备份,解决隐私泄露和数据丢失等问题。
经过这段时间使用,整个备份流程下来,主要还是考验挂载盘的稳定性,duplicacy、freefilesync端很少出现问题。因为我的备份的数据量比较大,达到几T,如果由于网络原因,在备份上传的过程中止了,当网络恢复时,是否能够恢复上传,或者不会上传卡住等问题,很考验挂载盘的稳定性。
虽然clouddrive2在使用过程中有一两次卡住了,导致了duplicacy备份数据缺失,所以后面通过修复缺失块,修复好了,总体上还算比较满意。
如果你对duplicacy备份感兴趣的话,想深入研究一下,可以看文章末尾的链接,我会附上相关资料链接,加深你对duplicacy备份软件的理解!
以上是我关于duplicacy、freefilesync的备份教程,纯属个人的经验和看法,文章有写不正确的地方,欢迎多多指正,谢谢!
7. 参考资料
1. duplicacy官网:https://duplicacy.com/
2. duplicacy论坛:https://forum.duplicacy.com/
(你遇到的很多duplicacy问题都可以在这里找到答案,你也可以在这里提问)
3. duplicacy github项目:https://github.com/gilbertchen/duplicacy
4. 有关duplicacy命令行的使用指南:https://github.com/gilbertchen/duplicacy/wiki
5. duplicacy软件备份论文:https://ieeexplore.ieee.org/document/9310668
(需要深入了解duplicacy原理的话,可以看这个)
6. Windows 任务计划程序定时执行 powershell 脚本:https://blog.csdn.net/kk185800961/article/details/50587794
7. duplicacy丢失块修复问题:https://forum.duplicacy.com/t/fix-missing-chunks/1095
8. duplicati相关恢复性能问题:https://github.com/duplicati/duplicati/issues/4926
8. 附件资料
1、poweshell脚本backup_duplicacy. ps1下载链接:https://www.alipan.com/s/i5BpXGTtE12 提取码: ph87
2、duplicacy软件备份论文: https://www.alipan.com/s/LrE8ub3h2g1 提取码: 28ol