File-Transfer

將 55GB 圖像傳輸到新伺服器的最快方法

  • November 30, 2019

我目前有兩台 CentOS 伺服器。我需要知道如何以及最快的方法是“tar”圖像目錄並將其 SCP 覆蓋?

這是我剛才建議的最快方法嗎,因為 tarring 需要永遠……我執行了命令:

tar cvf imagesbackup.tar images

我打算把它 scp 過去。

讓我知道是否有更快的方法。我對兩台機器都有遠端/SSH 訪問權限。

您可以使用 ssh 通過網路直接寫入遠端伺服器,而不是使用 tar 寫入本地磁碟。

server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"

“ssh”命令後面的任何字元串都將在遠端伺服器上執行,而不是互動式登錄。您可以通過 SSH 將輸入/輸出通過管道傳輸到這些遠端命令,就好像它們是本地命令一樣。將命令放在引號中可以避免任何混淆,尤其是在使用重定向時。

或者,您可以直接在另一台伺服器上提取 tar 文件:

server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"

請注意很少使用的-C選項。它的意思是“在做任何事情之前先切換到這個目錄”。

或者,也許您想從目標伺服器“拉”:

server2$ tar -zx -C /destination < <(ssh server1 "tar -zc -C /srcdir ./path")

請注意,該 <(cmd) 構造對 bash 來說是新的,並且不適用於舊系統。它執行一個程序並將輸出發送到管道,然後將該管道替換為命令,就好像它是一個文件一樣。

我可以很容易地將上面的內容寫成如下:

server2$ tar -zx -C /destination -f <(ssh server1 "tar -zc -C /srcdir ./path")

或者如下:

server2$ ssh server1 "tar -zc -C /srcdir ./path" | tar -zx -C /destination

或者,您可以省去一些麻煩,只需使用 rsync:

server1$ rsync -az ./path server2:/destination/

最後,請記住,在傳輸之前壓縮數據會減少您的頻寬,但在非常快的連接上,它實際上可能會使操作花費更多時間。這是因為您的電腦可能無法以足夠快的速度進行壓縮以跟上速度:如果壓縮100MB 所需的時間比發送100MB 所需的時間長,那麼發送未壓縮的速度會更快。

或者,您可能需要考慮自己通過管道連接到 gzip(而不是使用 -z 選項),以便您可以指定壓縮級別。根據我的經驗,在具有可壓縮數據的快速網路連接上,在大多數情況下使用 2 級或 3 級(預設為 6)的 gzip 可提供最佳的整體吞吐量。像這樣:

server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"

引用自:https://serverfault.com/questions/208300