Cp
為什麼“cp -R –reflink=always”在 btrfs 文件系統上執行標準副本?
Btrfs 支持寫時複製。我嘗試使用該功能複製一個目錄:
cp -R --reflink=always foo_directory foo_directory.mirror
我希望該命令幾乎立即完成(如 a
btrfs subvolume snapshot
),但該cp
命令似乎執行緩慢的標準副本。根據手冊頁,我希望
--reflink=always
強制執行 Copy-On-Write:當 –reflink
$$ =always $$ 指定時,執行輕量級複製,其中數據塊僅在修改時才被複製。如果這不可能,則複製失敗,或者如果指定了 –reflink=auto,則回退到標準副本。
問題:
- 你知道為什麼
--reflink=always
不起作用嗎?- 我應該使用哪些選項(或其他命令)?
cp --reflink=always
幾乎可以肯定工作正常。如果不是,您將收到錯誤消息。--reflink=always
按照設計,這就是和之間的區別--reflink=auto
。錯誤如下所示:# Filesystem that does not support the feature at all cp: failed to clone `xx' from `yy': Inappropriate ioctl for device # Filesystem that does support it, but copy across filesystems cp: failed to clone `xx' from `yy': Invalid cross-device link
您是否正在複製包含大量小文件的目錄結構?在這種情況下,
cp
仍然需要創建每個目錄並打開和關閉每個文件,所以它仍然需要時間,不像btrfs subvolume snapshot
. 這很可能解釋了執行操作所需的時間。