【Linux】遠端資料同步
rsync命令詳解
rsync命令是一個遠端資料同步工具,可通過LAN/WAN快速同步多臺主機間的檔案。rsync使用所謂的“rsync演算法”來使本地和遠端兩個主機之間的檔案達到同步,這個演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多功能特色選項,我們下面就對它的選項一一進行分析說明。
rsync特性
-
能更新整個目錄和樹和檔案系統;
-
有選擇性的保持符號鏈鏈、硬連結、檔案屬於、許可權、裝置以及時間等;
-
對於安裝來說,無任何特殊許可權要求;
-
對於多個檔案來說,內部流水線減少檔案等待的延時;
-
能用rsh、ssh 或直接埠做為傳輸入埠;
-
支援匿名rsync 同步檔案,是理想的映象工具;
一、安裝rsync
- centOS :
yum -y install rsync
- Ubuntu
apt-get -y install rsync
驗證是否安裝成功
命令:rsync --version #檢視rsync版本
[root@localhost ~]# rsync --version rsync version 3.1.2 protocol version 31 Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv, symtimes, prealloc rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details.
二、rsync常用選項
- 1 ==-v, --verbose 詳細模式輸出==
- 2 ==-q, --quiet 靜默模式,傳輸沒有任何資訊,即使出錯了,也沒有資訊。==
- 3 -c, --checksum 開啟校驗開關,強制對檔案傳輸進行校驗
- 4 ==-a, --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rlptgoD==
- 5 ==-r, --recursive 對子目錄以遞迴模式處理==
- 6 -R, --relative 使用相對路徑資訊
- 7 -b, --backup 建立備份,也就是對於目的已經存在有同樣的檔名時,將老的檔案重新命名為~filename。可以使用--suffix選項來指定不同的備份檔案字首。
- 8 --backup-dir 將備份檔案(如~filename)存放在在目錄下。
- 9 -suffix=SUFFIX 定義備份檔案字首
- 10 -u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且檔案時間晚於要備份的檔案。(不覆蓋更新的檔案)
- 11 ==-l, --links 保留軟鏈結==
- 12 ==-L, --copy-links 想對待常規檔案一樣處理軟鏈結==
- 13 --copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結
- 14 --safe-links 忽略指向SRC路徑目錄樹以外的鏈結
- 15 -H, --hard-links 保留硬鏈結
- 16 ==-p, --perms 保持檔案許可權==
- 17 ==-o, --owner 保持檔案屬主資訊==
- 18 ==-g, --group 保持檔案屬組資訊==
- 19 ==-D, --devices 保持裝置檔案資訊==
- 20 ==-t, --times 保持檔案時間資訊==
- 21 -S, --sparse 對稀疏檔案進行特殊處理以節省DST的空間
- 22 -n, --dry-run現實哪些檔案將被傳輸
- 23 -W, --whole-file 拷貝檔案,不進行增量檢測
- 24 -x, --one-file-system 不要跨越檔案系統邊界
- 25 -B, --block-size=SIZE 檢驗演算法使用的塊尺寸,預設是700位元組
- 26 -e, --rsh=COMMAND 指定使用rsh、ssh方式進行資料同步
- 27 --rsync-path=PATH 指定遠端伺服器上的rsync命令所在路徑資訊
- 28 -C, --cvs-exclude 使用和CVS一樣的方法自動忽略檔案,用來排除那些不希望傳輸的檔案
- 29 --existing 僅僅更新那些已經存在於DST的檔案,而不備份那些新建立的檔案
- ==30 --delete 刪除那些DST中SRC沒有的檔案(如果源端沒有此檔案,那麼目的端也別想擁有,刪除之 )==
- 31 ==--delete-excluded 專門指定一些要在目的端刪除的檔案。==
- 32 --delete-after 傳輸結束以後再刪除
- 33 --ignore-errors 及時出現IO錯誤也進行刪除
- 34 --max-delete=NUM 最多刪除NUM個檔案
- 35 --partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸
- 36 --force 強制刪除目錄,即使不為空
- 37 --numeric-ids 不將數字的使用者和組ID匹配為使用者名稱和組名
- 38 --timeout=TIME IP超時時間,單位為秒
- 39 -I, --ignore-times 不跳過那些有同樣的時間和長度的檔案
- 40 --size-only 當決定是否要備份檔案時,僅僅察看檔案大小而不考慮檔案時間
- 41 --modify-window=NUM 決定檔案是否時間相同時使用的時間戳視窗,預設為0
- 42 -T --temp-dir=DIR 在DIR中建立臨時檔案
- 43 --compare-dest=DIR 同樣比較DIR中的檔案來決定是否需要備份
- 44 ==-P 等同於 --partial,保留那些因故沒有完全傳輸的檔案,以加快隨後的再次傳輸==
- 45 --progress 顯示備份過程
- 46 ==-z, --compress 對備份的檔案在傳輸時進行壓縮處理==
- 47 --exclude=PATTERN 指定排除不需要傳輸的檔案模式
- 48 --include=PATTERN 指定不排除而需要傳輸的檔案模式
- 49 --exclude-from=FILE 排除FILE中指定模式的檔案
- 50 --include-from=FILE 不排除FILE指定模式匹配的檔案
- 51 --version 列印版本資訊
- 52 --address 繫結到特定的地址
- 53 --config=FILE 指定其他的配置檔案,不使用預設的rsyncd.conf檔案
- 54 ==--port=PORT 指定其他的rsync服務埠==
- 55 --blocking-io 對遠端shell使用阻塞IO
- 56 -stats 給出某些檔案的傳輸狀態
- 57 --progress 在傳輸時現實傳輸過程
- 58 --log-format=formAT 指定日誌檔案格式
- 59 ==--password-file=FILE 從FILE中得到密碼==
- 60 --bwlimit=KBPS 限制I/O頻寬,KBytes per second
- 61 -h, --help 顯示幫助資訊
三、rsync使用方法舉例
例1:在本地伺服器上同步兩個目錄
在本地機器上同步兩個目錄,使用==rsync -zvr==命令
[root@localhost ~]# rsync -zvr /opt/seafile-data/ /mnt/
sending incremental file list
db/
db/aria_log.00000001
db/aria_log_control
db/ib_logfile0
上述命令中:
-
-z 開啟壓縮功能
-
-v verbose更多列印資訊
-
-r recursive
執行上述命令後,你會發現rsync copy會影響到檔案的timestamp資訊,這時因為預設rsync並不保護timestamp資訊
注意:
/opt/seafile-data/ 這種寫法將同步seafile-data資料夾下所有檔案,不包括seafile-data資料夾
/opt/seafile-data 這種寫法將同步seafile-data整個資料夾,包括seafile-data資料夾
例2:在sync時,保留時間戳 -a(achive mode:recursive mode, 保留符號連結,保留許可權資訊,時間戳,以及owner,group資訊)
[root@localhost ~]# rsync -avz /opt/seafile-data /mnt/
sending incremental file list
seafile-data/
seafile-data/db/
seafile-data/db/aria_log.00000001
seafile-data/db/aria_log_control
seafile-data/db/ib_logfile0
注意這時你會發現source,dest檔案的時間戳、屬主屬組等資訊是不變的
[root@localhost ~]# ls -l /opt/seafile-data/logs/seafile/seahub.log /mnt/seafile-data/logs/seafile/seahub.log
-rw-r--r-- 1 root root 15858 3月 21 18:23 /mnt/seafile-data/logs/seafile/seahub.log
-rw-r--r-- 1 root root 15858 3月 21 18:23 /opt/seafile-data/logs/seafile/seahub.log
例三:只同步一個檔案
只要在rsync命令中指定檔名稱即可
[root@localhost ~]# rsync -v /opt/seafile-data/seafile/conf/install.sh /mnt/
install.sh
sent 19,858 bytes received 35 bytes 39,786.00 bytes/sec
total size is 19,776 speedup is 0.99
ll /mnt/install.sh
-rw-r--r-- 1 root root 19776 3月 25 14:05 /mnt/install.sh
例四:從本地同步到遠端伺服器
[root@localhost ~]# rsync -avz /opt/seafile-data [email protected]:/mnt/
[email protected]'s password: 輸入遠端伺服器密碼
sending incremental file list
seafile-data/
seafile-data/db/
seafile-data/db/aria_log.00000001
seafile-data/db/aria_log_control
......
......
sent 1,809,853,100 bytes received 10,547 bytes 28,501,789.72 bytes/sec
total size is 2,005,006,840 speedup is 1.11
當執行和remote server同步的動作時,你需要指定username,ip。也要指定遠端伺服器上的目的地目錄,格式是: username@machineIP:Path
即格式為:
==rsync -avz 本地需要同步檔案的絕對路徑 遠端使用者名稱@遠端IP:遠端檔案儲存的絕對路徑==
這個過程中,rsync會要求輸入密碼。但是如果你有一個指令碼自動執行這個備份動作,你可能希望不要手動輸入密碼,即
例5:從遠端伺服器同步到本地
[root@localhost ~]# rsync -avz [email protected]:/mnt/seafile-data /mnt/
[email protected]'s password: 輸入密碼
receiving incremental file list
seafile-data/
seafile-data/db/
seafile-data/db/aria_log.00000001
......
......
sent 4,698 bytes received 1,785,742,775 bytes 31,056,477.79 bytes/sec
total size is 2,005,006,840 speed