linux之rsync遠(yuǎn)程同步文件
Remote Sync,是類unix下數(shù)據(jù)鏡像的備份工具。可以方便的實(shí)現(xiàn)本地,遠(yuǎn)程備份文件,rsync最重要的一點(diǎn)是支持增量備份。命令語法
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]host:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]對(duì)應(yīng)于以上六種命令格式,rsync有六種不同的工作模式:
拷貝本地文件。當(dāng)SRC和DES路徑信息都不包含有單個(gè)冒號(hào)":"分隔符時(shí)就啟動(dòng)這種工作模式。如:
rsync -a /data /backup使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來實(shí)現(xiàn)將本地機(jī)器的內(nèi)容拷貝到遠(yuǎn)程機(jī)器。當(dāng)DST路徑地址包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。如:
rsync -avz *.c foo:src使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來實(shí)現(xiàn)將遠(yuǎn)程機(jī)器的內(nèi)容拷貝到本地機(jī)器。當(dāng)SRC地址路徑包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。如:
rsync -avz foo:src/bar /data從遠(yuǎn)程rsync服務(wù)器中拷貝文件到本地機(jī)。當(dāng)SRC路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。如
rsync -av [email protected]::www /databack從本地機(jī)器拷貝文件到遠(yuǎn)程rsync服務(wù)器中。當(dāng)DST路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。如
rsync -av /databack [email protected]::www列遠(yuǎn)程機(jī)的文件列表。這類似于rsync傳輸,不過只要在命令中省略掉本地機(jī)信息即可。如:
rsync -v rsync://192.168.1.110/www
rsync daemon常用幾個(gè)參數(shù)
- -v verbose詳細(xì)輸出
- -a 遞歸模式,遞歸方式傳輸文件,并保持連接,權(quán)限,用戶和組,時(shí)間信息
- -z 壓縮傳輸
- -h human-readable, 輸出友好
- -u 跳過已經(jīng)存在的文件rsync 全部參數(shù)
-v, --verbose 詳細(xì)模式輸出
-q, --quiet 精簡(jiǎn)輸出模式
-c, --checksum 打開校驗(yàn)開關(guān),強(qiáng)制對(duì)文件傳輸進(jìn)行校驗(yàn)
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于 -rlptgoD
-r, --recursive 對(duì)子目錄以遞歸模式處理
-R, --relative 使用相對(duì)路徑信息
-b, --backup 創(chuàng)建備份,也就是對(duì)于目的已經(jīng)存在有同樣的文件名時(shí),將老的文件重新命名為~filename。可以使用 --suffix 選項(xiàng)來指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename) 存放在在目錄下。
-suffix=SUFFIX 定義備份文件前綴
-u, --update 僅僅進(jìn)行更新,也就是跳過所有已經(jīng)存在于 DST,并且文件時(shí)間晚于要備份的文件。(不覆蓋更新的文件)
-l, --links 保留軟鏈結(jié)
-L, --copy-links 想對(duì)待常規(guī)文件一樣處理軟鏈結(jié)
--copy-unsafe-links 僅僅拷貝指向 SRC 路徑目錄樹以外的鏈結(jié)
--safe-links 忽略指向 SRC 路徑目錄樹以外的鏈結(jié)
-H, --hard-links 保留硬鏈結(jié)
-p, --perms 保持文件權(quán)限
-o, --owner 保持文件屬主信息
-g, --group 保持文件屬組信息
-D, --devices 保持設(shè)備文件信息
-t, --times 保持文件時(shí)間信息
-S, --sparse 對(duì)稀疏文件進(jìn)行特殊處理以節(jié)省 DST 的空間
-n, --dry-run 現(xiàn)實(shí)哪些文件將被傳輸
-W, --whole-file 拷貝文件,不進(jìn)行增量檢測(cè)
-x, --one-file-system 不要跨越文件系統(tǒng)邊界
-B, --block-size=SIZE 檢驗(yàn)算法使用的塊尺寸,默認(rèn)是 700 字節(jié)
-e, --rsh=COMMAND 指定使用 rsh、ssh 方式進(jìn)行數(shù)據(jù)同步
--rsync-path=PATH 指定遠(yuǎn)程服務(wù)器上的 rsync 命令所在路徑信息
-C, --cvs-exclude 使用和 CVS 一樣的方法自動(dòng)忽略文件,用來排除那些不希望傳輸?shù)奈募?br>--existing 僅僅更新那些已經(jīng)存在于 DST 的文件,而不備份那些新創(chuàng)建的文件
--delete 刪除那些 DST 中 SRC 沒有的文件
--delete-excluded 同樣刪除接收端那些被該選項(xiàng)指定排除的文件
--delete-after 傳輸結(jié)束以后再刪除
--ignore-errors 及時(shí)出現(xiàn) IO 錯(cuò)誤也進(jìn)行刪除
--max-delete=NUM 最多刪除 NUM 個(gè)文件
--partial 保留那些因故沒有完全傳輸?shù)奈募允羌涌祀S后的再次傳輸
--force 強(qiáng)制刪除目錄,即使不為空
--numeric-ids 不將數(shù)字的用戶和組 ID 匹配為用戶名和組名
--timeout=TIME IP 超時(shí)時(shí)間,單位為秒
-I, --ignore-times 不跳過那些有同樣的時(shí)間和長(zhǎng)度的文件
--size-only 當(dāng)決定是否要備份文件時(shí),僅僅察看文件大小而不考慮文件時(shí)間
--modify-window=NUM 決定文件是否時(shí)間相同時(shí)使用的時(shí)間戳窗口,默認(rèn)為 0
-T --temp-dir=DIR 在 DIR 中創(chuàng)建臨時(shí)文件
--compare-dest=DIR 同樣比較 DIR 中的文件來決定是否需要備份
-P 等同于 --partial
--progress 顯示備份過程
-z, --compress 對(duì)備份的文件在傳輸時(shí)進(jìn)行壓縮處理
--exclude=PATTERN 指定排除不需要傳輸?shù)奈募J?br>--include=PATTERN 指定不排除而需要傳輸?shù)奈募J?br>--exclude-from=FILE 排除 FILE 中指定模式的文件
--include-from=FILE 不排除 FILE 指定模式匹配的文件
--version 打印版本信息本地拷貝
當(dāng) SRC 和 DES 路徑信息都不包含有單個(gè)冒號(hào) “:” 分隔符時(shí)就啟動(dòng)這種工作模式。
將jdk.tar.gz拷貝到rumenz目錄
> rsync -avhz jdk.tar.gz rumenz將src目錄拷貝到rumenz目錄
將/opt/src 目錄下的文件同步發(fā)送到rumenz目錄下。記住如果目標(biāo)地址沒有src目錄,rsync 會(huì)自動(dòng)創(chuàng)建該文件夾。
> rsync -azhv /opt/src rumenz/將src目錄下的所有文件拷貝到rumenz目錄
> rsync -azhv /opt/src/ rumenz/SRC 路徑末尾的 / 表示不自動(dòng)創(chuàng)建 DEST 文件夾,在 man rsync 中的解釋就是末尾的 / 表示”拷貝當(dāng)前目錄下的文件” ,而不是”拷貝當(dāng)前的目錄”.
遠(yuǎn)程拷貝
使用一個(gè)遠(yuǎn)程 shell 程序(如 rsh、ssh) 來實(shí)現(xiàn)將本地機(jī)器的內(nèi)容拷貝到遠(yuǎn)程機(jī)器。當(dāng) DES 路徑地址包含冒號(hào):或::分隔符時(shí)啟動(dòng)該模式。
將本地/opt/src/目錄下 所有文件同步備份到遠(yuǎn)程 /opt/rumenz/ 目錄
> rsync -avhz /opt/src/ [email protected]:/opt/rumenz/
將本地/opt/src/目錄同步備份到遠(yuǎn)程 /opt/rumenz/ 目錄
> rsync -avhz /opt/src [email protected]:/opt/rumenz/
將遠(yuǎn)程 /opt/rumenz目錄拷貝到rumenz目錄(ssh模式,單冒號(hào))
> rsync -avhz [email protected]:/opt/rumenz rumenz/
將遠(yuǎn)程 /opt/rumenz目錄下所有的文件拷貝到rumenz目錄(ssh模式,單冒號(hào))
> rsync -avhz [email protected]:/opt/rumenz/ rumenz/將遠(yuǎn)程 /opt/rumenz目錄拷貝到rumenz目錄(rsync模式,雙冒號(hào))
> rsync -avhz [email protected]::/opt/rumenz rumenz/
將遠(yuǎn)程 /opt/rumenz目錄下所有的文件拷貝到rumenz目錄(rsync模式,雙冒號(hào))
> rsync -avhz [email protected]::/opt/rumenz/ rumenz/
列遠(yuǎn)程機(jī)的文件列表
> rsync -v rsync://rumenz.com /www
rsync 使用非標(biāo)準(zhǔn)端口
經(jīng)常遇見的一種情況就是 ssh 更改了默認(rèn) 22 端口,這個(gè)時(shí)候就需要使用 -e 參數(shù)。
rsync 有兩種常用的認(rèn)證方式,一種為 rsync-daemon 方式,另外一種則是 ssh。
ssh 一般為首選,但當(dāng)遠(yuǎn)端服務(wù)器的 ssh 默認(rèn)端口被修改后,rsync 找不到一個(gè)合適的方法來輸入對(duì)方 ssh 服務(wù)端口號(hào)。
比如現(xiàn)在向機(jī)器
rumenz.com傳送文件,但此時(shí)rumenz.com的 ssh 端口已經(jīng)不是默認(rèn)的 22 端口。
> rsync -avz -e "ssh -p $port" /opt/src/ [email protected]:/opt/rumenz/
顯示備份進(jìn)度
> rsync -zhve ssh --progress jdk.tar.gz [email protected]:/opt/rumenz/
限制備份文件最大值
> rsync -zhve ssh --max-size='2000k' jdk.tar.gz [email protected]:/opt/rumenz/
備份結(jié)束后自動(dòng)刪除本地文件
> rsync --remove-source-files -zvh jdk.tar.gz [email protected]:/opt/rumenz/設(shè)置備份帶寬
> rsync --bwlimit=100 -avzhe ssh /opt/src/ [email protected]:/opt/rumenz/

