複製大文件(~20 GB)是否有比 cp 更快的替代方法?
我是一名研究生,我所在的團隊維護著一個 Linux 集群。集群的每個節點都有自己的本地磁碟,但是這些本地磁碟比較小,沒有配備自動備份功能。因此,該組擁有一個具有許多 TB 儲存空間的文件伺服器。我是一個相對的 Linux 新手,所以我不確定文件伺服器在速度、網路能力等方面的規格是什麼。我從經驗中知道本地磁碟在 I/O 方面比文件伺服器快得多. 大約有十幾個人使用文件伺服器。
cp
用於從文件伺服器複製約 20 GB 的文件到本地磁碟之一平均需要大約 11.5 分鐘的實時時間(根據)time
。我知道這個cp
操作效率不高,因為 (1)time
告訴我這樣一個副本的系統時間只有 ~45 秒;並且因為(2)當我top
在複製期間檢查時,%CPU非常低(通過檢查,平均大約為0-10%)。用於將
cp
相同的 ~20 GB 文件從本地磁碟上的一個文件夾複製到同一個本地磁碟上的另一個文件夾需要更少的時間 - 大約 9 分鐘的實時時間(根據 51 秒的系統時間time
)。因此,正如預期的那樣,文件伺服器顯然比本地磁碟慢一些,但可能不會慢很多。我很驚訝從本地複製到同一本地的速度不超過 9 分鐘。我需要將 ~200 個大文件(每個 ~20 GB)從文件伺服器複製到本地磁碟之一。所以,我的問題是:在 Linux 中複製大文件****是否有更快的替代方法?
cp
(或者我可以使用其中的任何標誌cp
來加快複製速度?)即使我可以以某種方式將複製時間縮短一分鐘,這也會有很大幫助。我確信購買新的、更快的硬體磁碟,但我無法訪問這些資源。我也不是系統管理員——我只是一個(新手)使用者——所以我無權訪問有關磁碟負載的更詳細資訊。我確實知道,雖然每天大約有十幾個人使用文件伺服器,但我是唯一使用這個特定節點/本地磁碟的人。
複製期間%CPU應該很低。CPU 告訴磁碟控制器“從扇區 X-Y 抓取數據到 Z 處的記憶體緩衝區”。然後它去做別的事情(或者睡覺,如果沒有別的事情的話)。當數據在記憶體中時,硬體會觸發中斷。然後 CPU 必須複製幾次,並告訴網卡“在記憶體位置 A、B 和 C 發送數據包”。然後它又回到做其他事情。
您正在推動〜240mbps。在千兆 LAN 上,您應該能夠做到至少 800mbps,但是:
- 這在使用文件伺服器的每個人之間共享(可能還有交換機之間的連接等)
- 這受到文件伺服器可以處理寫入的速度的限制,請記住它的磁碟 I/O 頻寬由使用它的每個人共享。
- 您沒有指定如何訪問文件伺服器(NFS、CIFS (Samba)、AFS 等)。您可能需要調整您的網路掛載,但在最近的任何事情上,預設值通常都非常合理。
對於追踪瓶頸,
iostat -kx 10
這將是一個有用的命令。它會向您顯示本地硬碟的使用率。如果你可以在文件伺服器上執行它,它會告訴你文件伺服器有多忙。一般的解決方案將是加速這個瓶頸,當然你沒有預算。但是,在一些特殊情況下,您可以找到更快的方法:
- 如果文件是可壓縮的,並且你有一個快速的 CPU,那麼在執行中進行最小的壓縮可能會更快。類似
lzop
或可能的東西gzip --fastest
。- 如果您只是在這里和那裡更改一些位,然後將文件發回,那麼僅發送增量會快得多。不幸的是,
rsync
這裡並沒有真正的幫助,因為它需要讀取雙方的文件才能找到增量。相反,您需要在更改文件時跟踪增量的東西……這裡的大多數方法都是特定於應用程序的。但是您可能可以使用設備映射器(請參閱全新的dm-era 目標)或 btrfs 來安裝某些東西。- 如果您要將相同的數據複製到多台機器上,您可以使用 udpcast 之類的東西一次將其發送到所有機器上。
而且,既然你注意到你不是系統管理員,我猜這意味著你有一個系統管理員。或者至少有人負責文件伺服器和網路。您可能應該問他/她/他們,他們應該更熟悉您的設置的細節。您的系統管理員至少應該能夠告訴您可以合理預期的傳輸速率。