帶有 reflink 標誌的 cp:如何確定 reflink 是否可能?

帶有 reflink 標誌的 cp:如何確定 reflink 是否可能?

當我使用 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方法。

相關內容