增量同步
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刪除內容時,建立好新的空目錄,替換掉老目錄,基本沒開銷。