rsync
是一個遠程數據同步工具,算法是同步文件差異部分,因此針對非第一次同步傳輸速度快 (首次備份,沒有復制優勢)
rsync作者:Andrew Tridgell 和 Paul Mackerras
rsync特性:
1、可以鏡像保存整個目錄和文件系統
2、容易做到保持原來文件的權限、時間、軟硬鏈接等
3、無特殊權限就可以安裝,linux操作系統默認安裝
4、優化的流程、文件傳輸效率高
5、可以使用rsh ssh 方式來傳輸文件 也可直接通過socket方式
6、支持匿名傳輸
7、rsync 進行遠程同步時,可以使用兩種方式:遠程Shell方式(建議使用 ssh用戶驗證由 ssh 負責)和C/S方式(即客戶連接遠程rsync 服務器,用戶驗證由rsync 服務器負責)
備份兩種情況:
1、需保留備份歷史歸檔:在備份時保留歷史的備份歸檔,是為了在系統出現錯誤后能恢復到從前正確的狀態。這可以使用完全備份和增量備份來完成。可以使用 tar 命令保存歸檔文件。為了提高備份效率,也可以使用 rsync 結合 tar 來完成。
2、無需保留備份歷史歸檔:若無需從歷史備份恢復到正確狀態,則只備份系統最新文件狀態即可。這可以簡單地使用 rsync 同步來完成。此時通常稱為鏡像。
鏡像可以分為兩種:
被鏡像的目錄在各個主機上保持相同的位置。此時一般是為了實施負載均衡而對多個主機進行同步鏡像。例如:將主機 A 的 /srv/www 目錄同步到主機 B 的 /srv/www 目錄等。
被鏡像的目錄在各個主機上不保持相同的位置。例如:主機 A 和主機 B 都運行着各自的業務,同時又互為鏡像備份。此時主機 A 的 /srv/www 目錄同步到主機 B 的 /backups/hosta/www 目錄;主機 B 的 /srv/www 目錄同步到主機 A 的 /backups/hostb/www 目錄等。
說明:
若使用普通身份執行rsync,同步后的文件的屬主將改變為這個普通用戶身份
使用超級用戶身份運行rsync命令,同步后的文件的屬主將保持原來的用戶身份
rsync使用格式
本機使用
rsync [option...] src... [dest]...
遠程shell備份
備份到本機
rsync [option...] [user@]host:src(遠程文件路徑)... [dest](本機備份路徑)... eg: rsync root@192.168.217.11:/root/test.sh ./
備份到遠程機器
rsync [option...] src(本地文件路徑)... [user@]host:[dest](遠程主機備份路徑)... eg: rsync ./testbak.sh root@192.168.217.11:/root/
訪問rsync服務器備份:
備份到本機: rsync [option...] [user@]host::src... [dest]... 備份到遠程機器: rsync [option...] src... [user@]host::[dest] 備份到本機: rsync [option...] rsync://[user@]host[:port]/src... [dest]... 備份到遠程機器: rsync [option...] src... rsync://[user@]host[:port]/[dest]
備注:
1、如果不指定[dest] rsync只列出需要備份的文件(列出格式類似於ls -la)
2、遠程shell同步時,主機名與資源之間使用單個冒號“:”作為分隔符
3、rsync服務器同步時,主機名與資源之間使用兩個冒號“::”作為分隔符
option參數說明
-a --archive:歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性 -r ––recursive:對子目錄以遞歸模式處理 -l ––links:保持符號鏈接文件 -H ––hard-links:保持硬鏈接文件 -p ––perms:保持文件權限 -t ––times:保持文件時間信息 -g ––group:保持文件屬組信息 -o ––owner:保持文件屬主信息 (super-user only) -D:保持設備文件和特殊文件 (super-user only) -z --compress:在傳輸文件時進行壓縮處理 --exclude=pattern:指定排除一個不需要傳輸的文件匹配模式 --exclude-from=file:從file中讀取排除規則 --include=file:指定需要傳輸的文件匹配模式 --include-from=file:從file中讀取包含規則 --copy-unsafe-links:拷貝指向SRC路徑目錄樹以外的鏈接文件 --safe-links:忽略指向SRC路徑目錄樹以外的鏈接文件(默認) --exsiting:僅僅更新那些已經存在於接收端的文件,而不備份那些新創建的文件 --ignore-existing:忽略那些已經存在於接收端的文件,僅備份那些新創建的文件 -b --backup:當有變化時,對目標目錄中的舊版文件進行備份 --backup-dir=dir:與 -b 結合使用,將備份的文件存到 DIR 目錄中 --link-dest=dir:當文件未改變時基於DIR創建硬鏈接文件 ––delete:刪除那些接收端還有而發送端已經不存在的文件 ––delete-before:接收者在傳輸之前進行刪除操作 (默認) ––delete-during:接收者在傳輸過程中進行刪除操作 ––delete-after:接收者在傳輸之后進行刪除操作 ––delete-excluded:在接收方同時刪除被排除的文件 -e ––rsh=COMMAND:指定替代 rsh 的 shell 程序 ––ignore-errors 即使出現 I/O 錯誤也進行刪除 ––partial:保留那些因故沒有完全傳輸的文件,以是加快隨后的再次傳輸 ––progress:在傳輸時顯示傳輸過程 -P:等價於 ––partial ––progress ––delay-updates:將正在更新的文件先保存到一個臨時目錄(默認為 “.~tmp~”),待傳輸完畢再更新目標文件 -v ––verbose:詳細輸出模式 -q ––quiet:精簡輸出模式 -h ––human-readable:輸出文件大小使用易讀的單位(如,K,M等) -n ––dry-run:顯示哪些文件將被傳輸 ––list-only:僅僅列出文件而不進行復制 ––rsyncpath=PROGRAM:指定遠程服務器上的 rsync 命令所在路徑 ––password-file=FILE:從 FILE 中讀取口令,以避免在終端上輸入口令,通常在 cron 中連接 rsync 服務器時使用 -4 ––ipv4:使用 IPv4 -6 ––ipv6:使用 IPv6 ––version:打印版本信息 ––help:顯示幫助信息
特別強調使用
--exclude=pattern,指定排除一個不需要傳輸的文件匹配模式
rsync 命令將192.168.217.11主機上的/www目錄(不包含/www/logs和/www/conf子目錄)復制到本地的/backup/www/
rsync -vzrtopg --delete --exclude "logs/" --exclude "conf/" --progress backup@192.168.217.11:/www/ /backup/www/
rsync命令僅復制目錄結構而忽略掉目錄中的文件
rsync -av --include '*/' --exclude '*' backup@192.168.0.101:/www/ /backup/www-tree/
備注:
1、選項 ––include和 ––exclude都不能使用間隔符。例如:
--exclude "logs/" --exclude "conf/"
不能寫成
--exclude "logs/ conf/"
2、備份時目錄后是否有"/"說明:
將192.168.217.11的root目錄下備份所有文件到當前目錄下
rsync -avpz --delete root@192.168.217.11:/root ./
將192.168.217.11的root目錄下所以文件且包含root目錄,備份到當前目錄下
rsync -avpz --delete root@192.168.217.11:/root/ ./
當 include/exclude 的規則較復雜時,可以將規則寫入規則文件。使用規則文件可以靈活地選擇傳輸哪些文件(include)以及忽略哪些文件(exclude)。
1、若文件/目錄在剔除列表中,則忽略傳輸
2、若文件/目錄在包含列表中,則傳輸之
3、若文件/目錄未被提及,也傳輸之
4、在 rsync 的命令行中使用 ––exclude-from=FILE 或 ––include-from=FILE 讀取規則文件。
5、規則文件 FILE 的書寫約定:
每行書寫一條規則 RULE
以 # 或 ; 開始的行為注釋行
包含(include)和排除(exclude)規則的語法如下:
include PATTERN 或簡寫為 + PATTERN
exclude PATTERN 或簡寫為 - PATTERN
PATTERN 的書寫規則如下:
以 / 開頭:匹配被傳輸的跟路徑上的文件或目錄
以 / 結尾:匹配目錄而非普通文件、鏈接文件或設備文件
使用通配符
*:匹配非空目錄或文件(遇到 / 截止)
**:匹配任何路徑(包含 / )
?:匹配除了 / 的任意單個字符
[:匹配字符集中的任意一個字符,如 [a-z] 或 [[:alpha:]]
可以使用轉義字符 \ 將上述通配符還原為字符本身含義
下面給出幾個使用規則的例子:
eg1:
# 不傳輸所有后綴為 .o 的文件 - *.o # 不傳輸傳輸根目錄下名為 foo 的文件或目錄 - /foo # 不傳輸名為 foo 的目錄 - foo/ # 不傳輸 /foo 目錄下的名為 bar 的文件或目錄 - /foo/bar
eg2:
# 傳輸所有目錄和C語言源文件並禁止傳輸其他文件 + */ + *.c - *
eg3:
# 僅傳輸 foo 目錄和其下的 bar.c 文件 + foo/ + foo/bar.c - *
將規則寫入規則文件之后,使用示例:
首先將下面的規則存入名為www-rsync-rules.txt的文件
vim www-rsync-rules.txt
# 不傳輸 logs 目錄 - logs/ # 不傳輸后綴為 .tmp 的文件 - *.tmp # 傳輸 Apache 虛擬主機文檔目錄(/*/ 匹配域名) + /srv/www/ + /srv/www/*/ + /srv/www/*/htdocs/ + /srv/www/*/htdocs/** # 傳輸每個用戶的 public_html 目錄(/*/ 匹配用戶名) + /home/ + /home/*/ + /home/*/public_html/ + /home/*/public_html/** # 禁止傳輸其他 - *
然后即可使用類似如下的 rsync 命令:
rsync -av --delete --exclude-from=www-rsync-rules.txt / remotehost:/dest/dir
-e參數說明
使用基於ssh的rsync同步數據可以使用 -e ssh 參數,CentOS默認指定使用ssh作為遠程Shell。若在其他系統上執行rsync 命令,為確保使用ssh作為遠程 Shell,請添加 -e ssh 參數。
指定ssh端口進行rsync
rsync -rvz -e 'ssh -p port' --progress --remove-sent-files ./localpath root@remotehost:remotepath
eg:指定ssh端口為2203進行rsync
rsync -rvz -e 'ssh -p 2203' --progress --remove-sent-files hadoop@192.168.217.11:/home/hadoop_ftp/test_all/test /home/wangchengliang