1. 程式人生 > 其它 >linux之rsync遠端同步檔案

linux之rsync遠端同步檔案

rsync全名Remote Sync,是類unix下資料映象的備份工具。可以方便的實現本地,遠端備份檔案,rsync最重要的一點是支援增量備份。

 

 

命令語法

 

 

rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]host:DESTrsync [OPTION]... [USER@]HOST:SRC DESTrsync [OPTION]... [USER@]HOST::SRC DESTrsync [OPTION]... SRC [USER@]HOST::DESTrsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

 

 

對應於以上六種命令格式,rsync有六種不同的工作模式:

 

 

  • 拷貝本地檔案。當SRC和DES路徑資訊都不包含有單個冒號":"分隔符時就啟動這種工作模式。如:rsync -a /data /backup

  • 使用一個遠端shell程式(如rsh、ssh)來實現將本地機器的內容拷貝到遠端機器。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。如:rsync -avz *.c foo:src

  • 使用一個遠端shell程式(如rsh、ssh)來實現將遠端機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。如:rsync -avz foo:src/bar /data

  • 從遠端rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含"::"分隔符時啟動該模式。如:rsync -av [email protected]::www /databack

  • 從本地機器拷貝檔案到遠端rsync伺服器中。當DST路徑資訊包含"::"分隔符時啟動該模式。如:rsync -av /databack [email protected]::www

  • 列遠端機的檔案列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機資訊即可。如:rsync -v rsync://192.168.1.110/www

 

 

如果主機和path路徑之間使用單個冒號隔開,表示使用的是遠端shell通訊方式,而使用雙冒號隔開的則表示的是連線rsync daemon

 

 

常用幾個引數

 

 

- -v verbose詳細輸出- -a 遞迴模式,遞迴方式傳輸檔案,並保持連線,許可權,使用者和組,時間資訊- -z 壓縮傳輸- -h human-readable, 輸出友好- -u 跳過已經存在的檔案

 

 

rsync 全部引數

 

 

-v, --verbose 詳細模式輸出-q, --quiet 精簡輸出模式-c, --checksum 開啟校驗開關,強制對檔案傳輸進行校驗-a, --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於 -rlptgoD-r, --recursive 對子目錄以遞迴模式處理-R, --relative 使用相對路徑資訊-b, --backup 建立備份,也就是對於目的已經存在有同樣的檔名時,將老的檔案重新命名為~filename。可以使用 --suffix 選項來指定不同的備份檔案字首。--backup-dir 將備份檔案(如~filename) 存放在在目錄下。-suffix=SUFFIX 定義備份檔案字首-u, --update 僅僅進行更新,也就是跳過所有已經存在於 DST,並且檔案時間晚於要備份的檔案。(不覆蓋更新的檔案)-l, --links 保留軟鏈結-L, --copy-links 想對待常規檔案一樣處理軟鏈結--copy-unsafe-links 僅僅拷貝指向 SRC 路徑目錄樹以外的鏈結--safe-links 忽略指向 SRC 路徑目錄樹以外的鏈結-H, --hard-links 保留硬鏈結-p, --perms 保持檔案許可權-o, --owner 保持檔案屬主資訊-g, --group 保持檔案屬組資訊-D, --devices 保持裝置檔案資訊-t, --times 保持檔案時間資訊-S, --sparse 對稀疏檔案進行特殊處理以節省 DST 的空間-n, --dry-run 現實哪些檔案將被傳輸-W, --whole-file 拷貝檔案,不進行增量檢測-x, --one-file-system 不要跨越檔案系統邊界-B, --block-size=SIZE 檢驗演算法使用的塊尺寸,預設是 700 位元組-e, --rsh=COMMAND 指定使用 rsh、ssh 方式進行資料同步--rsync-path=PATH 指定遠端伺服器上的 rsync 命令所在路徑資訊-C, --cvs-exclude 使用和 CVS 一樣的方法自動忽略檔案,用來排除那些不希望傳輸的檔案--existing 僅僅更新那些已經存在於 DST 的檔案,而不備份那些新建立的檔案--delete 刪除那些 DST 中 SRC 沒有的檔案--delete-excluded 同樣刪除接收端那些被該選項指定排除的檔案--delete-after 傳輸結束以後再刪除--ignore-errors 及時出現 IO 錯誤也進行刪除--max-delete=NUM 最多刪除 NUM 個檔案--partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸--force 強制刪除目錄,即使不為空--numeric-ids 不將數字的使用者和組 ID 匹配為使用者名稱和組名--timeout=TIME IP 超時時間,單位為秒-I, --ignore-times 不跳過那些有同樣的時間和長度的檔案--size-only 當決定是否要備份檔案時,僅僅察看檔案大小而不考慮檔案時間--modify-window=NUM 決定檔案是否時間相同時使用的時間戳視窗,預設為 0-T --temp-dir=DIR 在 DIR 中建立臨時檔案--compare-dest=DIR 同樣比較 DIR 中的檔案來決定是否需要備份-P 等同於 --partial--progress 顯示備份過程-z, --compress 對備份的檔案在傳輸時進行壓縮處理--exclude=PATTERN 指定排除不需要傳輸的檔案模式--include=PATTERN 指定不排除而需要傳輸的檔案模式--exclude-from=FILE 排除 FILE 中指定模式的檔案--include-from=FILE 不排除 FILE 指定模式匹配的檔案--version 列印版本資訊

 

 

本地拷貝

 

 

當 SRC 和 DES 路徑資訊都不包含有單個冒號 “:” 分隔符時就啟動這種工作模式。

 

 

jdk.tar.gz拷貝到rumenz目錄

 

 

> rsync -avhz jdk.tar.gz rumenz

 

 

src目錄拷貝到rumenz目錄

 

 

/opt/src 目錄下的檔案同步傳送到rumenz目錄下。記住如果目標地址沒有src目錄,rsync 會自動建立該資料夾。

 

 

> rsync -azhv /opt/src rumenz/

 

 

src目錄下的所有檔案拷貝到rumenz目錄

 

 

> rsync -azhv /opt/src/ rumenz/

 

 

SRC 路徑末尾的 / 表示不自動建立 DEST 資料夾,在 man rsync 中的解釋就是末尾的 / 表示”拷貝當前目錄下的檔案” ,而不是”拷貝當前的目錄”.

 

 

遠端拷貝

 

 

使用一個遠端 shell 程式(如 rsh、ssh) 來實現將本地機器的內容拷貝到遠端機器。當 DES 路徑地址包含冒號:::分隔符時啟動該模式。

 

 

將本地/opt/src/目錄下 所有檔案同步備份到遠端 /opt/rumenz/ 目錄

 

 

> rsync -avhz /opt/src/ [email protected]:/opt/rumenz/

 

 

將本地/opt/src/目錄同步備份到遠端 /opt/rumenz/ 目錄

 

 

> rsync -avhz /opt/src [email protected]:/opt/rumenz/

 

 

將遠端 /opt/rumenz目錄拷貝到rumenz目錄(ssh模式,單冒號)

 

 

> rsync -avhz [email protected]:/opt/rumenz rumenz/

 

 

將遠端 /opt/rumenz目錄下所有的檔案拷貝到rumenz目錄(ssh模式,單冒號)

 

 

> rsync -avhz [email protected]:/opt/rumenz/ rumenz/

 

 

將遠端 /opt/rumenz目錄拷貝到rumenz目錄(rsync模式,雙冒號)

 

 

> rsync -avhz [email protected]::/opt/rumenz rumenz/

 

 

將遠端 /opt/rumenz目錄下所有的檔案拷貝到rumenz目錄(rsync模式,雙冒號)

 

 

> rsync -avhz [email protected]::/opt/rumenz/ rumenz/

 

 

列遠端機的檔案列表

 

 

> rsync -v rsync://rumenz.com /www

 

 

rsync 使用非標準埠

 

 

  • 經常遇見的一種情況就是 ssh 更改了預設 22 埠,這個時候就需要使用 -e 引數。

  • rsync 有兩種常用的認證方式,一種為 rsync-daemon 方式,另外一種則是 ssh。

  • ssh 一般為首選,但當遠端伺服器的 ssh 預設埠被修改後,rsync 找不到一個合適的方法來輸入對方 ssh 服務埠號。

  • 比如現在向機器rumenz.com傳送檔案,但此時rumenz.com的 ssh 埠已經不是預設的 22 埠。

 

 

> rsync -avz -e "ssh -p $port" /opt/src/ [email protected]:/opt/rumenz/

 

 

顯示備份進度

 

 

> rsync -zhve ssh --progress jdk.tar.gz [email protected]:/opt/rumenz/

 

 

限制備份檔案最大值

 

 

> rsync -zhve ssh --max-size='2000k' jdk.tar.gz [email protected]:/opt/rumenz/

 

 

備份結束後自動刪除本地檔案

 

 

> rsync --remove-source-files -zvh jdk.tar.gz [email protected]:/opt/rumenz/

 

 

設定備份頻寬

 

 

> rsync --bwlimit=100 -avzhe ssh /opt/src/ [email protected]:/opt/rumenz/