如何在远程服务器上自动恢复数据?

如何在远程服务器上自动恢复数据?

我希望能够备份和恢复远程帐户的主目录。

我使用的命令是:

备份

ssh [email protected] "tar jcf - ." > backup.tar.bz2

恢复

cat backup.tar.bz2 | ssh [email protected] "tar jxf - ."

我想确保所有文件都已恢复或没有恢复,即使服务器在恢复过程中重新启动也是如此。

有什么办法可以实现我想要的吗?我想保留上面显示的命令作为基础,但其他想法也值得赞赏。

答案1

为了获得真正的原子性,您需要使用文件系统级功能,例如Btrfs 快照

答案2

恢复完成后,您可以使用一些标记文件。当恢复不完整并且标记文件丢失时,您知道必须删除不完整的恢复。

答案3

我建议您使用rsync而不是手动备份文件。有了这个工具,您可以通过一些额外的功能来完成您正在做的事情。例如,您可以传递参数--progress来了解最后复制的文件。

另一个功能是您只能复制新文件或修改过的文件,这将减少通过网络传输的数据量。如果您设置该--delete参数,它将删除您在文件夹中删除的文件来源文件夹。最后,-z参数可以实现压缩。

该命令具有以下结构:

$ rsync options source destination

例子

rsync --progress -azv -e ssh --delete /home/guandalino/ \
                [email protected]:/home/guandalino/backup/guandalino/

在哪里

  • --progress显示rsync执行的详细进度
  • -z启用压缩
  • -v意味着冗长
  • -a表示递归。此外,它还保留权限、所有者、组等。
  • --delete 删除源目录中不存在的文件。

看看这个例子

计划备份

这部分是额外的。这就是我使用它自动将主文件夹备份到服务器的方法。我将上面的示例放入 shell 脚本文件中,并启用cron每天上午 00:00 运行它。

00  00 *   *   *     /home/guandalino/backup_home_folder.sh 2>&1 >> /var/log/backup_home_folder.log

我将脚本的输出重定向到一个文件,以便保留传输日志。ssh-keygen -t rsa如果您还没有公钥,则必须生成公钥,这样您的客户端就可以连接到服务器而无需输入密码。

答案4

不直接,不。您能做的最好的事情就是恢复并验证到临时目录,然后重命名。重命名会将文件自动移动到正确的位置。

相关内容