
當我使用 reflink 選項複製檔案時,例如,
cp --reflink foo bar
cp 執行過程中的哪個階段以及如何確定底層檔案系統是否支援 COW。我嘗試查看,coreutils/src/cp.c
但找不到特定的系統呼叫/ ioctl 或任何其他確定 COW 功能的方法,並相應地進行 cp 執行/報告錯誤:
cp:無法從「foo」克隆「bar」:位址錯誤
簡而言之,我正在尋找選擇權的解決--reflink=auto
方案是如何發生的。
答案1
這程式碼呼叫一個名為的函數clone_file
如果 reflink 選項設定為“always”或“auto”,如果 reflink 為“always”,則回退到複製(如果 reflink 關閉,則直接進入複製)。clone_file
稱為BTRFS_IOC_CLONE
讀寫控制。所以沒有測試系統是否支援寫時複製,只是嘗試BTRFS方法。