linux下的數據備份工具rsync

Rsync 是一個 Unix 系統下的文件同步和傳輸工具。Rsync不只能夠遠程同步數據(相似於scp),固然還能夠本地同步數據(相似於cp),但不一樣於cp或scp的一點是,rsync不像cp/scp同樣會覆蓋之前的數據(若是數據已經存在),它會先判斷已經存在的數據和新數據有什麼不一樣,只有不一樣時纔會把不一樣的部分覆蓋掉。linux

1,linux安裝rsnyncvim

# yum install -y rsync

啓動rsync安全

# rsync --daemon --config=/etc/rsyncd.conf

2,rsync的經常使用選項bash

-a 歸檔模式,表示以遞歸方式傳輸文件,並保持全部屬性,等同於-rlptgoD, -a選項後面能夠跟一個 --no-OPTION 這個表示關閉-rlptgoD中的某一個例如 -a--no-l 等同於-rptgoD服務器

-r 對子目錄以遞歸模式處理,主要是針對目錄來講的,若是單獨傳一個文件不須要加-r,可是傳輸的是目錄必須加-r選項ssh

-v 打印一些信息出來,好比速率,文件數量等ide

-l 保留軟鏈結工具

-L 向對待常規文件同樣處理軟鏈結,若是是SRC中有軟鏈接文件,則加上該選項後將會把軟鏈接指向的目標文件拷貝到DST測試

-p 保持文件權限ui

-o 保持文件屬主信息

-g 保持文件屬組信息

-D 保持設備文件信息

-t 保持文件時間信息

--delete 刪除那些DST中SRC沒有的文件

--exclude=PATTERN 指定排除不須要傳輸的文件,等號後面跟文件名,能夠是萬用字符模式(如*.txt)

--progress 在同步的過程當中能夠看到同步的過程狀態,好比統計要同步的文件數量、同步的文件傳輸速度等等

-u 加上這個選項後將會把DST中比SRC還新的文件排除掉,不會覆蓋

3,rsync語法

rsync [OPTION]... SRC DEST

rsync [OPTION]... SRC [USER@]HOST:DEST

rsync [OPTION]... [USER@]HOST:SRC DEST

rsync [OPTION]... [USER@]HOST::SRC DEST

rsync [OPTION]... SRC [USER@]HOST::DEST



舉例:

本地拷貝:

rsync [OPTION]... SRC DEST       本地拷貝

# rsync -av 123.txt /tmp/
sending incremental file list
123.txt
sent 71 bytes  received 31 bytes  204.00 bytes/sec
total size is 0  speedup is 0.00

上面例子表示把當前目錄下的123.txt同步到/tmp/目錄下。

也能夠更改目標文件的名字,將123.txt 改成234.txt

# rsync -av 123.txt /tmp/234.txt


遠程拷貝,(1個冒號)就屬於經過ssh的方式拷貝

rsync [OPTION]... SRC [USER@]HOST:DEST        遠程拷貝 本地->遠程

# rsync -av 123.txt 192.168.0.101:/data/
The authenticity of host '192.168.0.101 (192.168.0.101)' can't be established.
RSA key fingerprint is b4:54:5f:73:ec:c2:60:5f:c3:79:c0:f9:51:e9:ac:e5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.101' (RSA) to the list of known hosts.
root@192.168.0.101's password:

沒有加user@host 若是不加默認指的是root.

首次鏈接會提示是否要繼續鏈接,咱們輸入yes繼續,當創建鏈接後,須要輸入密碼。若是手動去執行這些操做還好,但如果寫在腳本中怎麼辦?這就涉及到添加信任關係了,該部份內容稍後會詳細介紹。


rsync [OPTION]... [USER@]HOST:SRC DEST        遠程拷貝 遠程->本地

# rsync -av  192.168.0.101:/data/123.txt  /tmp


經過ssh方式遠程拷貝,若是想不用手動輸入密碼,那麼須要使用ssh的密鑰對。

ssh的無密碼登錄:

製做認證文件

1:公鑰  rsa.pub

2:私鑰  rsa

# ssh-keygen

 一路回車

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

51:e9:2a:a0:76:a2:ef:f2:51:88:52:ae:25:b8:5f:7c root@test1

# scp /root/.ssh/id_rsa.pub 192.168.0.101:/root/.ssh/authorized_keys     

把公鑰發送給要遠程的ip機器,更名爲authorized_keys,而後ssh鏈接就再也不須要密碼驗證了。


遠程拷貝,(2個冒號)就屬於經過後臺服務的方式拷貝

rsync [OPTION]... [USER@]HOST::SRC DEST

rsync [OPTION]... SRC [USER@]HOST::DEST


這種方式能夠理解成這樣,在遠程主機上創建一個rsync的服務器,在服務器上配置好rsync的各類應用,而後本機做爲rsync的一個客戶端去鏈接遠程的rsync服務器。下面介紹如何去配置一臺rsync服務器。

1,創建並配置rsync的配置文件 /etc/rsyncd.conf 

# vim /etc/rsyncd.conf
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
#address=192.168.0.10
[test]
path=/root/rsync
use chroot=true
max connections=4
ignore errors
read only=yes
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.0.101

其中配置文件分爲兩部分:所有配置部分和模塊配置部分,全局部分就是幾個參數而已,就像上面的rsyncd.conf中port, log file, pid file, address這些都屬於全局配置,而[test]如下部分就是模塊配置部分了。一個配置文件中能夠有多個模塊,模塊名自定義。其實模塊中的一些參數例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow均可以配置成全局的參數。上面的配置文件中給出的參數並非全部的,你能夠經過man rsyncd.conf 得到更多信息。下面就簡單解釋一下這些參數的意義:

port     指定在哪一個端口啓動rsyncd服務,默認是873

log file 指定日誌文件

pid file 指定pid文件,這個文件的做用涉及到服務的啓動以及中止等進程管理操做

address  指定啓動rsyncd服務的IP,假如你的機器有多個IP,就能夠指定其中一個啓動rsyncd服務,默認是在所有IP上啓動

[test] 指定模塊名,自定義

path 指定數據存放的路徑

use chroot true|false 默認是true,意思是在傳輸文件之前首先chroot到path參數所指定的目錄下。這樣作的緣由是實現額外的安全防禦,可是缺點是須要以roots權限,而且不能備份指向外部的符號鏈接所指向的目錄文件。默認狀況下chroot值爲true,若是你的數據當中有軟鏈接文件的話建議設置成false。

max connections 指定最大的鏈接數,默認是0即沒有限制

ignore errors  忽略同步中出現的錯誤

read only yes   定義訪問方式爲只讀

list 指定當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定爲true則列出,false則隱藏

uid/gid 指定傳輸文件時,以哪一個用戶/組的身份傳輸

auth users 指定傳輸時要使用的用戶名

secrets file 指定密碼文件,該參數連同上面的參數若是不指定則不使用密碼驗證

hosts allow 指定被容許鏈接該模塊的主機,能夠是IP或者網段,若是是多個,之間用空格隔開


編輯rsyncd.passwd密碼文件,格式爲用戶名:密碼保存後要賦予600權限,若是權限不對,不能完成同步 

# cat /etc/rsyncd.passwd

test:test123

修改權限

# chmod 600 /etc/rsyncd.passwd

啓動rsyncd服務 

# rsync --daemon --config=/etc/rsyncd.conf


到另外一臺機器上測試(必須得是hosts allow中容許鏈接的IP地址) 

# rsync -avL test@192.168.0.10::test /tmp/test5/

Password:

receiving incremental file list

created directory /tmp/test5

./

1

1.txt

2

2.txt

3

4

注意:這樣同步仍是須要輸入密碼,若是不想輸入密碼,有兩個方法

方法一:同步命令指定密碼文件

在客戶端上(注意,並非在rsync服務端上)編輯密碼文件

vim /etc/pass   加入test用戶的密碼:

test123

修改密碼文件的權限:(權限不對會報錯)

# chmod 600 /etc/pass

在同步的時候,指定一下密碼文件,就能夠省去輸入密碼的步驟了:

# rsync -avL test@192.168.0.10::test /tmp/test8/ --password-file=/etc/pass

receiving incremental file list

created directory /tmp/test8

./

1

1.txt

2

2.txt

3

4

test.txt

sent 190 bytes  received 451 bytes  1282.00 bytes/sec

total size is 0  speedup is 0.00


方法二:在rsync服務器端不指定用戶

在rsync服務端修改配置文件rsyncd.conf, 去掉關於認證帳戶的配置項(auth user 和 secrets file這兩行):

# sed -i 's/auth users/#auth users/;s/secrets file/#secrets file/' /etc/rsyncd.conf

上面的這個命令是把 「auth users」 和 「secrets file」 兩行的最前面加一個 「#」, 這樣就把這兩行註釋掉,使其失去意義。而後咱們再到客戶端主機上測試:

# rsync -avL 192.168.0.10::test/test1/ /tmp/test9/

receiving incremental file list

created directory /tmp/test9

./

1

1.txt

2

2.txt

3

4

test.txt

sent 162 bytes  received 410 bytes  1144.00 bytes/sec

total size is 0  speedup is 0.00

注意,這裏不用再加test這個用戶了,默認是以root的身份拷貝的,如今已經不須要輸入密碼了。

相關文章
相關標籤/搜索