使用 restic 和 sshfs 备份远程服务器上的数据
数据的重要性不必多言,防止数据丢失的最保险措施就是对数据进行定期备份,最好能够将备份再存储同步到多个存储设备上。 restic
就是一个简单和快速的数据备份工具,它可以很方便地在本地或者远程服务器上进行数据备份,并且支持对备份数据进行定期的全量备份和增量备份。而 sshfs
可以通过 SSH 将远程服务器上的文件系统挂载到本地目录,当然,这个本机是类 Linux 系统,也就是 Linux、MacOS、BSD 等。组合这两个工具,就可以很容易地将 Linux 服务器上的数据,备份到本机了。
目标 🔗
必达目标 🔗
- 通过 SSH 协议连接服务器,将服务器上的指定目录里的数据备份到本机。
- 在多次备份时,能够自动地对数据进行去重。“同样”的数据不应该被备份多次。这里的“同样”至少意味着是文件路径相同。
可选目标 🔗
- 在多次备份时,能够对备份数据进行版本化,以便回退。
- 在多次备份时,如果远程服务器删除了文件,那么不要从本机删除。
- “同样”的数据指的是文件的内容相同,与文件的存储路径和文件名无关。
基本思路 🔗
在本机上运行程序,通过 SSH 连接到服务器,将数据下载到本机。由于远程服务器配置较低,不应该在远程服务器运行过重的任务。
工具 🔗
restic 简介 🔗
restic 在其官方网站(https://restic.net)介绍自己是一个现代的备份程序,可将数据从 Linux、BSD、Mac 和 Windows 备份到自托管和在线服务等存储类型中,简单、高校、安全、可验证,并且可免费使用,是一款开源软件。
用技术语言来介绍:
- 它是一个 Go 语言编写的程序,最终被编译成一个可执行文件,没有其他依赖库,下载后即可在命令行中使用。
- 可以把 restic 当作一个管理文件的 Git。
- 它将文件保存至加密的的仓库中,并且在存储数据会自动地压缩,并根据文件内容压缩。也就是说,如果文件名称被改名,或者仓库中有两个同样的文件,那么 restic 只会存储一份。
- resitc 可将本地的文件备份到本地目录、SFTP 服务器,以及 AWS S3、Azure Blob Storage、Google Cloud Storage等云存储服务中。
具体的使用文件见官方文档 。
sshfs 简介 🔗
SSHFS(SSH Filesystem)是一种通过普通 ssh 连接来挂载和与远程服务器的目录和文件交互的文件系统客户端。通常情况下,服务器已经开启SSH访问,那么不需要任何额外的配置工作,也不需要在防火墙中打开额外的传入端口,就可以在本机挂载远程服务器上的目录。
sshfs 是基于fuse模块来实现的,可以认为sshfs所挂载的文件系统是fuse文件系统的一种实现。fuse文件系统的全称为filesystem in userspace,即“用户空间的文件系统”。如果是临时使用,可直接在命令行使用 sshfs
命令。如果当前用户对挂载点有权限,甚至不需要 root 用户,就可以进行挂载。而如果向永久挂载,那可使用 /etc/fstab
文件来配置。
在 Debian 和 Ubuntu 系统上,可使用 apt
安装:
apt install -y sshfs
在创建好挂载点之后,挂载命令为:
sshfs sshfs username@x.x.x.x:/path_to_data_folder path_to_local_folder
卸载命令为:
mount path_to_local_folder
实现 🔗
restic 可将本机数据备份到本机或者远程服务(SFTP、云存储等),但我的思路是将远程服务器上的数据备份到本机。因此,无法直接使用 restic。为此,可使用 sshfs 将远程目录挂载到本机,然后将本机数据进行备份即可。
步骤 🔗
假定远程服务器上的数据目录为 /data/files
,期望将数据挂载到当前目录下的 media/data/files
目录,最终将数据备份到 repo/files
目录中。那么备份的步骤如下:
- 创建挂载点:
mkdir -p media/data/files
- 挂载远程目录:
sshfs root@x.x.x.x:/data/files media/data/files
- 初始化备份仓库,此时需要数据密码:
mkdir -p repo
restic -r files init
- 备份数据到仓库,此时也需要数据密码:
restic -r repo/files --verbose backup media/data/files
- 备份完成后,卸载分区:
umount media/data/files
restic 备份的数据是加密的,无法直接访问,因此需要从仓库中恢复到其他目录,才可直接访问。恢复数据的子命令是 restore
,可恢复最新的快照,也可以恢复到指定的版本,甚至可制定要恢复的文件路径,更多的操作选项和说明见文档 《Restoring from backup》。
其他 🔗
在备份时,restic 保存了每次备份时候的数据快照,也就是对备份进行了版本控制。restic 是不会主动删除旧的快照的。如有必要,可使用 forget
和 prune
子命令进行删除,具体见文档 《Removing backup snapshots》。