Linux rsync 增量同步與快速刪除


增量同步

rsync [args] SRC [DEST]
情形:同時維護着兩份不同的data_center,但以old_data_center為標准。因為權限的緣故沒有開啟rsync自動同步,只是每隔一段時間手動同步一下。SRCDEST都是采用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端已有的文件不受影響。

快速刪除大量文件

  1. 先建一個空目錄,隨便位置
    mkdir /local/empty_dir
  2. 用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/emptyroot: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刪除內容時,建立好新的空目錄,替換掉老目錄,基本沒開銷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM