增量同步
rsync [args] SRC [DEST]
情形:同時維護着兩份不同的data_center
,但以old_data_center
爲標準。因爲權限的緣故沒有開啓rsync自動同步,只是每隔一段時間手動同步一下。SRC
和DEST
都是採用mount形式,如果每一次都完整地copy
,耗時很長,這時候就想到採用增量同步的方法,因爲兩份data_center
同時由不同人維護,所以內容略有不同,data_center
同步的時候不光要完全同步old_data_center
的所有內容,而且要刪除自身多餘的內容,保持完全一致。
rsync -a
--delete
--progress /old_vip_data_center/test_envs/trainer/resource /vip_data_center/test_envs/trainer/resource/
--delete: 刪除DEST
端存在但是SRC
端不存在的文件,如果不使用此參數,則DEST端會同步SRC端的文件,但DEST端已有的文件不受影響。
快速刪除大量文件
-
先建一個空目錄,隨便位置
mkdir /local/empty_dir
-
用rsync刪除目標目錄
rsync --delete-before -avH --progress /local/empty_dir/ /local/trainer_test/
trainer_test
清空之後可以再用rm -rf trainer_test
刪除
注意不要忘了文件夾最後的/
rsync
提供了一些跟刪除相關的參數
rsync --help | grep delete
--del an alias for --delete-during
--delete-before receiver deletes before transfer (default)
選項說明: -a 遞歸方式傳輸文件,並保持文件屬性 --delete-before 接收者在傳輸之前進行刪除操作 --progress 在傳輸時顯示傳輸過程 -- 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性 -H 保持硬連接的文件 -v 詳細輸出模式 -stats 給出某些文件的傳輸狀態
不過在使用上面的命令進行清理時,存在一個問題,清空後,目標目錄的權限會和源目錄的權限一樣。如:/tmp/empty
是root:root
,而maildrop
之前是postfix:postdrop
,執行之後也會maildrop
目錄的權限也會變成root:root
。由於-a權限是-rlptogD幾個參數的集合,所以可以將og(owner:group)兩個參數去掉。清空時自動保持之前的目錄權限,如下:
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
爲什麼rsync這麼快呢?
rm刪除內容時,將目錄的每一個條目逐個刪除(unlink),需要循環重複操作很多次;
rsync刪除內容時,建立好新的空目錄,替換掉老目錄,基本沒開銷。
If you want to conquer fear, don't sit home and think about it. Go out and get busy.
實戰
今天因爲用代碼生成SQL腳本的時候,本來是說100W的數據生成一個的,結果因爲一個運算符的問題導致了生成上百萬的小文件。
while ((line = br.readLine()) != null) {
if (count < skipHeadCount) {
count++;
continue;
}
// 每MAX_SIZE就會生成一個,MAX_SIZE=1000000
int fileExtName = (count - skipHeadCount) / MAX_SIZE; // 當時種類count - skipHeadCount忘記打括號了
if (fileExtName > currentFileExtName) {
bw.flush();
currentFileExtName = fileExtName;
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(String.format(fileOutputPath, currentFileExtName)))));
}
String formatStr = genService.format(line);
bw.write(formatStr);
bw.newLine();
log.info("count:{}", count);
count++;
}
刪除的時候會報錯
Argument list too long
實戰後發現效率貴高的一種方式:
參考地址
如果大家喜歡我的文章,可以關注個人訂閱號。歡迎隨時留言、交流。如果想加入微信羣的話一起討論的話,請加管理員簡棧文化-小助手(lastpass4u),他會拉你們進羣。