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

技術答疑 · 實用指南

rsync退出碼24:忽略警告前先核對消失的檔案

退出碼24表示傳輸期間來源檔案消失。先保留路徑及原始狀態、判斷檔案是否重要,再驗證穩定來源上的重跑結果,最後才改變自動化政策。包裝指令碼不能把遺漏檔案變成完整備份。

原創編輯插圖:先保存rsync路徑與狀態、分類遺漏,再驗證重跑及所需資料。
原創概念插圖:先驗證遺漏路徑,之後才決定是否接受退出碼24。 Watch at Ease

rsync退出碼24表示因來源檔案消失而發生部分傳輸;退出碼23則表示其他錯誤造成的部分傳輸,兩者不同。檔案被發現後消失可能是正常的即時變化,但狀態本身不能說明遺漏的是暫時鎖定檔,還是重要資料的唯一副本。

1. 篩除警告前先保存本次執行

保存標準輸出、錯誤輸出、時間、兩端rsync版本、精確來源與目標根目錄、結尾斜線約定、篩選及刪除選項。rsync返回後立刻取得其實際退出狀態;之後的指令或管線可能讓你取得記錄工具的狀態。將消失路徑清單與備份識別資料一起保存。

下一次受控嘗試可用--itemize-changes查看計畫或實際檔案變更,以--log-file=FILE保存傳輸活動,但別假設活動記錄取代完整錯誤輸出。先選一個消失路徑:它被刪除、重新命名、無法存取,或仍能從來源的另一個視圖看到?別用廣泛警告篩選抹掉唯一有用證據。

2. 判斷哪些遺漏可以接受

詢問應用程式或資料負責人這些路徑包含什麼。已知可捨棄的鎖定檔或暫存檔可能不在備份目標內;郵件、文件及重要應用狀態不會因目錄繁忙就能捨棄。只有政策明確允許遺漏,才記錄範圍狹窄、經審核的排除規則。排除所有tmp目錄或鎖定檔副檔名可能掩蓋真正需求。

2023年Back In Time問題記錄展示一次因rsync返回24而取消的真實快照。維護者表示已合併將24記為資訊、其他錯誤仍視為錯誤的修改。這是產品政策,不證明每個使用者的遺漏都無害。若穩定的重要路徑反覆消失,或伴隨掛載與I/O錯誤,先調查來源,別直接修改狀態。

3. 在可以驗證的來源上重跑

重複含刪除選項的指令前,使用相同且經審核的根目錄與篩選規則,加入--dry-run --itemize-changes檢查計畫變更,尤其是刪除。試跑不複製檔案,也不修復之前的遺漏。透過規劃的安靜時段或應用支援的快照流程減少來源變化;對持續變動的應用執行rsync,本身不是一致時間點的備份。

完成獲准的實際重跑後,比較所需內容,記錄每個重要消失路徑的結果。預設快速檢查比較大小及修改時間;--checksum以內容校驗和選擇更新,代價是讀取檔案資料。它不能穩定持續變動的來源,也不同於rsync對已傳輸檔案的正常重建檢查。驗證具代表性的還原內容或應用規定的還原測試,別只看零狀態。

4. 只修改已證實合理的政策

官方FAQ的包裝指令碼只把24映射為0,保留其他狀態。記錄預期遺漏及可接受備份結果後才使用,並在日誌或監控中保留原始24。別以|| true把所有失敗改成成功。重要遺漏若仍無法解釋,即使包裝程式返回零,執行結果對你的目標仍不完整。

兩個名稱相似的選項另有作用:--ignore-missing-args忽略首次查找時不存在的明確來源參數;手冊明說它不忽略先找到、後消失的檔案。--ignore-errors讓--delete在有I/O錯誤時繼續刪除,兩者都不會還原遺漏檔案。完成意味著所需資料存在且可用、遺漏都有說明、其他失敗仍可見,而非只有警告消失。

原創編輯插圖:區分退出碼包裝、初始缺失參數選項與I/O錯誤下繼續刪除。
原創概念插圖:三種政策含義不同,沒有一種能證明備份完整或還原遺漏檔案。 Watch at Ease