Ssh
如何使用 rsync 修復(相對)大文件的損壞數據包錯誤?
嘗試使用以下
rsync
命令更新伺服器上的文件:rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir
corrupt packet
錯誤不斷被拋出,特別是:rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Broken pipe (32) rsync: connection unexpectedly closed (11337 bytes received so far) [sender] rsync error: unexplained error (code 255) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [sender=3.0.9]
這可能與
ssh
超時有關,因為它似乎發生在大型(r)文件中。另外,我一直在使用 WinSCP 超時。這僅發生在我身上;與我一起工作的幾個使用此伺服器的人沒有同樣的問題。從 Windows 7 中的 Cygwin 終端使用
rsync
Centos 6.3 伺服器。我不確定還有哪些其他資訊可能有用或如何獲取。我將根據任何建議更新問題或添加評論。
我應該如何解決這個問題?
非常感謝!
我不確定是什麼可能導致
corrupt packet
連接斷開的問題,但您可能會發現 rsync--partial
或--partial-dir
選項在傳輸大文件時很有幫助,這樣當您重新啟動傳輸時,它將從傳輸中斷的地方繼續,而不必重新開始傳輸再次整個文件:–partial-dir=.rsync-partial
因此,您可以像這樣修改原始命令:
rsync -rav --progress --partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir
或者
rsync -rav --progress --partial-dir=.rsync-partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir
請注意,對於此範例,我刪除了
-q
(--quiet
) 選項,並--progress
在第一個範例和--partial-dir=.rsync-partial
第二個範例中添加了該選項。
--partial
和之間的區別在於,--partial-dir=.rsync-partial
如果在接收(伺服器)端對您很重要,則後者會創建一個目錄,將部分文件與完全傳輸的文件分開。rsync 手冊頁將更詳細地解釋這一點,儘管我也會從手冊頁中指出一個重要的安全說明:
重要提示:–partial-dir 不應被其他使用者寫入,否則存在安全風險。例如,避免使用“/tmp”。