拷貝大量檔案時,用cp有諸多不便(例如指令意外中斷後,無法續傳;如果強行覆寫的話,又會浪費時間;不覆寫的話,倒是可以通過echo "n"|cp -r /source /destination來完成,但是經過我的實驗,在大量檔案下,傳遞n給cp的覆寫提示也會時間延遲,是以對于已經存在的檔案同樣存在時間上的浪費)
rsync 擁有很多特性,可以避免上面提到cp的種種不便,但是考慮到操作大量檔案,就不得不考慮效率
下面是對大量檔案的拷貝、删除操作,基于cp、rm -rf、rsync三種方式的效率對比
實驗過程拷貝47G的資料(大小基本分散在25M以下檔案數量11041個)
一、拷貝
1、通過cp方式
time cp -rp -v /app/glusterfs/NetworkDisk /home/
real 16m29.876s
user 0m0.889s
sys 1m59.575s
2、rsync方式
time rsync -av /app/glusterfs/NetworkDisk /home/
real 16m34.557s
user 8m53.267s
sys 4m56.069s
二、删除
1、通過rm -rf
time rm -rf /home/NetworkDisk
real 0m3.341s
user 0m0.002s
sys 0m3.297s
2、通過rsync --delete
rsync -a --delete /empty /home/NetworkDisk
real 0m1.709s
user 0m0.014s
sys 0m1.573s
通過以上對比:
貌似在複制速度上,兩者不相上下
而在删除操作上,我們看到rsync --delete 比rm -rf快了約2s。
為了得出更可信的結果,我又做了針對10W小檔案的操作對比,如下
首先生成10W小檔案
for i in {1..100000};do dd if=/dev/zero of=/app/test/$i bs=100k;done
1、time cp -rp -v /app/test /home/
real 6m21.137s
user 0m1.848s
sys 0m34.099s
2、rsync -av /app/test /home/、
real 3m56.437s
user 1m53.502s
sys 1m21.125s
1、rm -rf /app/test
real 0m4.527s
user 0m0.143s
sys 0m4.339s
2、rsync -a --delete /empty /app/test
real 0m0.122s
user 0m0.000s
sys 0m0.009s
通過以上對10W小檔案的操作,可以得出結論,對于大量檔案的拷貝、删除操作,rsync相比較cp和rm還是有很大優勢的
最後附上一篇相關文章
<a href="http://www.linuxeden.com/html/news/20130613/140243.html" target="_blank">http://www.linuxeden.com/html/news/20130613/140243.html</a>
本文轉自kai404 51CTO部落格,原文連結:http://blog.51cto.com/kaifly/1437539,如需轉載請自行聯系原作者