如何將文件從一個 zfs 文件系統移動到同一池中的不同 zfs 文件系統?
我在同一個 zfs 池中有兩個文件系統,
/mnt/fs_a
並且/mnt/fs_b
. 我想將大約 1TB 的數據fs_a
從fs_b
. 但是當我:mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/
令我驚訝的是,它開始逐塊複製文件。考慮到移動一個 2GB 文件所花費的時間,看起來這個操作需要幾天的大規模顛簸才能完成。
必須有一種更智能、更快捷的方法來做到這一點,對吧?
(這開始是一個評論,但變得太長,所以現在是一個答案)
不幸的是,答案是“不”。沒有更快或更智能的方法來做到這一點。
ZFS 文件系統(即使它們在同一個池中)是獨立的文件系統。任何
mv
其他工具都不能移動塊指針或其他任何東西,以便fs_a
現在打開的文件fs_b
。(順便說一句,同一磁碟或 RAID 陣列上的多個格式化分區或 LVM 卷也是單獨的文件系統,並且也可以
mv
為它們進行複制和刪除)多年來,這個問題已經出現了好幾次(有人談論創建一個工具來做你想做的事),據我所知,將它放在太難的籃子裡的主要困難是如何處理快照的問題- 如果有 的快照
fs_a
,則塊將同時位於兩個文件系統中。具有硬連結的文件也是如此。我自己也遇到過很多次(例如,當你在數據集之間移動文件時,或者當我需要將子目錄轉換為 fs 時),並且剛剛學會忍受不便。它可以是一個主要的 PITA。
if
fs_b
為空或尚不存在,並且您想將 to 的全部內容移動fs_a
到fs_b
(而不僅僅是某些甚至大多數文件和目錄),您可以使用它zfs rename
來重命名fs_a
為fs_b
. 不過,我懷疑這與您的情況無關。在https://github.com/zfsonlinux/zfs/issues/2991上有一個關於 ZFSOnLinux 的未解決問題
我沒有搜尋過,但我希望上游OpenZFS 甚至 Sun/Oracle ZFS 可能有類似的錯誤報告/功能請求。
順便說一句,另請參閱https://serverfault.com/questions/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume