Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

rsync 以代碼 23 結束?改權限前先找出失敗物件

代碼 23 只表示至少一次傳輸錯誤,不是權限診斷。把先前錯誤對應到物件、程序側、操作與帳號,再證明預期集合已送達。

原創示意圖:區分 rsync 代碼 23 背後的 sender、傳輸與 receiver/generator 操作。
原創示意圖:修復前先分類先前操作。 Watch at Ease

最後的代碼 23 行只是摘要。修改權限、排除或 rsync 選項前,先保存完整輸出並找出第一個具體失敗。

為失敗物件、sender 或 receiver/generator、檔案系統操作、errno 與有效帳號建立紀錄。只修正該邊界,再重跑真實命令並核對預期集合。

保存精確執行與完整記錄

記錄兩端、完整命令、rsync 版本、遠端使用者、工作目錄與退出狀態。從開頭保存 stdout 與 stderr,或使用客戶端 log;最後的代碼 23 只是摘要。

不要先做 sudo、chmod -R 777、寬泛排除或忽略規則;它們會在物件未明時改變身分或範圍。

分類第一個具體失敗

為每個先前錯誤記下精確路徑、sender/receiver/generator、open/stat/mkdir/write/rename/中繼資料等操作,以及 errno 文字。

遠端認證、協定錯誤與代碼 24 要分開。權限失敗與 failed verification 需要不同測試。

以同一帳號重現物件

來源端證明父目錄可穿越、物件可查找、連結目標與讀取有效;目的端以暫時名稱證明穿越、建立、寫入、關閉、改名與必要中繼資料。

使用 rsync 的同一帳號、掛載、容器或服務環境。只依已記錄操作檢查空間、inode、quota、唯讀掛載、ACL 與身分映射。

只修正已證明的邊界

修正可重現失敗的最小 owner、ACL、掛載、容量、遺失路徑或選項不符。只有省略是明確意圖時才排除,並更新傳輸契約。

若受控重現顯示版本特定校驗錯誤,只比較受支援修正版或有限選項;不要泛化成權限修補。

證明預期集合已送達

修正後執行相同意圖的真實傳輸並要求代碼 0,再用 dry-run 與 itemized changes 找出意外剩餘工作;只在需要更強內容證明時使用 checksum。

dry-run 不傳資料,也可能不觸發相同系統呼叫錯誤,不能替代真實執行。真實成功且清單無不明遺漏才算完成。

原創表格:記錄物件、程序側、操作、errno、同帳號測試與關閉結果。
原創示意圖:驗證預期交付集合。 Watch at Ease