rsync簡介
Rsync(Remote Synchronization)是一款開源的,快速的,多功能的,可實現全量和增量的本地或遠程數據同步備份的優秀工具.可實現cp,scp,rm,增量備份等功能
優點
- 同步時能夠完整的保留數據目錄結構、權限、時間、軟硬鏈接等
- 能夠實現增量同步, 每一次同步只會同步發生過改變的數據
- 文件傳輸效率高
- 支持匿名傳輸
- 無須特殊權限即可安裝
- 支持流控制, 可以精確同步速度和使用的帶寬大小
語法
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
常用選項:
-v, --verbose 顯示詳細的傳輸信息
-a, --archive 歸檔模式, 等於 -rlptgoD
-r, --recursive 遞歸複製目錄
-t, --times 保持文件屬性信息時間信息不變(修改時間)
-o, --owner 保持文件屬主信息不變
-g, --group 保持文件屬組信息不變
-p, --perms 保持文件權限信息不變
-D, 保持設備文件信息不變
-l, --links 保持鏈接文件屬性不變
-L, 保持鏈接文件數據信息不變
-P, 保留那些因故沒有完全傳輸的文件, 以加快隨後的再次傳輸,可看到傳輸進度
--exclude=PATTERN 排除指定數據不被傳輸
--exclude-from=file 排除指定數據不被傳輸(批量排除)
--bwlimit=RATE 顯示傳輸的速率 100Mb/8=12.5MB
--delete 刪除 DST 上 SRC 不存在的數據
備份服務器rsync守護進程配置
-
下載安裝軟件
rpm -qa|grep rsync yum install -y rsync
-
編寫配置文件
#查看幫助文檔 man rsyncd.conf vim /etc/rsyncd.conf #參數說明 uid = rsync # 指定管理備份目錄的用戶 gid = rsync # 指定管理備份目錄的用戶組 port = 873 # 定義rsync備份服務的網絡端口號 fake super = yes # 將rsync虛擬用戶僞裝成爲一個超級管理員用戶 use chroot = yes # 和安全相關的配置 max connections = 200 # 最大連接數 同時只能有200個客戶端連接到備份服務器 timeout = 300 # 超時時間(單位秒) pid file = /var/run/rsyncd.pid # 記錄進程號信息 lock file = /var/run/rsync.lock # 鎖文件 log file = /var/log/rsyncd.log # rsync服務的日誌文件 用於排錯分析問題 ignore errors # 忽略傳輸中的簡單錯誤 read only = false # 指定備份目錄是可讀可寫 list = false # 使客戶端可以查看服務端的模塊信息 hosts allow = 172.16.1.0/24 # 允許傳輸備份數據的主機(白名單) hosts deny = * # 禁止傳輸備份數據的主機(黑名單) auth users = rsync_backup # 指定認證用戶 secrets file = /etc/rsync.password # 指定認證用戶密碼文件 用戶名稱:密碼信息(密碼長度在8位一下,權限必須是600) [backup] # 模塊信息 comment = "backup dir " path = /backup # 模塊中配置參數 指定備份目錄
-
創建rsync服務的系統用戶
useradd -r rsync
-
創建備份服務認證密碼文
echo "rsync_backup:123456" >/etc/rsync.password chmod 600 /etc/rsync.password
-
創建備份目錄並修改屬主屬組信息
mkdir /backup chown -R rsync.rsync /backup/
-
啓動備份服務
systemctl start rsyncd systemctl enable rsyncd systemctl status rsyncd
-
防火牆設置
firewall-cmd --add-service rsyncd
備份實戰
客戶端腳本(172.16.1.41)
#!/bin/bash
#設置本機的備份目錄
backup_dir="/backup"
ip_addr=$(hostname -i)
#創建備份目錄
if [[ ! -d "/$backup_dir/$ip_addr" ]]; then
mkdir -p /$backup_dir/$ip_addr
fi
cd /
#創建備份壓縮包,包括:
#定時任務服務的配置文件(/var/spool/cron/root)、開機自啓動的配置文件(/etc/rc.local)、
#日常腳本的目錄(/server/scripts)、防火牆iptables的配置文件(/etc/sysconfig/iptables)
tar zchf /$backup_dir/$ip_addr/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables-config
#刪除7天以前的備份
find $backup_dir/ -type f -mtime +7 -exec rm -rf {} \;
#生成文件指紋校驗結果文件
find $backup_dir/ -type f -mtime -1 ! -name "finger*" -exec md5sum {} > $backup_dir/$ip_addr/finger.txt \;
#傳輸到備份服務器
rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
寫入定時任務
crontab -e
0 0 * * * /bin/bash /server/scripts/client_backup.sh >/dev/null 2>&1
服務端腳本(172.16.1.31)
#!/bin/bash
#刪除半年前除每週一之外的備份
find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz" -exec rm -rf {} \;
#校驗文件的完整性
find /backup/ -type f -name "finger.txt" -exec md5sum -c {} \; >/tmp/check.txt
#校驗結果發送到郵箱
mail -s "check into $(date +%F)" [email protected] </tmp/check.txt
寫入服務端定時任務
crontab -e
0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null
服務端郵箱配置方法
這裏我們用163郵箱作爲代理,首先要進行如下設置
開啓IMAP/SMTP服務,獲取授權碼
備份服務器配置
yum install mailx -y
vim /etc/mail.rc #找不到就是沒有安裝mailx
#在末尾加入
set from=郵箱地址@163.com smtp=smtp.163.com
set smtp-auth-user=郵箱地址@163.com smtp-auth-password=授權碼 smtp-auth=login