RSync實現文件備份同步:
簡介:
remote synchronize:一款實現遠程同步功能的軟件,它在同步文件的同時,可以保持原來文件的權限、時間、軟硬鏈接等附加信息, rsync是用 “rsync 算法”提供了一個客戶機 和遠程文件服務器的文件同步的快速方法,而且可以通過ssh方式來傳輸文件,這樣其保密性也非常好,另外它還是免費的軟件。因為rsync是一款如此有用 的軟件,所以很多Linux的發行版本都將它收錄在內了
特性:
- 能更新整個目錄
- 有選擇性的保持符號鏈鏈、硬鏈接、文件屬於、權限、設備以及時間等;
- 對於安裝來說,無任何特殊權限要求;
- 對於多個文件來說,內部流水線減少文件等待的延時;
- 能用rsh、ssh 或直接端口做為傳輸入端口;
- 支持匿名rsync 同步文件,是理想的鏡像工具;
架設rsync服務器:
1.安裝:
#yum方式安裝 #源碼方式,注意安裝gcc tar xvf rsync-xxx.tar.gz cd rsync-xxx ./configure --prefix=/usr/local make ;make install
rsync的主要有以下三個配置文件(需要手工創建):
/etc/rsyncd.conf(主配置文件)
/etc/rsyncd.secrets(密碼文件)
格式:user1:passwd1
出於安全目的,文件的屬性必需是只有屬主可讀。
chown root.root rsyncd.secrets #修改屬主
chmod 600 rsyncd.secrets
/etc/rsyncd.motd
定義rysnc服務器信息的,也就是用戶登錄信息,可以為空
類似ftp的歡迎頁面
示例:Welcome to use the mike.org.cn rsync services!
rsyncd.conf配置文件示例:
#Distributed under the terms of the GNU General Public License v2 #Minimal configuration file for rsync daemon #See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script #告訴進程寫到 /var/run/rsyncd.pid 文件中 pid file = /var/run/rsyncd.pid #指定運行端口,默認是873 port = 873 #指定服務器IP地址 address = 192.168.1.171 #服務器端傳輸文件時,要發哪個用戶和用戶組來執行,默認是nobody。 如果用nobody 用戶和用戶組,可能遇到權限問題 #uid = nobody #gid = nobody uid = root gid = root #一個安全選項 詳情自己去查查 use chroot = yes #read only 是只讀選擇,也就是說,不讓客戶端上傳文件到服務器上。還有一個 write only選項 read only = yes #在您可以指定單個IP,也可以指定整個網段,能提高安全性。格式是ip 與ip 之間、ip和網段之間、網段和網段之間要用空格隔開 #limit access to private LANs hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 hosts deny=* max connections = 5 motd file = /etc/rsyncd.motd #This will give you a separate log file #log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync #transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 #指定文件目錄所在位置 [home] path = /home list=yes #是否可以列出目錄 ignore errors # #忽略IO錯誤 #auth users必須是在服務器上存在的真實的系統用戶,如果你想用多個用戶以,號隔開,比如auth users = easylife,root auth users = root secrets file = /etc/rsyncd.secrets comment = This is RHEL 4 data #exclude是排除的意思,也就是說,要把/home目錄下的easylife和samba排除在外; easylife/和samba/目錄之間有空格分開 exclude = easylife/ samba/
模塊定義什么呢?
主要是定義服務器哪個目錄要被同步。每個模塊都要以[name]形式。這個名字就是在rsync 客戶端看到的名字,其實有點象Samba服務器提供的共享名。而服務器真正同步的 數據是通過path 指定的。我們可以根據自己的需要,來指定多個模塊。每個模塊要指定認證用戶,密碼文件、但排除並不是必須的
啟動rsync服務器:
/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
--config用於指定rsyncd.conf的位置,如果在/etc下可以不寫/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
rsync有六種不同的工作模式:
1. 拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式。
2.使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。
3.使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。
4. 從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啟動該模式。
5. 從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啟動該模式。
6. 列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。
-a 以archive模式操作、復制目錄、符號連接 相當於-rlptgoD
rsync中的參數
-r 是遞歸
-l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件;
-z 傳輸時壓縮;
-P 傳輸進度;
-v 傳輸時的進度等信息,和-P有點關系,自己試試。可以看文檔;
-e ssh的參數建立起加密的連接。
-u只進行更新,防止本地新文件被重寫,注意兩者機器的時鍾的同時
--progress是指顯示出詳細的進度情況
--delete是指如果服務器端刪除了這一文件,那么客戶端也相應把文件刪除,保持真正的一致
--password-file=/password/path/file來指定密碼文件,這樣就可以在腳本中使用而無需交互式地輸入驗證密碼了,這里需要注意的是這份密碼文件權限屬性要設得只有屬主可讀。
一些實例:
//注:server為modul名[server] //列出rsync 服務器上的所提供的同步內容 rsync --list-only root@192.168.145.5::server //列出目錄: rsync --list-only root@192.168.93.149::server //從服務端取數據(客戶端只會增加文件); rsync -avzP root@192.168.93.149::server rhel4home[本地目錄] //從服務端取數據(使客戶端的文件和服務端完全一致,會刪除客戶端多余的文件); rsync -avzP --delete root@192.168.93.149::server ./ //密碼從文件中讀取: 注意此時的密碼文件里面只需要寫密碼不要寫用戶名 和服務端的文件是不同的 rsync -avzP --delete --password-file=/etc/rsyncd.secrets root@192.168.93.149::server ./ //客戶端向服務端提交文件(只需要把目錄更換位置即可) rsync -avzP --delete --password-file=/kang/sercet ./ root@192.168.93.149::server