使用 rsync 备份群晖到 VPS

虽然家里的群晖做了 RAID 1,但看到有帖子说有人家里火灾导致 NAS 的热备份和硬盘的冷备份全部丢失,再加上最近在家赋闲,又想着折腾一番。

一、为什么要使用 VPS 作为备份目的地

首先,我需要 500GB 以上的存储容量。市面上有很多选择,比如:

  • 大公司做个人和企业云存储的服务,例如 Microsoft OneDrive(1TB $69.99/年)、Google One(2 TB $100/年) 等;
  • 文件同步备份类型,如 Dropbox(2TB $119.88/年) 等;
  • 小公司专业做备份的,如 CrashPlan(无限容量 $120/年) 等;
  • 云计算公司的对象存储,如亚马逊和阿里巴巴对象存储等,此类存储空间、进出流量、请求次数都要收费,仅计算存储空间费用,以阿里巴巴为例,500GB 的存储空间一年就需要 $70.2。

大部分服务对于我来说太贵了,因为他们提供了更多的价值,例如版本控制,或者数不清几个 9 的服务保证。而我不想为这些额外的功能付费。唯一价格不错的,是 Onedrive。但群晖的 CloudSync 对 Onedrive 的支持似乎有问题,目前我尚未解决此问题,似乎与账号有关。若能找到 6 个人合买 Microsoft 365,那价格的优势就很大(特别是,如果你选择中国区的话),显然我也有动力全力解决此问题。(已确认是账号问题,更换账号后能关联账户,但测试了一下速度只有几百 KB/s,所以暂时不考虑。)

我选择的 Alpha VPS,位于保加利亚,1 TB 存储空间,每月 3TB 流量,每年只需要 60 欧元(约 $68)。如果选择更低的容量,则价格会更便宜。虽然 VPS 完全是裸机,没有附加功能(除非你愿意去学习一些软件的配置),但因为有 RAID 1 和移动硬盘的冷备份,对安全性要求没那么高,所以对于单纯的异地备份来说已经够用了。经过一天的测试,上传速度有 1.x MB/S,已经超过我的预期了,毕竟服务器在保加利亚那么遥远的地方。

二、如何在群晖上创建备份文件

为了存取方便,需要将每个图片文件夹分别打包,这样上传和下载都比较方便。但我之前的目录命名中有一些有空格,用脚本处理起来有些困难。所以就有了本文中两段小脚本。

批量移除文件名中的空格:

for loop in ls -1 | tr ' ' '#'
do
mv "echo $loop | sed 's/#/ /g'" "echo $loop |sed 's/#//g'" 2> /dev/null
done

然后再使用 tar 将目录分别打包:

for dir in $(ls | grep -v '@')
do
if [ -d $dir ]&&[ "$dir"x != photobackupx ]
then
tar -cvf $dir.tar $dir/ --exclude @eaDir --exclude .DS_Store --exclude Thumbs.db
fi
done

上面 ls 后 grep -v 是为了去除文件名包含 @ 字符的文件或目录。tar 后跟的 –exclude 也是一样。这些要去除的都是群晖或者 macOS 的一些烦人的玩意儿。当然,如果需要增强安全性,可以使用 zip 或者 p7zip 创建有密码的包,例如:

for dir in $(ls);
do
if [ -d $dir ]
then
zip -r0P password $dir.zip ./$dir/
fi
done

三、如何将备份文件上传到 VPS

因为数据量有数百 GB,所以传输这些文件遇到了一些问题。

  • SCP。 SCP 不支持断点续传,且如果需要批量上传的话,需要再写脚本(今天才知道 SCP 支持目录上传),对于大文件来讲,99% 中断掉的话难以接受。
  • Resilio Sync。Tracker 服务器(如果可以这么称呼的话)已被关注,无法直接链接。且尝试了一下,速度不是很稳定。而且此应用可能被识别为 P2P 程序,服务商不允许。
  • minio。高大上,但过于复杂,我没有学会如何通过命令行或者接口上传,开着网页上传非常不稳定。

今天尝试了一下传说中的 rsync,因为我是首次同步,SSH 到群晖上,只需要一条命令即可:

$ rsync -avuP ./ root@remote_server_ip:~/PhotoBackup

-a 表示已归档方式,-v 显示进度,-u 表示不覆盖已存在的文件,-P 表示支持断点续传。rsync 命令格式与 SCP 基本类似。一般服务器系统都预装了 rsync,没想到群晖系统也内置了 rsync,可见此程序的使用范围非常广泛。这次只是使用了它极为基础的功能,后续也可以设置定时任务来做增量同步功能。

# # #


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注