Linux系統(tǒng)操作中,當你在進行機器直接的拷貝時,遇到大文件的時候非常浪費時間,特別是將文件同時拷貝到多臺機器上的時候,那么有什么好的方法能夠提高大文件的拷貝效率呢?一起來學習下吧。
你可以從源機器逐個拷貝到逐臺目標機器,但是往往時間也是成倍的?;蛘吣阋部梢酝瑫r從源機器同時拷貝到多個目標機器,但是受制于源機器的帶寬等因素,速度并不見得真的很快。
還好,借助一些UNIX工具可以做的更好。把tee和FIFO組合起來,可以形成一個文件快速分發(fā)鏈:處于分發(fā)鏈中的每臺機器會保存文件,同時還分發(fā)給它的下一環(huán)。
首先,選定一臺目標機器做為分發(fā)鏈的最后一環(huán),在這臺機器上只需要用nc監(jiān)聽(假定端口是1234),再通過管道由pigz解壓縮,繼續(xù)通過管道把數(shù)據(jù)交由tar來分解。
nc -l 1234| pigz -d | tar xvf -
然后,再從分發(fā)鏈的末端往上走,設置其它目標機器,同樣要經過監(jiān)聽、解壓、分解,不過在解壓之前我們通過tee命令將數(shù)據(jù)輸出到命名管道(FIFO),另外的一條shell管道會將這些未解壓的數(shù)據(jù)同時分發(fā)到分發(fā)鏈的下一環(huán):
mkfifo myfifo
nc hostname_of_next_box 1234 nc -l 1234| tee myfifo | pigz -d | tar xvf -
最后,在源機器上啟動分發(fā)鏈,讓數(shù)據(jù)傳輸?shù)椒职l(fā)鏈的第一環(huán):
tar cv some_files | pigz | nc hostname_of_first_box 1234
在我的測試中,分發(fā)鏈中的每臺機器大概損失了3%-10%的性能(相對于1對1的拷貝而言),但是相對逐個逐個的拷貝或者單臺機器向多臺機器同時分發(fā),效率提升是很明顯的。
上面就是Linux提高大文件拷貝效率的方法介紹了,主要通過UNIX工具形成一個文件快速分發(fā)鏈來實現(xiàn)大文件的快速拷貝,效率提高了不少。