我有一台总大小为 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,但从救援环境启动服务器对于该过程来说会更干净。