使用 tar 通过网络备份整个服务器

使用 tar 通过网络备份整个服务器

我有一台总大小为 80G 的服务器,没有更多空间,所以我无法在服务器上备份。我发现这个命令

ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination

但这没有意义。./path指的是什么?所以我想这样做:

localserver:~$ ssh root@remoteserver "tar czvf / " | tar xzvf /mnt/backup

压缩远程服务器的根目录并在我的备份目录中解压。 /mnt/backup安装在 300G 驱动器上。这可行吗?我可以使用公钥无密码访问远程服务器。

答案1

这是一个好的开始,但也存在一些问题

首先,在源服务器上,您需要指定要将存档发送到 stdout。这可以通过提供-文件名来完成:

tar czf - /

您需要删除该-v参数。打印出文件名和压缩档案会彻底破坏它。

在目标端,您需要使用以下命令指定输出目录-C(或者在开始之前使用 cd 进入该目录,然后可以将其省略):

tar xz -C /mnt/backup

如果您愿意,可以保留-v此处...这会减慢进程,但不会造成任何损害。无需指定-f,因为 tar 会自动从 stdin 检测压缩流。

完整的工作命令如下:

ssh root@removeserver "tar cfz - /" |tar xz -C /mnt/backup

请注意,当您在正在运行的系统上执行此操作时,您会收到一些错误消息,来自 tar 读取时修改的文件、套接字文件等。这不会损害该过程,因为它们会被打印到 stderr,但从救援环境启动服务器对于该过程来说会更干净。

相关内容