Linux 筆記 - 第十三章 Linux 系統平常管理之(四)Linux 中 rsync 工具和網絡配置

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

1、前言web

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

2、rsync 的命令格式shell

rsync [OPTION]... SRC DESTvim

rsync [OPTION]... SRC [USER@]host:DESTcentos

rsync [OPTION]... [USER@]HOST:SRC DEST服務器

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

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

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]ssh

其中 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 root@192.168.78.192::www /databack

5)從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。如:rsync -av /databack root@192.168.78.192::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 這幾個,一般 -av 或 -avL 連用,其中 -a 選項等同於 -rlptgoD,-a 選項後面能夠跟一個 --no-OPTION,表示關閉 -rlptgoD 中的某一個,好比 -a--no-l 等同於 -rptgoD。

3、rsync 應用實例

3.1 將本地的 test1 目錄直接複製成 test2 目錄

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

# rsync -avL test1/ test2/

如下爲遠程模式,將源端看作客戶端,遠端看作服務器。

3.2 經過 ssh 的方式備份

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

# service sshd start

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

rsync -avL --progress -e ssh work@192.168.1.121:/www/* /databack/experiment/rsync
work@172.16.78.192'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採用主從式構架,在應用上可分爲 PUSH 和 PULL 兩種主要模式,以因應不一樣的環境因素,進而達到部署的目的。

PULL模式

在同一網段的環境下,由備份主機向服務器進行同步並將數據備份過來以完成備份工做。這種模式是最廣泛被採用的部署方式。

如上,由備份主機啓動備份工做,向被備份端要求備份。可將備份時的負載大部分由備份主機承受。固然,PULL模式也支持跨網段或遠端進行同步備份工做,以下圖:

PUSH模式

PUSH模式的執行方式恰好與PULL模式偏偏相反。以下圖所示,在同一網段的環境下,由服務器主動發出同步要求並將數據同步至備份主機上,以完成備份的工做。

在實際中,這種模式一般被採用於較特殊的環境下,例如服務器被部署在防火牆內且沒法由外部連入,所以必須改由服務器主動將數據送至備份主機上。以下圖:

4、Linux 網絡配置

網絡知識包含的內容不少,此處只講解經常使用的設置 ip、設置主機名和設置 DNS 的操做。

4.1 ifconfig 查看網卡 IP

ifconfig 相似於 Windows 中的 ipconfig,後面不加任何選項和參數時,只打印當前網卡IP的信息(如子網掩碼、網關等)。也能夠跟某一個網卡名稱,如 eth0、eth1 等。使用 -a 選項,能夠列出全部的網卡信息。

查看幫助後有以下顯示:

If no arguments are given, ifconfig displays the status of the cur-rently active interfaces. If a single interface argument is given, it displays the status of the given interface only; if a single -a argu-ment is given, it displays the status of all interfaces, even those that are down. Otherwise, it configures an interface.

網卡的配置的文件爲 /etc/sysconfig/network-scripts/ifcfg-eth0,若是是網卡 eth1,則配置文件是/etc/sysconfig/network-scripts/ifcfg-eth1。修改配置文件後可使用 "service network restart" 來重啓網卡。

4.2 給一個網卡設定多個 IP

在 Linux 系統中,網卡是能夠設定多重 IP 的,必定要注意 DEVICE 要寫成 "eth0:1",以下:

[root@ryan ~]# cd /etc/sysconfig/network-scripts
[root@ryan network-scripts]# cp ifcfg-eth0 ifcfg-eth0\:1

修改 ifcfg-eth0:1 的配置:

[root@ryan network-scripts]# vim ifcfg-eth0\:1
DEVICE=eth0
HWADDR=00:0C:29:3C:83:B1
TYPE=Ethernet
UUID=56bf1079-0ba8-4227-ada7-b574493732f4
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.122
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8

而後重啓網絡服務:

[root@ryan network-scripts]# service network restart

再次查看網卡IP,以下:

[root@ryan network-scripts]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:3C:83:B1
          inet addr:192.168.1.121  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe3c:83b1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15703 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1800 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1103283 (1.0 MiB)  TX bytes:247293 (241.4 KiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:3C:83:B1
          inet addr:192.168.1.122  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

能夠看到多了一個 eth0:1。

4.3 查看網卡鏈接狀態

[root@ryan network-scripts]# mii-tool eth0
eth0: negotiated 100baseTx-FD, link ok

"link ok" 說明網卡爲鏈接狀態。若是顯示 "no link" 說明網卡壞了或者沒有鏈接網線。

4.4 更改主機名

安裝完系統以後,主機名默認爲 localhost,使用 hostname 命令能夠查看 Linux 的主機名。以下:

[root@ryan network-scripts]# hostname
ryan

CentOS 6.x 修改主機名的配置文件爲 /etc/sysconfig/network

[root@ryan network-scripts]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=ryan

CentOS 7.x 修改主機名的配置文件爲 /etc/hostname

4.5 設置 DNS

DNS 用來解析域名,Linux 下配置域名解析服務器的配置文件爲 /etc/resolv.conf

[root@ryan network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 8.8.8.8

resolv.conf 有固定的格式,必定要寫成 "nameserver IP" 的格式。

上面的是配置域名解析服務器,也能夠在本地直接配置域名解析,配置文件爲 /etc/hosts,手動添加 IP 和域名的映射關係,通常做爲臨時域名解析。以下:

[root@ryan ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.111  www.baidu.com

保存文件以後,再 ping www.baidu.com 就會返回 192.168.1.111的地址了,表示已經映射成功了。

/etc/hosts 的格式很簡單,每一行爲一條記錄,分紅兩部分,第1部分爲 IP,第2部分是域名,能夠配置多個域名,並用空格分開,如上四個域名:localhost localhost.localdomain localhost4 localhost4.localdomain4 都映射到 127.0.0.1。而且 /etc/hosts 文件的域名解析優先級高於配置的域名解析服務器文件 /etc/resolv.conf 的優先級。

附錄:

參考以下:

rsync配置

相關文章
相關標籤/搜索