我想将我的本地文件与服务器上的备份进行 rsync,该服务器仅允许通过网关从我当前所在位置进行访问。因此,我想出了以下方法
rsync -avz -r --stats --progress -e "ssh gateway.dot.com ssh server.dot.com:/home/myname/documents/" /home/myname/documents
并且在列出所有文件时进行了一些通信,但最后的摘要显示实际上根本没有文件传输。
Number of files: 270889
Number of files transferred: 0
Total file size: 70343212868 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 7596005
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 7613770
Total bytes received: 17764
sent 7613770 bytes received 17764 bytes 50707.87 bytes/sec
total size is 70343212868 speedup is 9217.44
有想法吗?
答案1
rsync
命令不应该是吗rsync ... -e "ssh the.gateway ssh" /local/dir/ the.remote.server:/remote/dir/
?讯息speedup is 9217.44
表明传输已进行9217
多次优化,也就是说,两个主机之间的文件几乎(如果尚未)同步。
更新:
#2 不正确。请参阅crayzeewulf 的回答以获得更多解释。加速值误导了我,使我误以为它有效。
答案2
我认为项目#1clarkw 的回答是正确的。如果使用...-e "ssh gateway.dot.com ssh server.dot.com:/home/myname/documents/"
,则相应的 rsync 命令有源目录,但没有目标目录。在这种情况下,根据 rsync 手册:
Usages with just one SRC arg and no DEST arg will list the source
files instead of copying.
这正是正在发生的事情。您可以通过提供垃圾作为参数来检查这一点-e
。例如:
rsync -avz --stats -e 'suq maballs' /tmp
此命令将正常工作。它将列出下面的所有内容/tmp
并在最后显示良好的统计数据:
Number of files: 28
Number of files transferred: 0
Total file size: 182 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 955
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 998
Total bytes received: 26
sent 998 bytes received 26 bytes 2048.00 bytes/sec
total size is 182 speedup is 0.18
请注意,这里没有传输任何文件,就像您的示例一样。您需要修改原始命令:
rsync -avz -r --stats --progress \
-e "ssh gateway.dot.com ssh server.dot.com:/home/myname/documents/" \
/home/myname/documents
到:
rsync -avz -r --stats --progress \
-e "ssh gateway.dot.com ssh" \
server.dot.com:/home/myname/documents/ \
/home/myname/documents
当然,用适当的主机名替换gateway.dot.com
和。server.dot.com