我的環境是 Ubuntu 15.04,核心為 3.19.0-28-generic,Btrfs v3.17。
我有兩個相同的外部 USB 硬碟,用於備份腳本。其中一份的格式為btrfs
,另一份的格式為ext4
.來源檔案系統始終是ext4
.該rsync
指令如下圖所示:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
我剛剛意識到執行備份btrfs
需要一個時間極為長時間:略長於 1 小時,相較之下,執行相同的複製操作需要 4 分鐘ext4
。
為了排除磁碟故障,我dd
使用 Ubuntu 附帶的「磁碟實用程式」進行了一些基準測試,但我在兩個磁碟上都獲得了相同的效能。緩慢的部分似乎是與先前的備份進行硬連結。即使在進行碎片整理和清理之後,以下命令在 上也需要大約 53 分鐘btrfs
,但在 上只需要 1 分鐘ext4
:
cp -arl "$previousBackup" "$destDir"
透過在網路上進行研究,我發現了btrfs
硬連結的效能受到影響的暗示,但我沒想到會這樣巨大的不同之處。我發現這個命令更快,但仍然需要 30 分鐘以上才能完成:
cp -ar --reflink "$previousBackup" "$destDir"
有誰有這種行為的經驗並且可以確認嗎?是否有任何簡單的方法來糾正它(例如不同的安裝選項),或者我應該嘗試刪除盡可能多的硬連結並只使用引用連結?
編輯
我剛剛發現即使刪除一個目錄btrfs
需要一個多小時。相同的操作在「雙胞胎」ext4
磁碟上是即時的。這裡的元數據顯然有問題。
答案1
你說你正在複製硬鏈接rsync
命令,但是標誌在哪裡-H
?我在你的命令中沒有看到它:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
我理解硬鏈接如何工作的方式rsync
是,如果沒有該-H
標誌,則複製實際數據而不是硬鏈接,如rsync
手冊頁:
-H, --硬鏈接
這告訴 rsync 在傳輸中查找硬連結文件,並將接收端的相應文件連結在一起。如果沒有此選項,傳輸中的硬連結檔案將被視為單獨的檔案。
我可以想像這樣一個過程,其中許多類似的文件被一遍又一遍地複製而不是硬鏈接,這會增加傳輸時間。
另外,也可以考慮使用-z
( --compress
) 標誌:
-z, --壓縮
使用此選項,rsync 在將檔案資料傳送到目標電腦時對其進行壓縮,從而減少傳輸的資料量——這在慢速連接中很有用。
是的,這是同一系統上的 USB 到 USB 傳輸,因此速度可能已經優化,但看到它-z
也許會幫助您克服自然的 USB 資料傳輸瓶頸也沒什麼壞處。
一個很好、簡單的教程,解釋了這些標誌以及其他標誌可以在這裡找到。