使用 restic 和 sshfs 备份远程服务器上的数据

2024-12-18#restic#数据备份#sshfs

数据的重要性不必多言,防止数据丢失的最保险措施就是对数据进行定期备份,最好能够将备份再存储同步到多个存储设备上。 restic 就是一个简单和快速的数据备份工具,它可以很方便地在本地或者远程服务器上进行数据备份,并且支持对备份数据进行定期的全量备份和增量备份。而 sshfs 可以通过 SSH 将远程服务器上的文件系统挂载到本地目录,当然,这个本机是类 Linux 系统,也就是 Linux、MacOS、BSD 等。组合这两个工具,就可以很容易地将 Linux 服务器上的数据,备份到本机了。

目标 🔗

必达目标 🔗

  1. 通过 SSH 协议连接服务器,将服务器上的指定目录里的数据备份到本机。
  2. 在多次备份时,能够自动地对数据进行去重。“同样”的数据不应该被备份多次。这里的“同样”至少意味着是文件路径相同。

可选目标 🔗

  1. 在多次备份时,能够对备份数据进行版本化,以便回退。
  2. 在多次备份时,如果远程服务器删除了文件,那么不要从本机删除。
  3. “同样”的数据指的是文件的内容相同,与文件的存储路径和文件名无关。

基本思路 🔗

在本机上运行程序,通过 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 目录中。那么备份的步骤如下:

  1. 创建挂载点:
mkdir -p media/data/files
  1. 挂载远程目录:
sshfs root@x.x.x.x:/data/files media/data/files
  1. 初始化备份仓库,此时需要数据密码:
mkdir -p repo
restic -r files init
  1. 备份数据到仓库,此时也需要数据密码:
    restic -r repo/files --verbose backup media/data/files
    
  2. 备份完成后,卸载分区:
    umount media/data/files
    

restic 备份的数据是加密的,无法直接访问,因此需要从仓库中恢复到其他目录,才可直接访问。恢复数据的子命令是 restore ,可恢复最新的快照,也可以恢复到指定的版本,甚至可制定要恢复的文件路径,更多的操作选项和说明见文档 《Restoring from backup》

其他 🔗

在备份时,restic 保存了每次备份时候的数据快照,也就是对备份进行了版本控制。restic 是不会主动删除旧的快照的。如有必要,可使用 forgetprune 子命令进行删除,具体见文档 《Removing backup snapshots》

参考资料 🔗

  1. How To Use SSHFS to Mount Remote File Systems Over SSH

加载中...