1. 程式人生 > >Linux 筆記 - 第十三章 Linux 系統日常管理之(四)Linux 數據備份工具 rsync 和網絡配置

Linux 筆記 - 第十三章 Linux 系統日常管理之(四)Linux 數據備份工具 rsync 和網絡配置

方法 target speed cnblogs rsync -av html links 布爾值 單個

博客地址:http://www.moonxy.com

一、前言

sync 命令是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機間的文件,可以理解為 remote sync(遠程同步)。rsync 使用所謂的 "rsync算法" 來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。rsync 不僅可以遠程同步數據(類似於 scp),還可以本地同步數據(類似於 cp),但不同於 cp 或 scp 的一點是,rsync 不會覆蓋以前的數據(如果數據已經存在),而是先判斷已經存在的數據和新數據的差異,只有當源數據或目標數據出現不一致時,才會把不相同的部分覆蓋。rsync 是一個功能非常強大的工具,其命令也有很多功能特色選項。如果沒有安裝 rsync 命令,可以使用 "yum install -y rsync" 安裝。

二、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]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

其中 SRC 表示源文件,DEST 表示目標文件。

對應於以上六種命令格式,rsync 有六種不同的工作模式:

1)拷貝本地文件。當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式。如:rsync -a /data /backup

2)使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。如:rsync -avz *.c foo:src

3)使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。如:rsync -avz foo:src/bar /data

4)從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啟動該模式。如:rsync -av [email protected]::www /databack

5)從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啟動該模式。如:rsync -av /databack [email protected]::www

6)列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。如:rsync -v rsync://192.168.78.192/www

-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD。
-r, --recursive 對子目錄以遞歸模式處理。
-v, --verbose 詳細模式輸出。
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件,不覆蓋更新的文件。
-l, --links 保留軟鏈接。
-L, --copy-links 想對待常規文件一樣處理軟鏈結。
-p, --perms 保持文件權限。
-o, --owner 保持文件屬主信息。
-g, --group 保持文件屬組信息。
-D, --devices 保持設備文件信息。
-t, --times 保持文件時間信息。
-e, --rsh=command 指定使用rsh、ssh方式進行數據同步。
-C, --cvs-exclude 使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件。
--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件。
--delete 刪除那些DST中有,SRC沒有的文件。
-P 等同於 --partial。
--progress 顯示備份過程。
-z, --compress 對備份的文件在傳輸時進行壓縮處理。
--exclude=PATTERN 指定排除不需要傳輸的文件模式。
--include=PATTERN 指定不排除而需要傳輸的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--config=FILE 指定其他的配置文件,不使用默認的rsyncd.conf文件。
--port=PORT 指定其他的rsync服務端口。
--progress 在傳輸時現實傳輸過程。
--password-file=FILE 從FILE中得到密碼。

這些還只是 rsync 的一部分選項,其中常用的有 a、v、L、--delete 和 --exclude 這幾個,其中 -a 選項等同於 -rlptgoD,-a 選項後面可以跟一個 --no-OPTION,表示關閉 -rlptgoD 中的某一個,比如 -a--no-l 等同於 -rptgoD。

三、rsync 應用實例

3.1 將本地的 test1 目錄直接復制成 test2 目錄

單機模式,直接將一個目錄的文件備份到另外一個目錄下,如下:

# rsync -avL test1/ test2/

以下為遠程模式,將源端看做客戶端,遠端看做服務器。

3.2 通過 ssh 的方式備份

首先啟動服務端的ssh服務:

# service sshd start

接下來就可以在客戶端使用rsync命令來備份服務端上的數據了,SSH方式是通過系統用戶來進行備份的,如下:

rsync -avL --progress -e ssh [email protected]:/www/* /databack/experiment/rsync
[email protected]‘s password:
receiving file list ...
5 files to consider
test/
a
0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
b
67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
c
0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
dd
100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
sent 96 bytes received 98190 bytes 11563.06 bytes/sec
total size is 100663363 speedup is 1024.19

上面的信息描述了整個的備份過程,以及總共備份數據的大小。

這個實例表示 pull(拉取),從服務器拉取文件到本地目錄,同樣也可以 push(推送),表示將本地文件推送到服務器上面來備份。如果不通過密鑰,則像上面一樣還要輸入密碼來交互。可以設置 ssh 密鑰,生成公鑰和私鑰,這樣在同步時,就不需要輸入密碼了,適合於 shell 腳本。

3.3 通過後臺服務的方式

默認安裝好rsync程序後,並不會自動創建rsync的主配置文件,需要手工來創建,其主配置文件為 "/etc/rsyncd.conf"。

配置文件 rsyncd.conf 由全局配置和若幹模塊配置組成。配置文件的語法為:

1)模塊以 [模塊名] 開始

2)參數配置行的格式是 name = value ,其中 value 可以有兩種數據類型:

字符串(可以不用引號定界字符串)

布爾值(1/0 或 yes/no 或 true/false)

3)以 # 或 ; 開始的行為註釋

4)\ 為續行符

全局參數

在文件中 [module] 之外的所有配置行都是全局參數。當然也可以在全局參數部分定義模塊參數,這時該參數的值就是所有模塊的默認值。

技術分享圖片

模塊參數

模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須為 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過 path 來指定的。可以根據自己的需要,來指定多個模塊,模塊中可以定義以下參數:

a. 基本模塊參數

技術分享圖片

b. 模塊控制參數

技術分享圖片

c. 模塊文件篩選參數

技術分享圖片

d. 模塊用戶認證參數

技術分享圖片

rsync 認證口令文件的權限一定是 600,否則客戶端將不能連接服務器。

rsync 認證口令文件中每一行指定一個 用戶名:口令 對,格式為:username:passwd

一般來說口令最好不要超過8個字符。若您只配置匿名訪問的 rsync 服務器,則無需設置上述參數。

e. 模塊訪問控制參數

技術分享圖片

客戶主機列表定義可以是以下形式:

單個IP地址。例如:192.168.0.1

整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0

可解析的單個主機名。例如:centos,centos.bsmart.cn

域內的所有主機。例如:*.bsmart.cn

"*"則表示所有。

多個列表項要用空格間隔。

f. 模塊日誌參數

技術分享圖片

設置了"log file"參數時,在日誌每行的開始會添加"%t [%p]"。

可以使用的日誌格式定義符如下所示:

%a - 遠程IP地址

%h - 遠程主機名

%l - 文件長度字符數

%p - 該次 rsync 會話的 PID

%o - 操作類型:”send” 或 “recv”

%f - 文件名

%P - 模塊路徑

%m - 模塊名

%t - 當前時間

%u - 認證的用戶名(匿名時是 null)

%b - 實際傳輸的字節數

%c - 當發送文件時,記錄該文件的校驗碼

創建該文件並添加如下內容:

vi /etc/rsyncd.conf

uid=root
gid=root
max connections=4
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.1.0/24

[www]
comment= backup web
path=/www
read only = no
exclude=test
auth users=work

創建密碼文件,采用這種方式不能使用系統用戶對客戶端進行認證,所以需要創建一個密碼文件,其格式為 "username:password",用戶名可以和密碼可以隨便定義,最好不要和系統帳戶一致,同時要把創建的密碼文件權限設置為600,這在前面的模塊參數做了詳細介紹。

編輯 secrets file 並保存後賦予 600 權限,如果權限不對,則不能完成同步,如下:

echo "work:abc123" > /etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd

啟動 rsyncd 服務,如下:

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

啟動後查看873端口是否啟動,如下:

# netstat-lnp |grep 873

完成以上工作,現在就可以對數據進行同步了,如下:

rsync -avz --progress work@192.168.1.121::www /databack/experiment/rsync

Password:
receiving file list ...
6 files to consider
./ files...
a
0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6)
b
67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6)
c
0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6)
dd
100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6)
sent 172 bytes received 98276 bytes 17899.64 bytes/sec
total size is 150995011 speedup is 1533.75

發現此時也要輸入密碼才能進行數據同步,這次我們添加一個選項 --password-file=/tmp/rsync.password ,這時當我們以work用戶登錄 rsync 服務器同步數據時,密碼將讀取 /tmp/rsync.password 這個文件。這個文件內容只是work用戶的密碼。

# touch /tmp/rsync.password
# chmod 600 /tmp/rsync.password 
# echo "123456" > /tmp/rsync.password 

然後執行如下同步命令時就不再需要輸入密碼了,適合於 shell 腳本:

# rsync -avzP  --password-file=/tmp/rsync.password work@172.16.1.135::www  /databack/experiment/rsync

附錄:

參考如下:

rsync配置

Linux 筆記 - 第十三章 Linux 系統日常管理之(四)Linux 數據備份工具 rsync 和網絡配置