Linux操作篇之備份(rsync)


一、rsync支持單向的完全備份和增量備份,兩者各有優劣(雙向數據同步差點)。rsync同步文件前需要先登錄到目標主機進行用戶身份驗證,身份認證的協議可以使用ssh協議和rsync協議。當使用ssh協議時,使用的是Linux的系統用戶;當使用rsync協議時,使用的是非系統用戶(虛擬用戶)。

二、rsync特性:

更新整個目錄樹和文件系統

可以有選擇的保留符號鏈接、硬鏈接、文件屬性、權限、設備以及時間等

安裝時,無任何特殊權限要求

多文件傳輸效率高

可以使用ssh或自定義端口進行傳輸。

 

軟件名稱:rsync。

三、使用ssh協議進行數據傳輸:

使用普通系統用戶,則需要普通用戶對目錄有相應的權限,可以使用acl賦予其用戶權限

下載格式:rsync -avz  系統用戶名@服務器地址:/服務器目錄/*  /本地目錄

-a  歸檔模式,遞歸並保留文件屬性

-v  顯示同步過程

-z  在進行文件傳輸時進行壓縮

rsync2下載rsync1中的文件

 

 

 上傳格式:rsync -avz    /本地目錄  系統用戶名@服務器地址:/服務器目錄/*

rsync2中的文件上傳到rsync1中

 

 

 

 可以使用密鑰的形式進行免密操作。

ssh-keygen -t rsa -b 2048

 ssh-copy-id root@目標服務器地址

兩台設備都需要操作,輸入一次密碼即可。再次傳輸時,不需輸入密碼。

 

 

 

四、使用rsync協議進行數據傳輸,這一項只需要在服務器端進行配置即可。

1、vi /etc/rsyncd.conf  配置主配置文件

address = 192.168.171.137    綁定服務器端地址
port 873              服務端口
log file = /var/log/rsyncd.log    日志的存放位置
pid = /var/run/rsyncd.pid       進程pid文件位置

[web]              共享名
        comment = backup       描述
        path = /test1         實際的文件目錄
        read only = no        是否允許讀取
        dont compress = *.gz *.bz2 *.zip  哪些文件不需要進行壓縮傳輸
        auth users = zhangsan      虛擬用戶名稱
        secrets file = /etc/rsyncd_users.db  虛擬用戶密碼的存放位置及密碼文件名稱

2、vi /etc/rsyncd_users.db  編寫用戶及對應的密碼

用戶名:密碼的形式

 

 

3、chmod  600 /etc/rsyncd_users.db  修改文件權限

4、rsync  --daemon   啟動服務

5、映射用戶對其備份的目錄有權限

  setfacl -m u:nobody:rwx  /test1

6、測試

下載格式:rsync -avz  rsync://用戶名@服務器端IP地址/共享名  /本地目錄

上傳格式:rsync -avz    /本地目錄   rsync://用戶名@服務器端IP地址/共享名 

 

 

 擴展:--delete 可以將服務器端中沒有的,但是在客戶端有的文件刪除。

 

 

 若要想免密傳輸,則需要在客戶端設置一環境變量。

export  RSYNC_PASSWORD=虛擬用戶密碼

 

 

 

 

五、rsync+inotifywait+腳本實現實時備份

1、下載安裝inotifywait

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

yum -y install gcc*

tar xzf inotify-tools-3.14.tar.gz

./configure && make && make install
2、編寫腳本  

#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1"    #檢測/test1目錄下,新建、刪除、寫入動作
action="rsync -avz  /test1/* root@192.168.171.138:/test2"    #將/test1目錄下的文件傳輸到另外一台設備的/test2目錄下,用戶是root。也可以使用普通系統用戶或虛擬用戶

$detection | while read directory event file      #while判斷是否收到監控記錄

do
        $action
done     

需要做免密驗證

 

六、實現雙向數據傳輸(unsion+inotify)

需要軟件包:unison-2.13.16.tar.gz   ocaml-3.10.0.tar.gz   inotify-tools-3.14.tar.gz

前兩個軟件一定要注意軟件版本。我是centos7.5安裝的,其他版本安裝失敗。

1、安裝inotify-tools-3.14.tar.gz

yum -y install gcc*
tar -xzf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install

 

2、安裝ocaml-3.10.0.tar.gz (unison依賴此軟件)

tar -xzf ocaml-3.10.0.tar.gz
cd ocaml-3.10.0
./configure   (** Objective Caml configuration completed successfully **  出現這個表示成功)
make world opt
make install

3、安裝unison-2.13.16.tar.gz

tar -xzf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYLE=text THREADS=true STATIC=true  (因為Makefile文件已經存在,不需要./configure。)
cp unison /usr/local/bin/
unison -version

 

 可以出現版本號,代表安裝成功。同樣的,另外一台也需要進行相同的安裝即可。

 

4、編寫腳本,使其可以自動檢測文件變化,自動進行文件同步。

#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1"
action="/usr/local/bin/unison -bash /test1/  ssh://192.168.171.138//test2/"

$detection | while read directory event file

do
        $action
done    
腳本兩邊都是上面的代碼,唯一不同點是:其中的 IP//目錄 是對端的 IP//目錄。

 

5、建立ssh互信。

ssh-keygen -t rsa -b 2048   (一直回車)

ssh-copy-id root@對端IP地址  (第一次需輸入一次yes)

輸入密碼即可

6、測試

有時候在一端刪除,另外一端還存在,這個沒有影響,當下次同步的時候,會自動同步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM