rsync 參數說明及使用參數筆記
rsync 是一款開源的、快速的、多功能的、可實現全量及增量的本地或遠程數據鏡像同步備份的優秀工具。
1.1.1 語法格式
三種模式:
1)本地模式
rsync [選項] [源文件] [目標文件]
2)通過遠程shell訪問模式:
拉取(pull) :
rsync [選項] 用戶@主機:源文件 [目標文件]
推送(push) :
rsync [選項] [源文件] 用戶@主機:源文件
3)rsync 守護進程模式
拉取 :
rsync [選項] 用戶@主機::源文件 [目標文件]
rsync [選項] rsync://用戶@主機:端口/源文件 [目標文件]
推送 :
rsync [選項] [源文件] 用戶@主機:源文件
rsync [選項] [源文件] rsync://用戶@主機:端口/源文件 [目標文件]
1.1.2 選項說明
-v |
詳細模式輸出 |
-z |
傳輸時進行壓縮以提高傳輸效率 |
-a |
以遞歸方式傳輸文件,並保持所有文件的屬性 |
-r |
對子目錄以遞歸模式,即目錄下的所有目錄都以同樣的模式傳輸,註意是小寫的r |
-P |
顯示同步的過程及傳輸時的進度等信息 |
-e |
使用信道協議,指定替代rsh的shell程序,例如ssh |
-n |
測試選項,模擬執行 |
--exclued |
指定排除不需要傳輸的文件模式(和tar參數一樣) |
--delete |
是目標目錄內容和源文件保持一致,刪除不同的文件 |
--bwlimit=KBPS |
限制傳輸速度 |
1.1.3 範例
- 源地址帶與不帶(/)的區別
帶(/)
[root@centos6 tmp]# rsync -av ex./ /server/file/
[root@centos6 file]# ll
total 20
drwxr-xr-x 8 root root 4096 Jun 2 22:12 1ex
drwxr-xr-x 8 root root 4096 Jun 2 22:30 2ex
drwxr-xr-x 8 root root 4096 Jun 2 21:56 3ex
不帶(/)
[root@centos6 tmp]# rsync -av ex. /server/file/
[root@centos6 file]# ll
total 4
drwxr-xr-x 7 root root 4096 Jun 2 21:52 ex.
註釋 源文件後面帶(/)表示復制源目錄下面的文件 不帶(/) 表示 復制此目錄
- 拉取推送文件及目錄
[root@centos6 tmp]# rsync -av [email protected]:/tmp/hosts /tmp
[email protected]‘s password:
receiving incremental file list
hosts
sent 30 bytes received 430 bytes 102.22 bytes/sec
total size is 352 speedup is 0.77
[root@centos6 tmp]# ll 檢查10.0.0.200
total 16
-rw-r--r-- 1 root root 352 Jun 2 00:19 hosts
- 推送文件及目錄
[root@centos6 tmp]# rsync -av /tmp/hosts [email protected]:/tmp/
[email protected]‘s password:
sending incremental file list
hosts
sent 425 bytes received 31 bytes 130.29 bytes/sec
total size is 352 speedup is 0.77
[root@backup tmp]# ll 檢查10.0.0.41
total 4
-rw-r--r-- 1 root root 352 Jun 2 00:19 hosts
註 rsync 復制時 重復執行復制直至目錄下文件相同就不在復制了
- 利用ssh隧道模式(-e) 拉取推送文件及目錄
[root@centos6 tmp]# rsync -av -e ‘ssh -p 22‘ /tmp/hosts [email protected]:/tmp/
[email protected]‘s password:
sending incremental file list
hosts
sent 425 bytes received 31 bytes 101.33 bytes/sec
total size is 352 speedup is 0.77
[root@backup tmp]# ll 檢查10.0.0.41
total 4
-rw-r--r-- 1 root root 352 Jun 2 00:19 hosts
註 前面範例使用rsync同步數據都是明文傳輸,在要求保障數據安全的場景下,可以使用-e 選項借助SSH隧道進行加密傳輸數據,-p是ssh命令的選項,指定ssh傳輸的端口號為22.
1.1.4 經驗技巧
1)生產場景常用選項-avz,如果在腳本中-v也可以省略
2)關於-z壓縮選項的使用建議,如果為內網環境,且沒有其他業務占用寬帶,可以不用-z選項。不壓縮傳輸,幾乎可以滿寬帶傳輸(千M網絡),壓縮傳輸則網絡發送速度就會驟降,壓縮的速率趕不上傳輸的速率
3)選項-n是一個提高安全性的選項,它可以結合-v選項輸出模擬的傳輸過程,如果沒有錯誤,則可以去除-n,傳輸真正的文件
1.2 rsync守護進程模式
1.2.1 配置服務端
1) 創建配置文件
vim /etc/rsyncd.conf
rsyncd.conf具體說明:
# rsync_config
#####rsyncd.conf start#####
# 設置rsync守護進程模式保存進程號的文件的位置及名字
pid file = /var/run/rsyncd.pid
# 設置鎖文件的位置及名字
lock file = /var/run/rsync.lock
# 設置日誌文件的位置及名字,可以通過log format參數設置日誌格式
log file = /var/log/rsyncd.log
# 設置進行數據傳輸時所使用的linux系統的用戶或UID號
uid = rsync
# 設置進行數據傳輸時所使用的linux系統的用戶組或GID號
gid = rsync
# 這是一個與安全有關的參數。如果設置use chroot = yes,rsync會首先進行chroot設置,
# 將根映射到path參數路徑下,對客戶端而言,系統的根就是path參數所指定的路徑,但這樣做需要root權限,
# 並且在同步符號連接資料時僅會同步名稱,而內容將不會同步。
use chroot = no
# 設置並發連接數,0代表無限制。超出並發數後,如果依然有客戶端連接請求,則將會接收到稍後重試的提示消息。
max connections = 200
# 超時時間
timeout = 300
# 忽略一些I/O錯誤
ignore errors
# 是否允許客戶端傳輸數據到服務端,設置為yes表示客戶端不可寫,也就是只讀。
read only = false
# 客戶端請求顯示模塊列表時,是否予以顯示。設置為true為顯示,設置為false為不顯示。
list = false
# 設置允許哪些主機可以同步數據,可以是單個IP,也可以是網段,多個IP和網段之間使用空格分隔。
hosts allow = 172.16.1.0/24
# 設置出hosts allow裏面設置的主機以外,要拒絕的IP或網段信息。
hosts deny = 0.0.0.0/32
# 設置允許連接服務端的rsync服務的虛擬用戶,此用戶與linux系統中的用戶沒有關系。
auth users = rsync_backup
# 設置秘鑰認證文件,此文件要求全縣為制度,建議設為600。
secrets file = /etc/rsync.password
# 模塊名稱,rsync守護進程模式通過模塊定義同步的目錄,模塊以[name]的形式定義。
[backup_test]
# 註釋說明,非必須項。
comment = "backup dir by ms"
# 同步目錄的真實路徑
path = /backup
#####rsyncd.conf end#####
2)根據配置文件創建用戶
創建進行數據傳輸時所使用的linux系統用戶
命令:
useradd rsync -s /sbin/nologin -M
檢查:
id rsync
3)創建認證密鑰文件
配置文件中指定的認證密鑰文件默認是不存在的,需要創建出來。
命令:
echo "rsync_backup:oldboyedu" > /etc/rsync.password
檢查:
cat /etc/rsync.password
4)設置密鑰文件的權限
涉及到密碼信息的文件,都應該格外註意安全性,所以盡量將密鑰文件的權限將至最低,將安全性提到最高。
rsync的密鑰文件只需要root用戶自己能夠讀寫即可,所以權限設置為600即可。
命令:
chmod 600 /etc/rsync.password
檢查:
ls -l /etc/rsync.password
5)創建本地同步目錄
本地同步目錄一定要確保存在,不存在的話務必要事先創建,否則在應用時會出錯。
命令:
mkdir -p /backup
檢查:
ls -ld /backup/
6)設置本地同步目錄的屬主和屬組
由於在配置文件中設定了uid和gid的信息,所以需要將本地同步目錄屬主和屬組為相應的用戶。
命令:
chown -R rsync.rsync /backup
檢查:
ls -ld /backup/
7)啟動rsync服務
命令:
rsync --daemon
8)檢查rsync服務是否正常啟動
命令:
ps -ef | grep rsync | grep -v grep
或
netstat -nltup | grep rsync
或
lsof -i :873
9)設置rsync開機自動啟動
想要讓rsync服務開機自動啟動,可以將其添加至/etc/rc.local文件內。其中/etc/rc.local文件是/etc/rc.d/rc/local文件的軟鏈接。
命令:
echo ‘# start rsync server when this machine opened.‘ >> /etc/rc.local
echo ‘/usr/bin/rsync --daemon‘ >> /etc/rc.local
10)停止rsync服務(在需要的時候使用,一般修改了服務的配置文件後會需要重啟服務)
可以使用killall或者pkill命令殺掉rsync服務,也可以查到端口號交給kill命令去直接殺掉。
命令:
killall rsync
或
pkill rsync
或
kill `cat /var/run/rsyncd.pid`
或
ps aux |grep rsync |grep -v grep |awk ‘{print $2}‘ |xargs kill -9 && rm -f /var/run/rsyncd.pid
1.2.2 客戶端配置
客戶端也需要安裝rsync軟件,但不需要編寫rsync服務的配置文件rsyncd.conf,也不需要啟動rsync服務。
不過,客戶端也需要設置認證密鑰文件,並且對其進行權限控制。
(1)服務器環境檢查
與服務端一樣,也應該先進行檢查,再上手操作。
所以客戶端的第一步也是先檢查服務器上是否已經安裝了rsync軟件。
命令:
rpm -qa rsync
或
rpm -qa | grep rsync
(2)安裝rsync軟件(此步視上一步的結果來確定是否需要操作)
如果檢查結果是服務器上沒有安裝rsync軟件,那麽需要安裝一下,一般rsync軟件在裝機時就已安裝好了。
命令:
yum install -y rsync
(3)創建認證密鑰文件
此處需要註意,與服務端不同的地方在於,客戶端的密鑰文件裏面只需要存放rsyncd.conf中auth users參數設定的用戶的密碼,不需要將用戶也一並存放進去。
也就是說,如果客戶端的密鑰文件裏面也寫成 user:password的形式,反倒是錯誤的寫法,在應用rsync的守護進程模式傳輸數據時,會導致傳輸失敗。
命令:
echo ‘oldboyedu‘ > /etc/rsync.password
檢查:
cat /etc/rsync.password
(4)設置密碼文件的權限
涉及到密碼信息的文件,都應該格外註意安全性,所以盡量將密鑰文件的權限將至最低,將安全性提到最高。rsync的密鑰文件只需要用戶自己能夠讀寫即可,所以權限設置為600即可。
命令:
chmod 600 /etc/rsync.password
檢查:
ls -l /etc/rsync.password
(5)一些說明
a.客戶端的/etc/rsync.password裏只放密碼,不放用戶;
b.客戶端的/etc/rsync.password裏的密碼必須與服務端要使用rsync命令的用戶的/etc/rsync.password裏的密碼一致;
c.客戶端的/etc/rsync.password文件和服務端的/etc/rsync.password文件沒有任何關系,既客戶端存放密碼的文件名稱不需要與服務端存放密碼的文件名稱相同,只要和客戶端rsync命令接的參數--password-file=/etc/rsync.password一致即可。
d.為安全起見,需要對密碼文件授權600。
(6)在客戶端采用免交互的方式推送數據到服務端
在客戶端采用常規方式(也就是非免交互的方式)推送到服務端的命令格式如下:
rsync -avzP /etc/hosts [email protected]::backup_test
在客戶端采用免交互的方式推送到服務端的命令格式如下:
rsync -avzP /etc [email protected]::backup_test --password-file=/etc/rsync.password
rsync 參數說明及使用參數筆記