Linux下快速遷移海量檔案的操作記錄

2022-05-10 15:12:47 字數 2208 閱讀 2225

有這麼一種遷移海量檔案的運維場景:由於現有**伺服器配置不夠,需要做**遷移(就是遷移到另一台高配置伺服器上跑著),站點目錄下有海量的小檔案,大概100g左右,檔案居多。目測直接拷貝過去的話,要好幾天的時間。那麼問題來了,這種情況下的**資料要怎麼遷移呢?另外,此**還在執行中,白天是斷然不能停止了,只能執行深夜停掉幾個小時。

可以採用的方案如下:

1.利用rsync進行同步。這種方法速度會慢,不過好在支持續傳,在頻寬不高或**不穩定的情況下強烈建議用此方法:

1)先修改一下舊站上傳的功能,確保新上傳的儲存到另乙個新的目錄位址下;

2)用rsync把舊同步到新的機器上;rsync可限速,同步操作時不會影響**的對外服務。

3)可以寫個rsync同步指令碼,在夜裡定時執行(比如凌晨1點執行,6點結束同步),100g的檔案,要不了幾個晚上就能搞定。

4)待舊站全都同步過去了,再一次性把新上傳的rsync同步過去。並遷移****。

2.如果網速快,網路穩定,可以考慮tar打包(壓縮)後傳輸。不過打包後,要在乙個停站週期內完成遷移,對於100g的量的檔案傳輸,這種方法不太靠譜。

3.可以分塊打包,比如根據大小適當的分塊篩選(find)打包,然後再傳輸。

4.如果資料不重要,通過http(wget)傳輸會更快些。

5.直接把舊站伺服器的硬碟拿下來,然後將硬碟掛載到新站伺服器上,再在新伺服器上將nginx站點目錄指向新掛載的硬碟。

例項說明:

比如本機站點目錄/var/www/html下有100多萬個小檔案,需要將這些檔案遷移到遠端伺服器192.168.1.101的/var/www/html目錄下。

操作思路:

直接用rsync把檔案乙個乙個的遷移過去,因為檔案數量比較大,如果一下子在迴圈指令碼裡操作,會非常慢。

所以決定用分批操作,採用化整為零的方法。

為了試驗效果,可以先在/var/www/html目錄下造數

[root@bastion-idc ~]# cd /var/www/html

[root@bastion-idc ~]# for i in `seq 1 1000000`;do touch test$i;done

1)採用rsync同步方法

[root@bastion-idc ~]# cat /root/rsync.sh

#!/bin/bash

home=/var/www/html

cd $home

if [ `pwd` == $home ];then

a="1 100000 200000 300000 400000 500000 600000 700000 800000 900000" //比100萬低一級單位,即10萬的單位

for b in $a

doc=`expr $b + 10000` //比10萬低一級單位

for loop in $(ls -l|sed -n "$b,$c"p|awk -f" " '')

dorsync $loop 192.168.1.101:$home

done

done

fi

[root@bastion-idc ~]# chmod 755 /root/rsync.sh

[root@bastion-idc ~]# /bin/bash /root/rsync.sh

2)採用wget方式(假設本機ip為192.168.1.99)

[root@bastion-idc ~]# cat /root/rsync.sh

#!/bin/bash

home=/var/www/html

cd $home

if [ `pwd` == $home ];then

a="1 100000 200000 300000 400000 500000 600000 700000 800000 900000"

for b in $a

doc=`expr $b + 10000`

for loop in $(ls -l|sed -n "$b,$c"p|awk -f" " '')

do/usr/bin/ssh [email protected] "/usr/bin/wget -p /var/www/html"

done

done

fi

shell快速遷移海量檔案

author skate time 2012 03 02 同事的寫的乙個指令碼,覺得非常好,實用性很強,精緻短小,特記錄與此,方便以後查用.業務需求 需要把乙個目錄下的1000多萬個檔案遷移到遠端機器 思路 用wget來把檔案乙個乙個的遷移過去,因為檔案數量比較大,如果一下在迴圈操作,會非常慢。所以...

shell快速遷移海量檔案

同事的寫的乙個指令碼,覺得非常好,實用性很強,精緻短小,特記錄與此,方便以後查用.業務需求 需要把乙個目錄下的1000多萬個檔案遷移到遠端機器 思路 用wget來把檔案乙個乙個的遷移過去,因為檔案數量比較大,如果一下在迴圈操作,會非常慢。所以分批操作,採用化整為零的方法,具體的shell指令碼如下 ...

Linux下使用rsync最快速刪除海量檔案的方法

有的日誌,增長很快,而且沒什麼用。這個時候,我們常用的刪除命令rm fr 就不好用了,因為要等待的時間太長。所以必須要採取一些非常手段。我們可以使用rsync來實現快速刪除大量檔案。1 先安裝rsync yum install rsync 2 建立乙個空的資料夾 mkdir tmp test 3 用...