科技 · 實用指南
cp 顯示「preserving times … Operation not permitted」?先證明中繼資料契約
檔案內容可能已複製,但某項中繼資料更新失敗。先保存實際程式、目標物件與首個被拒屬性,再決定時間戳、擁有權、模式、ACL 或 xattr 是否必須保留。

檔案內容可能已複製,但某項中繼資料更新失敗。先保存實際程式、目標物件與首個被拒屬性,再決定時間戳、擁有權、模式、ACL 或 xattr 是否必須保留。
資料寫入成功不代表時間戳、擁有權、模式、ACL、安全標籤或延伸屬性皆已保留。
1. 固定複製與目標證據
保存完整命令、cp 路徑與版本、有效使用者、來源和目的地、退出碼及第一條未過濾診斷。記錄目標是否已存在及其擁有者。
不要立刻 sudo、覆寫唯一目標或丟棄 stderr;這會隱藏失敗的是時間、擁有者、模式、上下文或 xattr。
2. 分別比較位元組與屬性
對非敏感樣本做雜湊或位元組比較,再以機器可讀方式記錄兩端類型、大小、擁有者、群組、模式、atime 與 mtime,並標明時區和精度。只有用途需要時才檢查 ACL、xattr 與安全標籤。
建立「要求、支援、觀察值」矩陣。內容正確但 mtime 改變可供傳輸,卻可能不適合增量備份、可重現建置或法律封存。
3. 區分權限與儲存能力
確認實際 cp 實作,因 BusyBox 與 GNU 選項不同。解析目的檔案系統和掛載選項,並用呼叫者擁有的拋棄式檔案重測。
若新檔能保留時間而既有目標不能,查擁有權或不可變旗標;若都失敗,再查目標能力、唯讀狀態、ID 映射或安全政策。sudo 成功只是權限線索。
4. 選擇最窄且明示的修正
若時間戳必要且受支援,寫入呼叫者擁有的新物件,或安排經審查的權限。若某屬性無關且不受支援,只省略該屬性並記錄損失。多項中繼資料必須保留時,改用封存或檔案系統原生工具。
不要為一個未解釋診斷做廣泛 chmod/chown、全域安全政策修改或遞迴 sudo。名稱與位元組抵達不等於 FAT 類儲存保留 Unix 擁有權。
5. 依真實用途驗收副本
在代表性樣本上重複真實流程。關閉並重新開啟目標後,核對內容和每項必要屬性;比較要包含時區與時間精度。
只有必要矩陣通過、退出政策能區分允許的屬性損失與新錯誤,且回復清楚時才驗收。若目標無法滿足契約,就更換容器或目的地。
