所以,正如我所说,我有一个 VPS、Raspberry Pi 和一个计划,但我需要一些建议,所以就这样了。
我有一个带有 prgmr.com 的 VPS,它运行良好,运行顺畅,没有任何问题。我的办公桌上还有一台新的 RaspberryPi,在我打字时,Raspberrian 正在下载。我的计划是将 Raspberry Pi 用作家中的备份服务器,所以我的问题是:
如何通过 SSH 备份远程 Ubuntu VPS?
VPS 设置为 Web 服务器,但我想在 Pi 上设置一个 cron 作业,以便它可以自动登录 VPS 并运行,然后下载备份,以防万一我设法弄坏它或发生其他事情导致我丢失数据。当然,我希望这个备份包含所有内容,这样如果出现问题,我可以快速恢复整个服务器,所有配置都像现在一样。
您将如何运行此类备份?我认为我必须编写某种 bash 脚本以通过 SSH 连接,将所有相关文件压缩为 tar.gz 或类似文件,然后通过 SCP 下载图像。
您对此有何看法?您会使用哪些软件包等,以及如何配置它?VPS 上有一个 LAMP 堆栈,那么您打算备份哪些文件?它还安装了许多其他较小的程序,例如 GIT 和 ZendTools。
答案1
SSH 公钥认证
您要做的第一件事是从 ssh 公钥身份验证开始。这将使您的脚本无需密码即可使用 SSH。
服务器所需要的只是安装 SSH,并为将从 RasPi 运行备份脚本的用户设置公钥认证。
这是一个很好的公钥认证教程:https://hkn.eecs.berkeley.edu/~dhsu/ssh_public_key_howto.html
选项 1:SSH 和 Tar
您可以从服务器压缩 tar.gz 并通过 ssh 直接传输,如下所示:
ssh [email protected] "tar -czvf - / 2> /var/log/sshbackup" > vpsbackup.tar.gz
这将使 VPS tar 和 gzip 压缩 / 上的所有文件,并通过 SSH 传输到 RasPi 上的 vpsbackup.tar.gz 中。最新备份的日志将保存在 VPS 上的 /var/log/sshbackup 中。
选项 2:Rsync
通过 SSH 发送整个 .tar.gz 效率低下... 不会改变的文件仍将被传输。更好的解决方案是使用 rsync,但这会使制作保留权限的 .tar.gz 变得困难。如果 RasPi 上有足够的存储空间,您可以将备份文件存储为普通文件。然后,如果您想保留多个过去的备份,您可以使用脚本 tar.gz 来压缩它们。
服务器需要安装 rsync。这将通过 SSH 运行,因此您仍使用公钥身份验证并保留加密。您需要运行此命令以 root 身份并启用公钥身份验证和 root 的 SSH 登录以保留权限。您的目标(或至少是临时目标)应该是 Linux 文件系统。如果您将这些备份存储在 FAT 或 NTFS 分区上(例如在大多数外部硬盘上),则可以创建回送文件系统(请参阅http://www.walkernews.net/2007/07/01/create-linux-loopback-file-system-on-disk-file/) 用于临时存储。tar.gz 文件可以存储在任何分区上,因为它自己保留了权限。
rsync 命令示例:
rsync -a --delete --exclude=/dev --exclude=/sys --exclude=/proc --exclude=/tmp remoteserver.example.com:/ /path/to/backup/destination/
使用 --delete 时要小心,尤其是以 root 身份使用!它将删除目标目录中备份源上不存在的任何文件。仅当同步到仅用于该 VPS 的专用备份目录时才应使用 --delete。您还应该确保您的脚本不可能同步到错误的目的地(例如,如果 /path/to/backup/destination 由 shell 变量决定)
rsync 只会传输源和目标之间不同的文件。如果您有大文件,它还会只传输已更改的文件部分(要使此功能有效,您必须添加 -c 标志)。这意味着您使用的带宽最少,但它会使用更多 CPU 并减慢重新同步准备时间,因为双方都需要先对文件进行校验以确定要传输哪些块。如果您确实使用了 -c 标志,并且您有大文件(例如数据库文件)和/或不稳定的连接,请考虑添加 --partial --append,这使您可以在连接中断后恢复传输。