是否存在可以智能處理冗餘塊以節省磁碟空間和即時複製的文件系統?
如果我想要複製一個非常大的連續文件(千兆字節),我的磁碟必須分配所有必要的空間並寫入每個塊的副本。
為什麼從某種意義上說,副本不能“快速”,而是複制對塊的引用並僅在進行更改時才寫入新塊?
我知道這將導致磁碟上的數據量(由於塊引用)與磁碟似乎包含超過其實際容量的數據的可能性脫鉤。這也可能導致寫入佔用大量空間,因為當它們從源塊更改時必須寫入全新的塊。
這樣的文件系統肯定會有獨特的懲罰,但這聽起來像是一個有趣的案例。
當今是否存在任何利用類似方式處理數據的文件系統?
請注意,我不是文件系統方面的專家,所以我的一些假設可能是令人尷尬的錯誤。我歡迎評論中的任何更正。
你指的是一個
reflink
. 根據Linuxcp
手冊頁:指定時
--reflink[=always]
,執行輕量級複製,其中數據塊僅在修改時才被複製。如果這不可能,則複製失敗,或者如果--reflink=auto
已指定,則回退到標準副本。用於--reflink=never
確保執行標準副本。在 Linux 上,這是通過呼叫實現的
FICLONE
ioctl()
:如果一個文件系統支持文件在多個文件之間共享物理儲存(“reflink”),這個
ioctl(2)
操作可以通過共享底層儲存,使文件中的部分數據src_fd
出現在dest_fd
文件中,這比製作單獨的物理副本要快的數據。這兩個文件必須駐留在同一個文件系統中。如果文件寫入發生在共享區域,文件系統必須確保更改對正在寫入的文件保持私有。這種行為通常被稱為“寫時複製”。BTRFS 和Linux 核心 4.8 中的 XFS支持 Reflink :
2016 年 8 月的 Linux 核心 4.8 增加了一個新特性,“反向映射”。這是大量計劃功能的基礎:快照、寫入時複製 (COW) 數據、重複數據刪除、reflink 副本、線上數據和元數據清理、數據失去或壞扇區的高度準確報告以及顯著改進的重建損壞或損壞的文件系統。這項工作需要更改 XFS 的磁碟格式。
cp -z ...
並且該reflink()
功能在 Solaris 11.4 for ZFS 上可用。ZFS reflink 支持可能會在某個時候在 OpenZFS 和 ZFSonLinux 中可用。見https://github.com/zfsonlinux/zfs/issues/405