Linux
dd over ssh 如何報告超過網路頻寬的讀取速度?
我正在執行此命令來測試來自刪除伺服器的連接:
ssh -l user $IP "dd if=/dev/zero count=3500 bs=1M status=progress" > /dev/null
這顯示了表單的進度報告
3145728000 bytes (3,1 GB, 2,9 GiB) copied, 276,047 s, 11,4 MB/s
顯然,
dd
以每秒 11mb 的速度讀取。然而,已知網路頻寬限制在 ~20 兆位以下,因此這不可能是實際接收到的數據量。
iftop
在接收機器上顯示大約 300 kbits 的吞吐量,這比可能的要小得多,但更現實。**問題:**通過 ssh 連接進行管道傳輸時,進度狀態的實際含義是什麼
dd
?接收端跟不上數據是否掉線?究竟發生了什麼?
SSH 可以作為壓縮協議執行,根據您的結果判斷,它在您的發行版或配置中預設啟用(或者您正在使用
ssh -C
)。因此,你的零流很好地壓縮成更緊湊的東西——從你的讀數來看,壓縮比約為 300:最終結果約為原始大小的 0.3%。出於這個原因,它並不是測試網路速度的好選擇,因為它只需要很少的網路頻寬就可以在接收器上產生巨大的結果。您可以在命令行上按需關閉壓縮,或者通過在 SSH 客戶端配置中
-o Compression=no
指定來永久關閉連接。Compression no
另一種選擇是使用更基本的東西,例如
netcat
,它不實現壓縮、身份驗證或類似功能,儘管出於這個原因我通常不建議將其用於實際文件傳輸。