海量小檔案同步

2021-09-03 10:49:00 字數 1312 閱讀 5066

集中式儲存是目前中小企業廣泛採用的方案,隨著時間的流逝,這些儲存不可避免的膨脹。集中式儲存的弊端愈加顯現,同步就是其中乙個。

環境:

檔案容量以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 bash

dir="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同步,最先想到的是此方案,先看下指令碼 此前在多台伺服器間同步 ...