歡迎您光臨本站 註冊首頁

小談rsync

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

大家好,我是書記.今天給大家介紹一下Rsync的使用. Rsync--Remote Sync(遠程同步)是一個具有快速同步文件和傳輸文件的工具,主要用於快速,安全,高效的數據備份.此工具具有傳輸新增或更該過的文件的特性,而且支持數據壓縮,因此提高了文件傳輸和同步的速度.配置用於Rsync同步的遠程主機,常見的有兩種服務實現方式:第一,基於遠程shell的程序,比如ssh;第二,其程序自身的“daemon”伺服器模式.

下面,我們兩詳細的說明兩種服務實現方式; 1.使用基於OPENSSH的服務方式是,遠程主機(伺服器端)不需要設置rsync, 只需要安裝Openssh-server,啟動服務即可.特點:可以直接使用linux系統用戶進行驗證,很方便靈活. 2.基於rsync的daemon模式 使用rsync程序的伺服器模式時,要設置rsync程序配置文件,rsyncd.conf.特點:可以使用匿名的方式或者是基本基於文本文件的用戶資料庫進行驗證. 在配置服務之前我們一定要搞清楚一些概念性的東西,將伺服器端(遠程主機)的備份源目錄同步到本地上,稱之為下行同步,簡單的說就是下載;將本地上的備份源目錄同步到伺服器端中,稱之為上行同步,或者說是上傳.Rsync程序同樣可以在本地目錄之間進行同步的,但是,切記一點:rsync程序不可以為遠程主機之間進行目錄的同步工作. 命令的基本格式:rsync [option] src dst Rsync服務程序為我們提供了豐富的參數設置,正是由於參數才是的rsync如此的強悍.下面來詳細的介紹每個參數的含義和用法;

-H 保留源文件的硬鏈接文件 -r 遞歸模式,包含目錄及子目錄的所有信息 -z 在傳輸文件的同時進行壓縮 -v 顯示同步過程的信息 -t 保留文件的時間標記 -o 保留文件的屬主標記 -p 保留了文件的許可權標記 -D 保留了設備文件和一些特殊的文件 -S 對零散文件的處理 -g 保留了文件的屬組信息 --delete 刪除目標目錄中有而源目錄中沒有的信息 是不是命令選項很多呀,不用擔心,其實呢還有一個超強的命令選項, -a 即歸檔的模式,保留了文件原有的屬性,許可權,屬主,文件鏈接等信息,就等同於使用了“-ogrlptD” 在使用rsync command的時候,由於遠程主機使用的服務方式不同,那麼伺服器端主機地址和備份源之間就會採用不同的分隔符形式. 當使用的是SSH-SERVER服務時,使用一個冒號“:”分隔; 當使用的是rsync –-daemon服務時,使用兩個冒號“::”分隔或者是使用“/”分隔,同時在主機地址前加上rsync://前綴.(“:”是使用在遠處主機和源目錄之間的.)OK,下面我們就來看看具體的例子 1.依賴於SSH服務的rsync的配置詳細信息: 檢查軟體包的安裝:(此作為伺服器端,iP192.168.0.110,源目錄為/data) [root@server ~]# rpm -qa | grep ssh && rpm -qa | grep rsync openssh-clients-4.3p2-36.el5 openssh-server-4.3p2-36.el5 openssh-askpass-4.3p2-36.el5 openssh-4.3p2-36.el5 rsync-2.6.8-3.1 默認情況下這兩款軟體包都是默認安裝的. 本地的主機地址為192.168.0.111,目標目錄/tmp,我們來實施一下同步;

源目錄的文件信息:(192.168.0.110) [root@server ~]# ll /data/ | nl 1 總計 36 2 drwxr-xr-x 5 root root 4096 06-02 10:21 ccie.rar 3 drwxr-xr-x 2 root root 4096 06-02 10:22 ccna.rar 4 drwxr-xr-x 2 root root 4096 06-02 10:21 ccnp.tar 5 -rw-r--r-- 1 root root 3201 06-02 10:19 H3CSE.pdf 6 -rw-r--r-- 1 root root 8510 06-02 10:18 H3CTE.pdf 7 drwxr-xr-x 3 root root 4096 06-02 10:08 Linux 8 -rw-r--r-- 1 root root 2745 06-02 10:17 vnc.doc 可是近段時間我更新了網路技術資料包括ccie和ccnp; 本地同步遠程主機:(紫色,藍色,紅色分別代表了選項,源目錄,目標目錄) [root@mail ~]# rsync -avzH root@192.168.0.110:/data /tmp root@192.168.0.110's password: receiving file list ... done data/ccie.rar/ data/ccie.rar/BGP/ data/ccie.rar/MPLS/ data/ccie.rar/QOS/ data/ccie.rar/VPN/ data/ccnp.tar/ data/ccnp.tar/gvrp/ data/ccnp.tar/rstp/ data/ccnp.tar/stp/ data/ccnp.tar/vlan-qos/ data/ccnp.tar/vtp/ sent 86 bytes received 532 bytes 176.57 bytes/sec total size is 9398927 speedup is 15208.62 由此說明了rsync程序具有同步新增或更改的文件信息. 當我們進行連接是會提示我們輸入用戶名密碼,那麼如何實現不輸入密碼直接進入呢?大家都知道SSH連接是有兩種驗證方式:用戶口令認證,密鑰認證. 我們完全可以通過使用密鑰的方式來實現此效果. 在本地主機上執行: [root@mail ~]# ssh-keygen –d 或者 ssh-keygen –t rsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 7b:0c:ac:47:01:fe:3c:6a:57:ad:11:62:f4:0c:36:db root@mail.server.com 在這裡我沒對私鑰實施保護口令,建議設置!然後將生成的公鑰上傳至遠程主機(

192.168.0.110)/root/.ssh中.一旦公鑰被上傳至遠程主機中就會更名為authorized_keys,我們有兩種方式進行操作:1,默認上傳自動生成;2,手動設置; 1.[root@mail ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub root@192.168.0.110 21 root@192.168.0.110's password: Now try logging into the machine, with "ssh 'root@192.168.0.110'", and check in: .ssh/authorized_keys. to make sure we haven't added extra keys that you weren't expecting. 2.[root@mail~]#scp /root/.ssh/id_rsa.pub root@192.168.0.110:/root/.ssh /authorized_keys 效果驗證:(更新了unix,ccie,ccnp的信息) [root@mail ~]# rsync -avzH root@192.168.0.110:/data /tmp receiving file list ... done data/Linux/ data/Linux/rsync/ data/ccie.rar/ data/ccie.rar/vlan-router/ data/ccnp.tar/ data/ccnp.tar/mul/ 2.依賴於rsync –-daemon服務模式 1.默認情況下/etc/rsyncd.conf配置文件是不存在的,我們需要手工的建立. [root@server ~]# cat /etc/rsyncd.conf uid = root #指定訪問用戶 gid = root #指定訪問組 use chroot = no #禁止chroot(不可連接后切換用戶) list = yes #允許訪問目錄列表 address = 192.168.0.110 #監聽服務的IP地址 max connections = 10 #最大的連接數為10 log file = /var/log/rsyncd.log #存放日誌文件的路徑 pid file = /var/run/rsyncd.pid #存放進程標識文件的路徑 hosts allow = 192.168.0.0/24 #允許訪問rsync 服務的地址範圍 [data] #此為發布共享的模塊名 path = /data 共享模塊的路徑 comment = It's my study data! #註釋信息 read only = yes #標識為可讀 auth users = root #

授權的用戶名 secrets file = /etc/rsyncd.pass #授權用戶的密碼文件位置 授權用戶密碼文件: [root@server ~]# cat /etc/rsyncd.pass root:Linux%@!shuji192 chmod 600 /etc/rsyncd.pass //設置了用戶讀寫的許可權. (本地主機必須要建立此文件,只需要輸入密碼即可èLinux%@!shuji192) 本地主機(CLIENT): [root@mail ~]# cat /etc/rsyncd.pass Linux%@!shuji192 2.啟動rsync服務程序: 啟動rsync服務有兩種方式:獨立守護進程的啟動和依賴於xinetd超級服務. One:獨立守護進程: [root@server ~]# rsync –daemon //啟動服務命令 [root@server ~]# echo "/usr/bin/rsync --daemon &" >> /etc/rc.local //開機自動運行服務 Two:xinetd 超級管理進程 # default: off # description: The rsync server is a good addition to an ftp server, as it # allows crc checksumming etc. service rsync { disable = yes #yes改為no 重啟服務即可 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure = USERID } [root@server ~]# service xinetd restart 停止 xinetd: [確定] 啟動 xinetd: [確定] [root@server ~]# chkconfig --list rsync rsync 啟用 下面我們來進行訪問: [root@mail ~]# rsync -avH root@192.168.0.110::/data /tmp ERROR: The remote path must start with a module name not a / rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8] 為什麼會出現錯誤信息呢?一定記住在

rsync –-daemon 模式中,目錄名對應遠程主機所發布的模塊名,驗證用戶為/etc/rsyncd.pass中定義的用戶. 改過後的效果: [root@mail ~]# rsync -avH root@192.168.0.110::data /tmp Password: receiving file list ... done ./ H3CSE.pdf H3CTE.pdf vnc.doc Linux/ Linux/RHCA/ Linux/RHCA/xunihua/ Linux/rsync/ ccie.rar/ ccie.rar/tonghua.mp3 ccie.rar/BGP/ ccie.rar/MPLS/ ccie.rar/QOS/ ccie.rar/VPN/ ccie.rar/vlan-router/ ccna.rar/ ccna.rar/haoren ccnp.tar/ ccnp.tar/oldboy.mp3 ccnp.tar/gvrp/ ccnp.tar/mul/ ccnp.tar/rstp/ ccnp.tar/stp/ ccnp.tar/vlan-qos/ ccnp.tar/vtp/ sent 344 bytes received 9401033 bytes 989618.63 bytes/sec total size is 9398927 speedup is 1.00 或者使用[root@mail ~]# rsync -avH rsync://root@192.168.0.110/data /tmp命令,效果是一模一樣的~~~ 3.rsync常用命令 1. 查看rsync伺服器的備份目錄列表 [root@mail ~]# rsync rsync://192.168.0.110 data It's my study data! 就一個共享目錄,但不給力了,我想看看共享目錄裡面的詳細信息, [root@mail ~]# rsync rsync://root@192.168.0.110/data Password: drwxr-xr-x 4096 2011/06/02 10:20:13 . -rw-r--r-- 3201 2011/06/02 10:19:41 H3CSE.pdf -rw-r--r-- 8510 2011/06/02 10:18:52 H3CTE.pdf -rw-r--r-- 2745 2011/06/02 10:17:53 vnc.doc drwxr-xr-x 4096 2011/06/02 12:04:50 Linux drwxr-xr-x 4096 2011/06/02 11:00:50 ccie.rar drwxr-xr-x 4096 2011/06/02 10:22:40 ccna.rar drwxr-xr-x 4096 2011/06/02 11:01:06 ccnp.tar 上傳和下載的命令就不多做介紹了,上面的內容中已經清楚了吧~~~ 還有一個大家一定很感興趣的??? 由於工作的需求,而且對於同步數據的實時性要求不是很高的冗餘備份,我想實現同步數據的自動化,該如何辦呢?

我們可以結合linux系統中的crond服務來實現數據同步的自動化. 關於crond 和 at 兩種命令的區別,大家因該很熟悉了,本質的區別在於有無周期性. 下面我們來建立同步數據的shell腳本:(在本地主機中設置(192.168.1.111,hostname=mail),這個過程是屬於下行同步) [root@mail ~]# cat D-sync.sh #!/bin/bash HOST="192.168.0.110" ARGS="-avH" SRC="data/" DST="/tmp/" USER="root" export RSYNC_PASSWORD="Linux%@!shuji192" /usr/bin/rsync $ARGS $USER@$HOST::$SRC $DST [root@mail ~]# crontab -l */20 * * * * ./D-sync.sh //任務計劃表,當然不要忘記了給予執行的許可權,以及crond服務的啟動. Chmod u x D-sync.sh Service crond restart OK !小弟水平有限,請多多指教~~

本文出自 「唐Sir」 博客,謝絕轉載!


[火星人 ] 小談rsync已經有809次圍觀

http://coctec.com/docs/linux/show-post-48347.html