几年来,我使用CrashPlan备份了我家庭的计算机,包括属于我妻子和兄弟姐妹的计算机。 CrashPlan本质上是“始终在线”并且无需考虑就可以进行频繁备份的事实真是太棒了。 此外,进行时间点还原的功能在很多情况下都派上了用场。 因为我通常是家庭的IT人员,所以我喜欢用户界面非常易于使用,以致家庭成员无需我的帮助即可恢复其数据。
最近, CrashPlan宣布将放弃其用户订阅,以专注于其企业客户。 我想这是有道理的,因为它并没有像我这样的人赚很多钱,而且我们的家庭计划正在其系统上使用大量存储。
我决定在合适的替代品中需要的功能包括:
- 对Linux和Mac的跨平台支持
- 自动化(因此无需记住单击“备份”)
- 时间点恢复(或接近的恢复),因此,如果您不小心删除了文件但直到稍后才注意到,该文件仍可恢复
- 低成本
- 用于备份集的复制数据存储,因此数据存在多个位置(即,不仅仅备份到本地USB驱动器)
- 加密以防备份文件落入他人之手
我四处搜寻,并向朋友询问有关CrashPlan的服务。 一个人对Arq感到非常满意,但是没有Linux支持意味着对我没有好处。 Carbonite与CrashPlan类似,但价格昂贵,因为我有多台机器要备份。 Backblaze以合理的价格(每月5美元)提供无限的备份,但是其备份客户端不支持Linux。 BackupPC是一个强有力的竞争者,但是我在记住它之前就已经开始测试我的解决方案。 我看过的其他选项都无法满足我的所有需求。 这意味着我必须找出一种方法来复制CrashPlan为我和我的家人提供的东西。
我知道在Linux系统上备份文件有很多不错的选择。 实际上,我已经使用rdiff-backup至少有十年了,通常用于本地保存远程文件系统的快照。 我希望找到一些可以更好地对重复数据进行重复数据删除的方法,因为我知道某些东西(例如音乐库和照片)将存储在多台计算机上。
我认为我所做的工作非常接近实现我的目标。
我的备份解决方案
最终,我使用了BorgBackup , Rclone和Wasabi云存储的组合 ,我对自己的决定感到很高兴。 博格符合我的所有标准,拥有相当健康的用户和贡献者社区 。 它提供了重复数据删除和压缩功能,并在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