當你要兩臺機器之間拷貝一些大文件的時候,把nc(netcat)和pigz(parallel gzip)組合起來會是一個簡單和高效的選擇。不過,若是要把這些文件同時分發到多臺機器,有什麼好法子嗎?在Tumblr,這還算蠻常見的需求,好比咱們要快速的同時增長几臺MySQL Slave的時候。html
你能夠從源機器逐個拷貝到逐臺目標機器,可是每每時間也是成倍的。或者你也能夠同時從源機器同時拷貝到多個目標機器,可是受制於源機器的帶寬等因素,速度並不見得真的很快。linux
還好,藉助一些UNIX工具能夠作的更好。把tee和FIFO組合起來,能夠造成一個文件快速分發鏈:處於分發鏈中的每臺機器會保存文件,同時還分發給它的下一環。shell
首先,選定一臺目標機器作爲分發鏈的最後一環,在這臺機器上只須要用nc監聽(假定端口是1234),再經過管道由pigz解壓縮,繼續經過管道把數據交由tar來分解。工具
而後,再從分發鏈的末端往上走,設置其它目標機器,一樣要通過監聽、解壓、分解,不過在解壓以前咱們經過tee命令將數據輸出到命名管道(FIFO),另外的一條shell管道會將這些未解壓的數據同時分發到分發鏈的下一環:post
最後,在源機器上啓動分發鏈,讓數據傳輸到分發鏈的第一環:性能
在個人測試中,分發鏈中的每臺機器大概損失了3%-10%的性能(相對於1對1的拷貝而言),可是相對逐個逐個的拷貝或者單臺機器向多臺機器同時分發,效率提高是很明顯的。測試
本文地址:https://linux.cn/article-2627-1.htmlspa
原文: Efficiently copying files to multiple destinations .net
via : http://xiaobin.net/201107/efficiently-copying-files-to-multiple-destinations/ htm