科技 · 實用指南
rsync 顯示「Broken pipe (32)」?調整 SSH 前先找出第一個失敗端
傳送端訊息常出現在接收端或遠端 shell 已失敗之後。保留兩端記錄、排序錯誤、修復首個邊界,再驗證續傳結果。

傳送端訊息常出現在接收端或遠端 shell 已失敗之後。保留兩端記錄、排序錯誤、修復首個邊界,再驗證續傳結果。
EPIPE 表示寫入端發現管道或 socket 的讀取端已關閉。 Rsync 區分 socket I/O、檔案 I/O、協定串流與逾時退出。
1. 蒐集同一次失敗的兩端證據
保存完整命令、兩端 rsync --version、本地 stderr、遠端服務或核心記錄、時間戳與每個程序退出碼。移除憑證,但不要破壞錯誤順序。
區分遠端 shell 與 daemon:單冒號通常經 SSH 啟動遠端 rsync;雙冒號或 rsync:// 連 daemon。
2. 依第一個錯誤排序
傳送端 Broken pipe 只表示讀取端已消失,不代表原因。對齊時間後找接收端是否先記錄 ENOSPC、EIO、權限、程序被終止或掛載問題。
退出碼也能分類:10 是 socket I/O、11 是檔案 I/O、12 是協定串流、30 是資料逾時。255 常屬於遠端 shell,須同時保存診斷。
3. 區分儲存、傳輸與協定
儲存分支檢查目標檔案系統、掛載、空閒區塊與 inode、權限、配額及核心 I/O 訊息;傳輸分支獨立測 SSH 與中間設備。
ServerAliveInterval 與 ServerAliveCountMax 可發現 SSH 對端無回應,但不能修磁碟錯誤。--timeout 也只是 I/O 靜默界線。
4. 有意修復並續傳
只修已證明的首個邊界。若保留部分檔案,明確使用 --partial 或 --partial-dir,並維持原來源、目的地與尾斜線語意。
相同版本不能證明相容性問題不存在,壓縮也不是所有斷線根因。每次重試只改一個變數。
5. 驗證完成的目錄
最終執行要退出 0,再對相同來源和目的地做 itemized dry run。逐項解釋剩餘差異,不以傳輸位元組總數代替完整性。
用適合應用的雜湊或檢查驗證代表性大檔與關鍵中繼資料,保存兩端記錄和修正差異。
