利用duplicacy加密备份、freefilesync非加密备份数据到第三方网盘

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

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. init 为初始化命令;
  3. -e 使用密码加密;
  4.  mywork为快照ID,名称可以自定义;
  5. 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

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. add 为现有的存储库添加一个额外的存储;
  3. -e 使用密码加密;
  4. -copy default 使新存储与现有存储default兼容,以便进行复制操作;
  5. -bit-identical  搭配-copy命令使用,使新存储与现有存储位级别相同,以便使用rsync等工具进行同步(通俗点是让新备份保持和源备份的文件chunks命名规则一致);
  6. default01 为新添加的storage名称,可自定义;
  7. mywork 为快照ID,可自定义;
  8. 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

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. backup 执行备份;
  3. -stats 在备份期间和之后显示统计信息;
  4. -storage default 备份到指定的default存储。

2、执行命令后,输入加密密码(只有第一次备份需要输入),开始备份。

3、如下,备份成功。

备份到115网盘(default01 storage)

4、执行下面backup命令:

duplicacy backup -stats -storage default01

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. backup 执行备份;
  3. -stats 在备份期间和之后显示统计信息;
  4. -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

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. check 检查备份;
  3. -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命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. prune修剪备份;
  3. -keep <n:m> 对于超过m天的修订版本,每n天保留一个修订版本
  4. -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

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. restore 恢复备份;
  3. -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 

命令解析:

  1. duplicacy 为调用duplicacy程序执行命令;
  2. prune 修剪备份;
  3. -storage default 检查指定的default存储备份;
  4. -id mywork01 指定特定的快照ID,即mywork01;
  5. -r 1 指定快照ID备份版本,即1,因为刚才我们只备份了一个版本;
  6. -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

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值