掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

如何使用 BorgBackup、Rclone 和 Wasabi 云存储推出自己的家庭备份解决方案

使用基于开源软件和廉价云存储的自动备份解决方案来保护你的数据。

几年来,我用 CrashPlan 来备份我家的电脑,包括属于我妻子和兄弟姐妹的电脑。CrashPlan 本质上是“永远在线”,不需要为它操心就可以做的规律性的备份,这真是太棒了。此外,能使用时间点恢复的能力多次派上用场。因为我通常是家庭的 IT 人员,所以我对其用户界面非常容易使用感到高兴,家人可以在没有我帮助的情况下恢复他们的数据。

最近 CrashPlan 宣布,它正在放弃其消费者订阅,专注于其企业客户。我想,这是有道理的,因为它不能从像我这样的人赚到很多钱,而我们的家庭计划在其系统上使用了大量的存储空间。

我决定,我需要一个合适的替代功能,包括:

  • 跨平台支持 Linux 和 Mac
  • 自动化(所以没有必要记得点击“备份”)
  • 时间点恢复(可以关闭),所以如果你不小心删除了一个文件,但直到后来才注意到,它仍然可以恢复
  • 低成本
  • 备份有多份存储,这样数据存在于多个地方(即,不仅仅是备份到本地 USB 驱动器上)
  • 加密以防备份文件落入坏人手中

我四处搜寻,问我的朋友有关类似于 CrashPlan 的服务。我对其中一个 Arq 非常满意,但没有 Linux 支持意味着对我没用。Carbonite 与 CrashPlan 类似,但会很昂贵,因为我有多台机器需要备份。Backblaze 以优惠的价格(每月 5 美金)提供无限备份,但其备份客户端不支持 Linux。BackupPC 是一个强有力的竞争者,但在我想起它之前,我已经开始测试我的解决方案了。我看到的其它选项都不符合我要的一切。这意味着我必须找出一种方法来复制 CrashPlan 为我和我的家人提供的服务。

我知道在 Linux 系统上备份文件有很多好的选择。事实上,我一直在使用 rdiff-backup 至少 10 年了,通常用于本地保存远程文件系统的快照。我希望能够找到可以去除备份数据中重复部分的工具,因为我知道有些(如音乐库和照片)会存储在多台计算机上。

我认为我所做的工作非常接近实现我的目标。

我的备份解决方案

backup solution diagram

最终,我的目标落在 BorgBackupRclone 和 Wasabi 云存储的组合上,我的决定让我感到无比快乐。Borg 符合我所有的标准,并有一个非常健康的用户和贡献者社区。它提供重复数据删除和压缩功能,并且在 PC、Mac 和 Linux 上运行良好。我使用 Rclone 将来自 Borg 主机的备份仓库同步到 Wasabi 上的 S3 兼容存储。任何与 S3 兼容的存储都可以工作,但是我选择了 Wasabi,因为它的价格好,而且它的性能超过了亚马逊的 S3。使用此设置,我可以从本地 Borg 主机或从 Wasabi 恢复文件。

在我的机器上安装 Borg 只要 sudo apt install borgbackup。我的备份主机是一台连接有 1.5TB USB 驱动器的 Linux 机器。如果你没有可用的机器,那么备份主机可以像 Raspberry Pi 一样轻巧。只要确保所有的客户端机器都可以通过 SSH 访问这个服务器,那么你就能用了。

在备份主机上,使用以下命令初始化新的备份仓库:

  1. $ borg init /mnt/backup/repo1

根据你要备份的内容,你可能会选择在每台计算机上创建多个仓库,或者为所有计算机创建一个大型仓库。由于 Borg 有重复数据删除功能,如果在多台计算机上有相同的数据,那么从所有这些计算机向同一个仓库发送备份可能是有意义的。

在 Linux 上安装 Borg 非常简单。在 Mac OS X 上,我需要首先安装 XCode 和 Homebrew。我遵循 how-to来安装命令行工具,然后使用 pip3 install borgbackup。

备份

每台机器都有一个 backup.sh 脚本(见下文),由 cron 任务定期启动。它每天只做一个备份集,但在同一天尝试几次也没有什么不好的。笔记本电脑每隔两个小时就会尝试备份一次,因为不能保证它们在某个特定的时间开启,但很可能在其中一个时间开启。这可以通过编写一个始终运行的守护进程来改进,并在笔记本电脑唤醒时触发备份尝试。但现在,我对它的运作方式感到满意。

我可以跳过 cron 任务,并为每个用户提供一个相对简单的方法来使用 BorgWeb 来触发备份,但是我真的不希望任何人必须记得备份。我倾向于忘记点击那个备份按钮,直到我急需修复(这时太迟了!)。

我使用的备份脚本来自 Borg 的快速入门文档,另外我在顶部添加了一些检查,看 Borg 是否已经在运行,如果之前的备份运行仍在进行这个脚本就会退出。这个脚本会创建一个新的备份集,并用主机名和当前日期来标记它。然后用简单的保留计划来整理旧的备份集。

这是我的 backup.sh 脚本:

  1. #!/bin/sh
  2. REPOSITORY=borg@borgserver:/mnt/backup/repo1
  3. #Bail if borg is already running, maybe previous run didn't finish
  4. if pidof -x borg >/dev/null; then
  5.     echo "Backup already running"
  6.     exit
  7. fi
  8. # Setting this, so you won't be asked for your repository passphrase:
  9. export BORG_PASSPHRASE='thisisnotreallymypassphrase'
  10. # or this to ask an external program to supply the passphrase:
  11. export BORG_PASSCOMMAND='pass show backup'
  12. # Backup all of /home and /var/www except a few
  13. # excluded directories
  14. borg create ---stats                          \
  15.     $REPOSITORY::'{hostname}-{now:%Y-%m-%d}'    \
  16.     /home/doc                                   \
  17.     --exclude '/home/doc/.cache'                \
  18.     --exclude '/home/doc/.minikube'             \
  19.     --exclude '/home/doc/Downloads'             \
  20.     --exclude '/home/doc/Videos'                \
  21.     --exclude '/home/doc/Music'                 \
  22. # Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
  23. # archives of THIS machine. The '{hostname}-' prefix is very important to
  24. # limit prune's operation to this machine's archives and not apply to
  25. # other machine's archives also.
  26. borg prune -v --list $REPOSITORY --prefix '{hostname}-' \
  27.     --keep-daily=7 --keep-weekly=4 --keep-monthly=6

备份的输出如下所示:

  1. ------------------------------------------------------------------------------
  2. Archive name: x250-2017-10-05
  3. Archive fingerprint: xxxxxxxxxxxxxxxxxxx
  4. Time (start): Thu, 2017-10-05 03:09:03
  5. Time (end):   Thu, 2017-10-05 03:12:11
  6. Duration: 3 minutes 8.12 seconds
  7. Number of files: 171150
  8. ------------------------------------------------------------------------------
  9.                        Original size      Compressed size Deduplicated size
  10. This archive:               27.75 GB             27.76 GB 323.76 MB
  11. All archives:                3.08 TB              3.08 TB 262.76 GB
  12.                        Unique chunks         Total chunks
  13. Chunk index:                 1682989             24007828
  14. ------------------------------------------------------------------------------
  15. [...]
  16. Keeping archive: x250-2017-09-17                      Sun, 2017-09-17 03:09:02
  17. Pruning archive: x250-2017-09-28                      Thu, 2017-09-28 03:09:02

我在将所有的机器备份到主机上后,我遵循安装预编译的 Rclone 二进制文件指导,并将其设置为访问我的 Wasabi 帐户。

此脚本每天晚上运行以将任何更改同步到备份集:

  1. #!/bin/bash
  2. set -e
  3. repos=( repo1 repo2 repo3 )
  4. #Bail if rclone is already running, maybe previous run didn't finish
  5. if pidof -x rclone >/dev/null; then
  6.     echo "Process already running"
  7.     exit
  8. fi
  9. for i in "${repos[@]}"
  10. do
  11.     #Lets see how much space is used by directory to back up
  12.     #if directory is gone, or has gotten small, we will exit
  13.     space=`du -s /mnt/backup/$i|awk '{print $1}'`
  14.     if (( $space < 34500000 )); then
  15. 声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 营运车判定查询

    输入车牌号码或车架号,判定是否属于营运车辆。

    输入车牌号码或车架号,判定是否属于营运车辆。

  • 名下车辆数量查询

    根据身份证号码/统一社会信用代码查询名下车辆数量。

    根据身份证号码/统一社会信用代码查询名下车辆数量。

  • 车辆理赔情况查询

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

  • 车辆过户次数查询

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

  • 风险人员分值

    根据姓名和身份证查询风险人员分值。

    根据姓名和身份证查询风险人员分值。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future