對于運維不得不得做的就是備份,增量備份與全量備份,通過rsync工具可以快速做到遠程備份。
rsync的應用: 1.備份文件 2.全量備份 3.增量備份。 通過rsync+inotify實時同步文件。
一、什么是rsync
rsync(Remote Sync,遠程同步)是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈接和權限,且采用優化的同步算法,傳輸前執行壓縮,因此非常適用于異地備份、鏡像服務器等應用。
rsync是一款快速增量備份工具,支持:
(1)本地復制;
(2)與其他SSH同步;
(3)與rsync主機同步。
在遠程同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責相應來自客戶機的rsync同步操作的服務器稱為同步源。在同步過程中,同步源負責提供文檔的原始位置,發起端應對該位置有讀取權限。
rsync的優點
1.它有效地將文件復制和同步到遠程系統或從遠程系統同步文件到本地。
2.支持復制鏈接、設備、所有者、組和權限。
3.它比scp (Secure Copy)更快,因為rsync使用遠程更新協議,該協議只允許傳輸兩組文件之間的差異。第一次,它將一個文件或目錄的全部內容從源文件復制到目標文件,但從下一次開始,它只將更改的塊和字節復制到目標文件。
4.Rsync在兩端發送和接收數據時采用壓縮和解壓縮方式,因此占用的帶寬較少。
二、安裝rsync
查看版本或者查看本機是否安裝
rsync --version
在centos中使用下面命令安裝rsync:
yum -y install rsync
在Ubuntu 或者Debian體系的linux系統上安裝rsync
sudo apt install rsync
三、使用rsync備份工具
配置好rsync同步源服務器之后,客戶端就可以使用rsync工具來執行遠程同步了。
基本語法
Local to Local: rsync [OPTION]... [SRC]... DEST
Local to Remote: rsync [OPTION]... [SRC]... [USER@]HOST:DEST
Remote to Local: rsync [OPTION]... [USER@]HOST:SRC... [DEST]
- OPTION – rsync參數選項.
- SRC – 源目錄.
- DEST – 目標目錄.
- USER – 遠程用戶名.
- HOST – 遠程主機名或域名或IP地址.
rsync命令的選項
選項 |
說明 |
-a, ––archive |
歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等價于 -rlptgoD (注意不包括 -H) |
-r, ––recursive |
對子目錄以遞歸模式處理 |
-l, ––links |
保持符號鏈接文件 |
-H, ––hard-links |
保持硬鏈接文件 |
-p, ––perms |
保持文件權限 |
-t, ––times |
保持文件時間信息 |
-g, ––group |
保持文件屬組信息 |
-o, ––owner |
保持文件屬主信息 (super-user only) |
-D |
保持設備文件和特殊文件 (super-user only) |
-z, ––compress |
在傳輸文件時進行壓縮處理 |
––exclude=PATTERN |
指定排除一個不需要傳輸的文件匹配模式 |
––exclude-from=FILE |
從 FILE 中讀取排除規則 |
––include=PATTERN |
指定需要傳輸的文件匹配模式 |
––include-from=FILE |
從 FILE 中讀取包含規則 |
––copy-unsafe-links |
拷貝指向SRC路徑目錄樹以外的鏈接文件 |
––safe-links |
忽略指向SRC路徑目錄樹以外的鏈接文件(默認) |
––existing |
僅僅更新那些已經存在于接收端的文件,而不備份那些新創建的文件 |
––ignore-existing |
忽略那些已經存在于接收端的文件,僅備份那些新創建的文件 |
-b, ––backup |
當有變化時,對目標目錄中的舊版文件進行備份 |
––backup-dir=DIR |
與 -b 結合使用,將備份的文件存到 DIR 目錄中 |
––link-dest=DIR |
當文件未改變時基于 DIR 創建硬鏈接文件 |
––delete |
刪除那些接收端還有而發送端已經不存在的文件 |
––delete-before |
接收者在傳輸之前進行刪除操作 (默認) |
––delete-during |
接收者在傳輸過程中進行刪除操作 |
––delete-after |
接收者在傳輸之后進行刪除操作 |
––delete-excluded |
在接收方同時刪除被排除的文件 |
-e, ––rsh=COMMAND |
指定替代 rsh 的 shell 程序 |
––ignore-errors |
即使出現 I/O 錯誤也進行刪除 |
––partial |
保留那些因故沒有完全傳輸的文件,以是加快隨后地再次傳輸 |
––progress |
在傳輸時顯示傳輸過程 |
-P |
等價于 ––partial ––progress |
––delay-updates |
將正在更新的文件先保存到一個臨時目錄(默認為 “.~tmp~”),待傳輸完畢再更新目標文件 |
-v, ––verbose |
詳細輸出模式 |
-q, ––quiet |
精簡輸出模式 |
-h, ––human-readable |
輸出文件大小使用易讀的單位(如,K,M等) |
-n, ––dry-run |
顯示哪些文件將被傳輸 |
––list-only |
僅僅列出文件而不進行復制 |
––rsyncpath=PROGRAM |
指定遠程服務器上的 rsync 命令所在路徑 |
––password-file=FILE |
從 FILE 中讀取口令,以避免在終端上輸入口令,通常在 cron 中連接 rsync 服務器時使用 |
-4, ––ipv4 |
使用 IPv4 |
-6, ––ipv6 |
使用 IPv6 |
––version |
打印版本信息 |
––help |
顯示幫助信息 |
在指定復制源時,路徑是否有最后的 “/” 有不同的含義,例如:
/home : 表示將整個 /home 目錄復制到目標目錄
/home/ : 表示將 /home 目錄中的所有內容復制到目標目錄
四、rsync使用實例
本地復制
# rsync /etc/passwd 123.txt
//類似于cp命令
遠程同步
可以配合ssh免密碼登錄,則不需要輸入密碼。
或者使用 --password-file=/etc/pass.txt 指定接收端的密碼,明文可能不安全。
# rsync -av root@192.168.1.2:/root/123.txt .
root@192.168.1.2's password:
rsync指定端口號( -e )
/usr/bin/rsync -e 'ssh -p 60920' -ahqzt /root/master3.sql root@192.168.1.2:/root/
在傳輸過程中查看rsync進度(--progress)
使用--progress選項顯示rsync執行的詳細進度,如下所示:
# rsync -avz --progress /root/temp/ root@192.168.1.2:/root/temp
單向備份(--delete)
如果文件不在源中而是在目標中存在,則可能希望在rsync同步期間刪除目標上的文件。在這種情況下,請使用--delete選項:
rsync -avz --delete /root/temp root@192.168.1.2:/root/temp
文件傳輸過程中的include和exclude模式
rsync允許在進行同步時提供要包括和排除文件或目錄的模式。
[root@localhost ~]# rsync -avz --include 'P*' --exclude '*' root@192.168.1.2:/var/lib/rpm/ /root/temp/
排除的文件和目錄(--exclude-from)
使用--exclude-from參數,并指定要在文件中排除的文件和目錄。
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
加入需要排除的文件,比如文件file1.c,目錄zcwyou:
cat /exclude-file.txt
file1.c
zcwyou
不傳輸大文件(--max-size)
可以使用rsync --max-size選項告訴rsync不要傳輸大于指定大小的文件。
# rsync -avz --max-size='1M' root@192.168.1.2:/var/lib/rpm/ /root/temp/
--max-size=1M使rsync僅傳輸小于或等于1M的文件。單位可以是K,M,G等。
還可以使用--min-size=參數,指定傳輸最小文件的大小。
傳輸成功后刪除源文件(--remove-source-files)
假設你有一個主web服務器和一個數據備份服務器,你創建了一個每日備份并與備份服務器同步,現在你不想在你的web服務器上保留備份的本地副本。
那么,您會等待傳輸完成,然后手動刪除本地備份文件嗎?這樣做肯定有點麻煩,這種自動刪除可以使用–remove-source-files選項來完成。
rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/home/backup/
檢查:
ls -l backup.tar.gz
限制Rsync傳輸時的帶寬(--bwlimit)
在將數據從一臺機器傳輸到另一臺機器時,可以使用–bwlimit選項設置帶寬限制。這個選項可以幫助我們限制Rsync占用的網絡帶寬。
rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.151:/root/tmprpm/
另外,默認情況下rsync只同步更改的塊和字節,如果你想完整同步整個文件或目錄,那么你可以使用-W選項。
定時任務
但是在現實工作環境中,備份工作通常是按計劃重復執行的,比如:
[root@localhost ~]# vim /root/123.pass
123456
//任意創建一個文件用于存放rsync授權用戶的密碼信息
[root@localhost ~]# chmod 600 /root/123.pass
//必須設定600權限,否則執行時將會報錯
[root@localhost ~]# crontab -e
//創建計劃任務
30 22 * * * /usr/bin/rsync -az --delete --password-file=/root/123.pass backuper@192.168.1.1::wwwroot /a
//每天晚上22:30執行腳本
[root@localhost ~]# systemctl restart crond
//重新啟動crond服務
同步目錄
這里是經常使用的腳本,做代碼、文件同步。
#!/bin/bash
SRC=/data/path1/ #192.168.1.3 發送端目錄
DST=/data/path1/ #192.168.1.2 接收端目錄
IP="192.168.1.2"
USER=www
#同步文件
/usr/bin/rsync -e 'ssh -p 22' -ahqzt
--exclude ".git"
--exclude "www/Conf/config.php"
--exclude "www/Public/ueditor/*"
--exclude "README.md"
--delete $SRC $USER@$IP:$DST
-ahqzt
-a:歸檔模式
-h:輸出文件大小使用易讀的單位(如,K,M等)
-q:精簡輸出模式
-z: 在傳輸文件時進行壓縮
-t: 保留文件的時間標記
--exclude: 不需要同步的文件或目錄
--delete: 刪除那些接收端還有而發送端已經不存在的文件
在本教程中,您學習了如何使用Rsync在多臺Linux之間傳輸、復制或同步文件和目錄。在Rsync用戶手冊頁面上有更多關于Rsync的內容。下次再講如何通過rsync+inotify實時同步文件。