Cp

為什麼“cp -R –reflink=always”在 btrfs 文件系統上執行標準副本?

  • July 30, 2015

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. 這很可能解釋了執行操作所需的時間。

引用自:https://unix.stackexchange.com/questions/219280