簡介:###
rsync 是Linux系統下的數據鏡像備份工具,通過rsync 可以將本地的系統數據通過網絡備份到任何遠程主機上.
rsync 主頁地址:http:/rsync.samba.org
rsync特性:
- 可以鏡像保存整個目錄樹和文件系統
- 可以增量同步數據,文件傳輸效率高,因而同步時間很短
- 可以保持原有文件的權限,時間等屬性
- 加密傳輸數據,保證了數據的安全性
安裝rsync###
服務端和客戶端都需要安裝
./configure
make
make install
創建rsync 配置文件###
vi /etc/rsysncd.conf
uid=nobody
gid=nobody
max connections=10
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/run/rsyncd.log
[webdba]
path=/webdata
comment=webdba file
ignore errors
read only=true
list=false
uid=root
gid=root
auth users=backup
secrets file=/etc/server.pass
創建rsync連接用戶和密碼文件###
vi /etc/server.pass
backup:abc123
配置文件解釋
uid 當模塊傳輸文件時守護進程應該具有的用戶ID,默認值時 "nobody"
gid 當模塊傳輸文件時守護進程應該具有的用戶組ID,默認值時 "nobody"
max connections 最大并發連接數,以保護服務器,超過限制的連接數請求時,將被暫時限制。默認為0(沒有限制)
pid file 用來指定rsync 守護進程對應的PID文件路徑
lock file 用來支持max connections 的鎖文件,默認值時/var/run/rsyncd.lock
log file 指定rsync的日志輸出文件路徑
[webdba] 定義一個模塊的開始 webdba對應的是模塊名稱
path 用來指定需要備份的文件或目錄,必須填
list 當客戶端請求可以使用模塊列表時,該模塊可以被列出。默認為True,如果需要被隱藏,可以設置為false
auth users 用來定義可以連接到該模塊的用戶名,多個用戶用空格或者逗號分隔(需要注意這里的用戶不是Linux的系統用戶,沒有任何關系)
secrets file 指定一個包含 "用戶名:密碼" 格式的文件
服務端啟動 rsync 守護進程###
/usr/local/bin/rsync --daemon
ps -rf|grep rsync
root 20278 1 0 16:29 ? 00:00:00 /usr/local/bin/rsync --daemon
客戶端配置rsync###
創建一個 secrets file,此文件的內容為服務端的 rsyncd.conf 文件中 "auth users"選項指定用戶的密碼,僅為備份用戶的密碼,而這個文件的名稱以及路徑可以隨意
指定,只要在執行 rsync 同步時指定即可。
vi /etc/server.pass
abc123
在客戶端執行同步命令###
/usr/local/bin/rsync -vzrtopg --delete --progress backup@192.168.60.253::webdba /webdba --password-file=/etc/server.pass
"--vzrtopg" 選項中
v 是"—verbose",即詳細模式輸出
z 表示"--compress" 即對備份的文件在傳輸時進行壓縮處理
r 表示"--recursive",也就是對子目錄以遞 歸模式處理
t 即"--times",用來保持文件時間信息
o 即"--owner"用來保持文 件屬主信息
p 即"--perms"用來保持文件權限
g 即"--group"用來保持文件的屬組信息
"--delete" 選項指定以 rsync 服務端為基準進行數據鏡像同步,也就是要保持 rsync 服務端目錄與客戶端目錄的完全一致性。在這里是以服務器為基準進行同步。
"--progress" 選項用于顯示數據鏡像同步的過程。
"backup@192.168.60.253::webdba" 表示對服務器 192.168.60.253 中的 webdba 模塊進行備份,也就是指定備份的模塊,backup 表示使用"backup"這個用 戶對該模塊進行備份。
"/webdba"用于指定備份文件在客戶端機器上的存放路徑,也就是將備份的文件 存放在備份機的/webdba 目錄下。
"--password-file=/etc/server.pass" 用來指定客戶機上存放的密碼文件位置,這樣在客戶端執行同步命令時就無需輸入交互密碼了,注意,這個密碼文件的名稱和位置可以隨意指定,但是在客戶機上必須存在此文件,文件的內容僅僅為備份用戶的密碼,這里指的是 backup 的密碼。
rsync+ssh 實現文件備份###
當在兩臺計算機之間保持大型、復雜目錄結構的同步時候,使用 ssh+rsync 比 tar 或 wget 等方式都要快。而且可以做到精確同步。
首先需要利用 ssh 客戶端密鑰建立信任關系,然后直接調用 rsync 命令即可。
用法如下:
/usr/bin/rsync -avzPL --timeout=600 root@IP:/A/B/C /B/D/F
命令 參數 超時時間 遠程地址:遠程服務器的目錄 本地保存的目錄
觸發同步指令的方式有很多種,例如可以將同步指令放入客戶端系統的 crontab 守護進程, 設定同步時間,然后讓Linux 去觸發同步指令,自動完成數據備份。這種數據備份方式可以用于數據安全性要求不是很高的業務系統上。
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 打印版本信息
–address 綁定到特定的地址
–config=FILE 指定其他的配置文件,不使用默認的 rsyncd.conf 文件
–port=PORT 指定其他的 rsync 服務端口
–blocking-io 對遠程 shell 使用阻塞 IO
-stats 給出某些文件的傳輸狀態
–log-format=formAT 指定日志文件格式
–password-file=FILE 從 FILE 中得到密碼
–bwlimit=KBPS 限制 I/O 帶寬,KBytes per second
-h, –help 顯示幫助信息
常見 rsync 錯誤總結
- rsync: failed to connect to 118.244.216.177: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
原因:防火墻屏蔽了端口
解決:打開 873 段考
iptables -i INPUT -p tcp --dport 873 -j ACCEPT iptables -L
如果以上指令不行,可以直接停掉防火墻 /etc/init.d/iptables stop
- @ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
那估計是密碼文件沒有設置權限哦: chmod 600 /home/admin/security/rsync.pass 應該差不多就可以了
- @ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
這是因為密碼設錯了, 無法登入成功, 請檢查一下 rsyncd.scrt 中的密碼, 二端是否一致?
- password file must not be other-accessible continuing without password file Password:
這表示 rsyncd.scrt 的檔案權限屬性不對, 應設為 600。
- @ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
這通常是您的 rsyncd.conf 中的 path 路徑所設的那個目錄并不存在所致.請先用 mkdir 開 設好要備份目錄
- @ERROR: access denied to www from unknown (192.168.1.123) rsync: connection unexpectedly closed (0 bytes received so far) [receiver] rsync error: error in rsync protocol data stream (code 12) at io.c(359)
這是因為有兩個網段都需要同步該文件夾內容,但沒有在 hosts allow 后面添加另一個 IP 段 hosts allow = 192.168.1.0/24
改為
hosts allow = 192.168.1.0/24 192.168.2.0/24
重新啟動 rsync 服務,問題解決- @ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
client 端沒有設置/etc/rsync.pas 這個文件,而在使用 rsync 命令的時候,加了這個參數 --password-file=/etc/rsync.scrt
- rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device
(28)
*** Skipping any contents from this failed directory ***
磁盤空間滿了
- rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)
同步目錄的權限設置不對,改為 755
- rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5]
未啟動 xinetd 守護進程
[root@CC02 /]# service xinetd start
- rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory
xnetid 查找的配置文件位置默認是/etc 下,在/etc 下找不到 rsyncd.conf 文件
- rsync: failed to connect to 203.100.192.66: Connection timed out (110) rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
連接服務器超時,檢查服務器的端口 netstat –tunlp,遠程 telnet 測試
- 我需要在防火墻上開放哪些端口以適應 rsync?
rsync 可以直接通過 873 端口的 tcp 連接傳文件,也可以通過 22 端口的 ssh 來進行文件傳遞, 但也可以通過下列命令改變它的端口:
rsync --port 8730 otherhost:: 或者
rsync -e 'ssh -p 2002' otherhost:
- 如何通過 rsync 只復制目錄結構,忽略掉文件呢?
rsync -av --include '/' --exclude '' source-dir dest-dir
- 為什么我總會出現"Read-only file system"的錯誤呢? 看看是否忘了設"read only = no"了
- @ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器端的目錄不存在或無權限。創建目錄并修正權限可解決問題。
- @ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器端該模塊(tee)需要驗證用戶名密碼,但客戶端沒有提供正確的用戶名密碼,認證 失敗。提供正確的用戶名密碼解決此問題。- @ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器不存在指定模塊。提供正確的模塊名或在服務器端修改成你要的模塊以解決問題。