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

几年来,我使用CrashPlan备份了我家庭的计算机,包括属于我妻子和兄弟姐妹的计算机。 CrashPlan本质上是“始终在线”并且无需考虑就可以进行频繁备份的事实真是太棒了。 此外,进行时间点还原的功能在很多情况下都派上了用场。 因为我通常是家庭的IT人员,所以我喜欢用户界面非常易于使用,以致家庭成员无需我的帮助即可恢复其数据。

最近, CrashPlan宣布将放弃其用户订阅,以专注于其企业客户。 我想这是有道理的,因为它并没有像我这样的人赚很多钱,而且我们的家庭计划正在其系统上使用大量存储。

我决定在合适的替代品中需要的功能包括:

  • 对Linux和Mac的跨平台支持
  • 自动化(因此无需记住单击“备份”)
  • 时间点恢复(或接近的恢复),因此,如果您不小心删除了文件但直到稍后才注意到,该文件仍可恢复
  • 低成本
  • 用于备份集的复制数据存储,因此数据存在多个位置(即,不仅仅备份到本地USB驱动器)
  • 加密以防备份文件落入他人之手

我四处搜寻,并向朋友询问有关CrashPlan的服务。 一个人对Arq感到非常满意,但是没有Linux支持意味着对我没有好处。 Carbonite与CrashPlan类似,但价格昂贵,因为我有多台机器要备份。 Backblaze以合理的价格(每月5美元)提供无限的备份,但是其备份客户端不支持Linux。 BackupPC是一个强有力的竞争者,但是我在记住它之前就已经开始测试我的解决方案。 我看过的其他选项都无法满足我的所有需求。 这意味着我必须找出一种方法来复制CrashPlan为我和我的家人提供的东西。

我知道在Linux系统上备份文件有很多不错的选择。 实际上,我已经使用rdiff-backup至少有十年了,通常用于本地保存远程文件系统的快照。 我希望找到一些可以更好地对重复数据进行重复数据删除的方法,因为我知道某些东西(例如音乐库和照片)将存储在多台计算机上。

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

我的备份解决方案

backup solution diagram

最终,我使用了BorgBackupRcloneWasabi云存储的组合 ,我对自己的决定感到很高兴。 博格符合我的所有标准,拥有相当健康的用户和贡献者社区 。 它提供了重复数据删除和压缩功能,并在PC,Mac和Linux上运行良好。 我使用Rclone将Borg主机的备份存储库同步到Wasabi上的S3兼容存储。 任何与S3兼容的存储都可以使用,但我之所以选择Wasabi,是因为它的价格无法与之相比,并且它的性能优于亚马逊的S3。 通过此设置,我可以从本地Borg主机或Wasabi恢复文件。

在我的机器上安装Borg就像sudo apt install borgbackup一样简单。 我的备份主机是一台Linux计算机,始终连接有1.5TB USB驱动器。 如果您没有可用的计算机,则此备份主机可能像Raspberry Pi一样轻巧。 只要确保所有客户端计算机都可以通过SSH到达此服务器,您就可以开始了。

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


$  borg init / mnt / backup / repo1 

根据您要备份的内容,您可能选择为每台计算机创建多个存储库,或者为所有计算机创建一个大型存储库。 因为Borg重复数据删除,所以如果您在多台计算机上具有相同的数据,则将所有这些计算机的备份发送到同一存储库可能是有意义的。

在Linux客户端计算机上安装Borg非常简单。 在Mac OS上,XI需要首先安装XCode和Homebrew。 我遵循了如何安装命令行工具的方法,然后使用了pip3 install borgbackup

备份

每台计算机都有一个backup.sh脚本(请参见下文),该脚本由cron定期启动; 它每天只会创建一个备份集,但是同一天尝试几次不会有什么坏处。 笔记本电脑设置为每两个小时尝试一次,因为不能保证一定会在某个时间打开笔记本电脑,但是很可能在其中一个时间内打开笔记本电脑。 通过编写一个始终在运行的守护程序,并在笔记本电脑每次唤醒时触发一次备份尝试,可以改善这一点。 就目前而言,我对事情的运作方式感到满意。

我可以跳过cron作业,并为每个用户提供一个相对简单的方法来使用BorgWeb触发备份,但是我真的不希望任何人都必须记住要备份的内容。 在我迫切需要恢复之前,我往往会忘记单击该备份按钮(这时为时已晚!)。

我正在使用的备份脚本来自Borg 快速入门文档,另外我在顶部添加了一点检查以查看Borg是否已在运行,如果先前的备份运行仍在进行中,它将退出该脚本。 该脚本创建一个新的备份集,并用主机名和当前日期标记它。 然后,它以简单的保留时间表修剪旧的备份集。

这是我的backup.sh脚本:



   
   
#!/bin/sh

REPOSITORY =borg @ borgserver: / mnt / backup / repo1

#Bail if borg is already running, maybe previous run didn't finish
if pidof -x borg >/ dev / null; then
    echo "Backup already running"
    exit
fi

# Setting this, so you won't be asked for your repository passphrase:
export BORG_PASSPHRASE = 'thisisnotreallymypassphrase'
# or this to ask an external program to supply the passphrase:
export BORG_PASSCOMMAND = 'pass show backup'

# Backup all of /home and /var/www except a few
# excluded directories
borg create -v --stats                          \
    $REPOSITORY :: '{hostname}-{now:%Y-%m-%d}'    \
    / home / doc                                   \
    --exclude '/home/doc/.cache'                \
    --exclude '/home/doc/.minikube'             \
    --exclude '/home/doc/Downloads'             \
    --exclude '/home/doc/Videos'                \
    --exclude '/home/doc/Music'                 \

# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-' prefix is very important to
# limit prune's operation to this machine's archives and not apply to
# other machine's archives also.
borg prune -v --list $REPOSITORY --prefix '{hostname}-' \
    --keep-daily = 7 --keep-weekly = 4 --keep-monthly = 6

备份运行的输出如下所示:



   
   
------------------------------------------------------------------------------
Archive name: x250- 2017 - 10 -05
Archive fingerprint: xxxxxxxxxxxxxxxxxxx
Time ( start ) : Thu, 2017 - 10 -05 03:09:03
Time ( end ) :   Thu, 2017 - 10 -05 03: 12 : 11
Duration: 3 minutes 8.12 seconds
Number of files: 171150
------------------------------------------------------------------------------
                       Original size      Compressed size Deduplicated size
This archive:               27.75 GB             27.76 GB 323.76 MB
All archives:                 3.08 TB               3.08 TB 262.76 GB

                       Unique chunks         Total chunks
Chunk index:                 1682989             24007828
------------------------------------------------------------------------------
[ ... ]
Keeping archive: x250- 2017 -09- 17                      Sun, 2017 -09- 17 03:09:02
Pruning archive: x250- 2017 -09- 28                      Thu, 2017 -09- 28 03:09:02

将所有计算机备份到主机后,我将按照说明安装预编译的Rclone二进制文件并将其设置为访问我的Wasabi帐户。

该脚本每天晚上运行,以同步对备份集的任何更改:



   
   
#!/bin/bash
set -e

repos = ( repo1 repo2 repo3 )

#Bail if rclone is already running, maybe previous run didn't finish
if pidof -x rclone >/ dev / null; then
    echo "Process already running"
    exit
fi

for i in " ${repos[@]} "
do
    #Lets see how much space is used by directory to back up
    #if directory is gone, or has gotten small, we will exit
    space = ` du -s / mnt / backup / $i | awk '{print $1}' `

    if ( ( $space < 34500000 ) ) ; then
        echo "EXITING - not enough space used in $i "
        exit
    fi

    / usr / bin / rclone -v sync / mnt / backup / $i wasabi: $i >> / home / borg / wasabi-sync.log 2 >& 1
done

备份集与Rclone到Wasabi的第一次同步花了几天时间,但是它大约有400GB的新数据,而且我的出站连接不是非常快。 但是每日增量很小,仅需几分钟即可完成。

恢复文件

恢复文件并不像使用CrashPlan那样容易,但是相对简单。 最快的方法是从Borg备份服务器上存储的备份中还原。 以下是一些用于还原的示例命令:



   
   
#List which backup sets are in the repo
$ borg list borg @ borgserver: / mnt / backup / repo1
Remote: Authenticated with partial success.
Enter passphrase for key ssh: // borg @ borgserver / mnt / backup / repo1:
x250- 2017 -09- 17                      Sun, 2017 -09- 17 03:09:02
#List contents of a backup set
$ borg list borg @ borgserver: / mnt / backup / repo1::x250- 2017 -09- 17 | less
#Restore one file from the repo
$ borg extract borg @ borgserver: / mnt / backup / repo1::x250- 2017 -09- 17 home / doc / somefile.jpg
#Restore a whole directory
$ borg extract borg @ borgserver: / mnt / backup / repo1::x250- 2017 -09- 17 home / doc

如果本地Borg服务器或保存所有备份存储库的USB驱动器发生故障,我也可以轻松地直接从Wasabi恢复。 如果计算机安装了Rclone,则可以使用rclone mount挂载远程存储桶,就像它是本地文件系统一样:



   
   
#Mount the S3 store and run in the background
$ rclone mount wasabi:repo1 / mnt / repo1 &
#List archive contents
$ borg list / mnt / repo1
#Extract a file
$ borg extract / mnt / repo1::x250- 2017 -09- 17 home / doc / somefile.jpg

运作方式

现在,我已经使用这种备份方法了几周了,可以说我对此非常满意。 当然,设置一切并使其运行比仅安装CrashPlan要复杂得多,但这就是滚动自己的解决方案和使用服务之间的区别。 我将必须仔细观察以确保备份继续运行,并且数据已正确同步到Wasabi。

但是,总的来说,用真正合理的价格提供可比较的备份覆盖率的东西替换CrashPlan确实比我预期的要容易一些。 如果您有改善的空间,请告诉我。

它最初在 Local Conspiracy 上发布,并经许可重新发布。

翻译自: https://opensource.com/article/17/10/backing-your-machines-borg

BorgBackup(简称:Borg)是一个重复数据删除备份程序。 (可选)它支持压缩和经过身份验证的加密。 Borg的主要目标是提供一种有效且安全的备份数据方式。由于仅存储更改,因此使用的重复数据删除技术使Borg适合日常备份。经过身份验证的加密技术使其适合于备份到不完全受信任的目标。请参阅安装手册,或者如果已经下载了Borg,请参阅docs / installation.rst以开始使用Borg。还提供了多种格式的脱机文档。主要功能节省空间的存储基于内容定义的分块的重复数据删除用于减少存储的字节数:每个文件被分为多个可变长度的分块,并且仅将以前从未见过的分块添加到存储库中。如果块的id_hash值相同,则将其视为重复。具有加密强度的哈希或MAC函数用作id_hash, 例如(hmac-)sha256。要进行重复数据删除,请考虑同一存储库中的所有块,无论它们是来自不同的计算机,来自先前的备份,还是来自相同的备份,甚至来自相同的单个文件。与其他重复数据删除方法相比,此方法不依赖于:文件/目录名称保持不变:因此,即使在共享回购协议的机器之间,您也可以在不终止重复数据删除的情况下移动内容。完整的文件或时间戳保持不变:如果大文件发生了一些变化,则仅需要存储几个新块-这对于VM或原始磁盘非常有用。数据块在文件内的绝对位置:重复数据删除算法可能会填充东西并仍然可以找到它们。在C / Cython文件/块索引的本地缓存中实现了速度性能关键代码(块,压缩,加密),可快速检测未修改的文件。数据加密可以使用256位AES加密,数据完整性和真实性来保护所有数据。 已使用HMAC-SHA256验证。数据在客户端加密。压缩可以选择压缩所有数据:lz4(超快速,低压缩)zstd(从高速和低压缩到高压缩和低速的宽范围)zlib(中速和压缩)lzma(低速,高压缩)Off-站点备份Borg可以将数据存储在可通过SSH访问的任何远程主机上。如果将Borg安装在远程主机上,则与使用网络文件系统(sshfs,nfs等)相比,可以获得较大的性能提升。可作为文件系统挂载的备份备份归档文件可作为用户空间文件系统挂载,以方便进行交互式备份检查和还原(例如,使用常规文件管理器)。在多个平台上轻松安装我们提供不需要安装任何内容的单文件二进制文件-您可以在以下平台上运行它们:Linux Mac OS X FreeBSD OpenBSD和NetBSD(尚无xattrs / ACL支持或二进制文件)Cygwin(实验性,否二进制文件)Windows的Linux子系统 10(实验性)免费和开源软件的安全性和功能可以根据BSD(3条款)许可独立审核,请参见许可以获取完整许可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值