集中式儲存是目前中小企業廣泛採用的方案,隨著時間的流逝,這些儲存不可避免的膨脹。集中式儲存的弊端愈加顯現,同步就是其中乙個。
環境:
檔案容量以tb計,裡面是千萬/億級的小檔案,分布在成千上萬的子資料夾內。
分析:
rsync幾乎是唯一選擇,海量小檔案同步面臨的問題主要是rsync無止境的掃瞄,同步進度難以把控,巨大的臨時目錄等。所以解決辦法只能是庖丁解牛,將乙個大任務分解成n個小任務。
場景假設如下:
1、源伺服器目錄結構是按照年月日分布,示例如下
/www/images/2014/04/30/***.png
2、目標rsync伺服器為 192.168.1.2::www,且可寫。
解決辦法:
很明顯,同步最底層的目錄最快。
find /www/images \-mindepth 3 \
-maxdepth 3 \
-type d \
-exec rsync -aqur {}/ 192.168.1.2::www/images/ \; \
-exec echo /www/images/{} done \;
注:-r 可解決遠端rsync伺服器的目錄結構問題。
另一種方法是for迴圈,比較好理解。
#!/usr/bin/env bashdir="www/images"
for year in 2014 2015 ;do
for month in `seq 1 12`;do
for day in `seq 1 31`;do
if [ -d /$dir/$year/$month/$day ];then
rsync -aqu /$dir/$year/$month/$day/ 192.168.1.2::$dir/$year/$month/$day/
else
echo "directory /$dir/$year/$month/$day not exist."
fidone
done
done
集中式儲存的缺點是: 必須提前做容量規劃,儲存嚴格控制在設計容量內之內,如果要擴充套件,必須重新進行容量規劃。
要根本解決這個問題,終極的辦法似乎只有分布式檔案系統,用全新的設計理念的來解決儲存問題,按需擴充套件。
可惜的是,目前的分布式檔案系統幾乎都是為大檔案而設計,對於海量小檔案支援都不夠。ceph足夠優秀,但是還不完全成熟。
Linux轉移海量小檔案的技巧
在做檔案遷移或者伺服器遷移的時候,有時候會遇到海量小檔案的情況,尤其是有那種使用者上傳檔案,附件的伺服器,動輒就是幾十上百g的檔案,而每個檔案只有幾k到幾十k,使用普通的cp,scp,ftp傳輸非常慢而且不支援斷點續傳。如果通過先打包再傳輸的方式,要消耗掉大量的儲存空間,而且壓縮和解壓又要消耗雙倍的...
Linux下刪除海量小檔案最快方法
測試一下linux下面刪除大量檔案的效率。首先建立50萬個檔案 test for i in se q1500000 doec hote xt seq 1 500000 do echo text seq15 0000 0 d oech otex t i.txt done 1.rm刪除 time rm ...
基於sersync海量檔案實時同步
基於sersync海量檔案實時同步 專案需求 最近涉及到數百萬張從本地儲存遷移到雲儲存,為了使完成遷移,並保證無缺失,業務不中斷,決定採用實時同步,同步完後再做流量切換。在實時同步方案中進行了幾種嘗試。方案1 rsync inotify同步,最先想到的是此方案,先看下指令碼 此前在多台伺服器間同步 ...