假設我們有一個自定義備份服務,它遵循rsync approach suggested by Mike Rubel。爲了使備份輪換,這cp
命令必須使用:cp命令中的標誌開銷
cp -al source target
到這一點,我試圖轉動裏面有很多小文件(〜5KB-200KB),一個35GB的目錄,即非常大樹目錄。問題是它至少持續五個小時。這對我來說似乎很重要,特別是通過使用-l
選項。
用SATA磁盤行爲正常嗎?可能-al
組合標誌在cp命令中引起額外開銷,導致延遲?
謝謝!
假設我們有一個自定義備份服務,它遵循rsync approach suggested by Mike Rubel。爲了使備份輪換,這cp
命令必須使用:cp命令中的標誌開銷
cp -al source target
到這一點,我試圖轉動裏面有很多小文件(〜5KB-200KB),一個35GB的目錄,即非常大樹目錄。問題是它至少持續五個小時。這對我來說似乎很重要,特別是通過使用-l
選項。
用SATA磁盤行爲正常嗎?可能-al
組合標誌在cp命令中引起額外開銷,導致延遲?
謝謝!
如果這些文件大小都在2GB左右,我會認爲這是非常慢的。如果文件大小都在200字節左右,我會認爲這很快。那麼,在我認爲這個速度很快之前,我實際上並不知道這些文件有多小,但是如果它們都很小,那麼你的驅動器將花費大部分時間來搜索,讀取元數據,編寫元數據,犯下期刊,等等。
但這聽起來令人沮喪,無論哪種方式。
一些想法瞬間映入腦海:
你可以關閉a_time
的運行時間有問題的具體文件系統,如果你沒有任何東西使用a_time
。 (將noatime
mount(8)
選項添加到您的fstab(5)
文件中。)這樣可以防止在複製操作的「讀取」一側出現大量非常小的分散寫入。這可能會讓一小部分時間消失。 5%? 10%?也許更多?好的一面是需要幾秒鐘才能使用mount(8)
-oremount,noatime
然後找出答案。 :)
您可以使用硬鏈接代替副本
。 (cp(1)
提到一個-l
命令行選項使用鏈接 - 我必須怯懦地承認我從來沒有嘗試過,我一直與ln(1)
建立鏈接,但是對於數十萬個文件這樣做聽起來並不理想,所以請嘗試-l
至cp(1)
並返回報告:)使用硬鏈接的好處是(a)節省的磁盤空間(b)節省的磁盤帶寬 - 只讀取/寫入元數據,速度可能快數千倍。它可能不是你想要的工具,但這取決於應用程序在備份操作運行時如何修改數據。
你可以想象一些更聰明的替代整個事情。 rsync
是一個很好的工具,但不是非凡的輝煌。 git(1)
可能是您的任務更聰明的工具。如果不先製作副本,這可能會快得多。
您可以使用一些巧妙的塊設備技巧:例如,LVM快照,允許備份操作與使用並行進行,並在備份完成後刪除快照。如果您的數據沒有太多流失,這應該會更快。如果有很多流失,它可能只會稍微好一點。但它會讓你的rsync立即開始,而不是在五小時窗口的另一邊。
我忘了包括它。我實際上也使用'-l'選項。這就是爲什麼這種行爲讓我感到驚訝。我正在編輯這個問題來改進它 – elitalon 2011-02-23 08:52:01