我希望能够备份和恢复远程帐户的主目录。
我使用的命令是:
备份
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
不直接,不。您能做的最好的事情就是恢复并验证到临时目录,然后重命名。重命名会将文件自动移动到正确的位置。