# 如何使用rsync備份數據
## 目錄
1. [rsync簡介](#rsync簡介)
2. [安裝與配置](#安裝與配置)
3. [基礎語法與參數](#基礎語法與參數)
4. [本地備份實戰](#本地備份實戰)
5. [遠程備份實戰](#遠程備份實戰)
6. [高級備份策略](#高級備份策略)
7. [自動化與定時任務](#自動化與定時任務)
8. [常見問題排查](#常見問題排查)
9. [安全注意事項](#安全注意事項)
10. [替代方案對比](#替代方案對比)
## rsync簡介
rsync(Remote Synchronization)是Linux/Unix系統下著名的增量備份工具,由Andrew Tridgell于1996年開發。它通過獨特的"delta-transfer"算法,僅傳輸源文件和目標文件的差異部分,這使得它在處理大文件備份時效率極高。
### 核心特性
- **增量備份**:僅傳輸變化部分,節省帶寬和時間
- **保留屬性**:可保持文件權限、時間戳等元數據
- **支持加密**:可通過SSH進行安全傳輸
- **靈活過濾**:支持包含/排除特定文件模式
- **斷點續傳**:網絡中斷后可恢復傳輸
### 適用場景
- 服務器數據定期備份
- 網站內容同步
- 開發環境部署
- 跨設備文件同步
## 安裝與配置
### Linux系統安裝
```bash
# Debian/Ubuntu
sudo apt-get install rsync
# RHEL/CentOS
sudo yum install rsync
# Arch Linux
sudo pacman -S rsync
# 通過Homebrew安裝
brew install rsync
rsync --version
rsync [選項] 源路徑 目標路徑
參數 | 說明 |
---|---|
-a |
歸檔模式(相當于-rlptgoD ) |
-v |
顯示詳細輸出 |
-z |
傳輸時壓縮數據 |
-h |
人類可讀格式輸出 |
-P |
顯示進度并支持斷點續傳 |
--delete |
刪除目標中源不存在的文件 |
--exclude |
排除指定模式的文件 |
--include |
包含指定模式的文件 |
-e |
指定遠程shell程序 |
rsync -avzP /source/ /destination/
# 將/home/user/docs同步到/backup/docs
rsync -av /home/user/docs/ /backup/docs/
注意:源路徑結尾的
/
表示同步目錄內容,不加/
表示同步目錄本身
rsync -av --exclude='*.tmp' --exclude='temp/' /source/ /backup/
exclude-list.txt
:*.log
cache/
temp/
rsync -av --exclude-from='exclude-list.txt' /source/ /backup/
# 使用校驗和而非修改時間
rsync -avc /source/ /backup/
# 本地到遠程
rsync -avzP -e ssh /local/path/ user@remote:/remote/path/
# 遠程到本地
rsync -avzP -e ssh user@remote:/remote/path/ /local/path/
rsync -avzP -e 'ssh -p 2222' /local/ user@remote:/remote/
/etc/rsyncd.conf
):[backup]
path = /data/backup
comment = Backup Area
read only = no
list = yes
auth users = backupuser
secrets file = /etc/rsyncd.secrets
rsync -av /local/path/ backupuser@remote::backup/
# 限制帶寬為500KB/s
rsync -avz --bwlimit=500 /source/ user@remote:/destination/
# 創建基于日期的備份目錄
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 執行增量備份
rsync -av --link-dest=/backup/previous_backup/ /source/ $BACKUP_DIR
# 更新符號鏈接
ln -snf $BACKUP_DIR /backup/previous_backup
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d%H%M)
SNAPSHOT_DIR="/backup/snapshot_$TIMESTAMP"
rsync -av --delete --link-dest=/backup/latest /source/ $SNAPSHOT_DIR \
&& ln -snf $SNAPSHOT_DIR /backup/latest
# MySQL備份示例
mysqldump -u user -p dbname | gzip > /tmp/db_backup.sql.gz
rsync -avz /tmp/db_backup.sql.gz backup-server:/backup/database/
/usr/local/bin/backup.sh
:
#!/bin/bash
LOG_FILE="/var/log/backup_$(date +%Y%m%d).log"
SOURCE_DIR="/data/important"
BACKUP_DIR="/backup/daily"
REMOTE_HOST="backup@remote-server"
echo "Backup started at $(date)" >> $LOG_FILE
rsync -avz --delete \
--exclude='cache/' \
-e ssh $SOURCE_DIR $REMOTE_HOST:$BACKUP_DIR \
>> $LOG_FILE 2>&1
echo "Backup completed at $(date)" >> $LOG_FILE
# 每天凌晨2點執行備份
0 2 * * * /usr/local/bin/backup.sh
/etc/logrotate.d/backup
:
/var/log/backup_*.log {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
}
錯誤信息 | 可能原因 | 解決方案 |
---|---|---|
rsync: connection unexpectedly closed |
網絡問題/權限不足 | 檢查SSH連接/驗證權限 |
rsync: failed to set times |
目標文件系統限制 | 添加--no-times 參數 |
rsync: write failed |
磁盤空間不足 | 清理目標磁盤空間 |
password file must be owned by root |
權限配置錯誤 | chmod 600 /etc/rsyncd.secrets |
網絡優化:
rsync -avz --compress-level=3 --partial /source/ user@remote:/backup/
內存優化(大文件場景):
rsync -av --no-whole-file --block-size=32768 /source/ /backup/
并行傳輸:
rsync -av --progress --stats --human-readable --compress \
--recursive --partial --rsh="parallel-ssh -n 4" \
/source/ user@remote:/backup/
使用密鑰認證替代密碼
ssh-keygen -t ed25519
ssh-copy-id user@remote
禁用root遠程登錄
修改默認SSH端口
限制守護進程訪問IP:
hosts allow = 192.168.1.0/24
使用chroot環境:
use chroot = yes
設置最小權限:
read only = yes
# 使用gpg加密備份
tar czf - /data | gpg -c | rsync -avz - user@remote:/backup/encrypted.tar.gz.gpg
特性 | rsync | scp |
---|---|---|
增量傳輸 | ? | × |
斷點續傳 | ? | × |
保留屬性 | ? | × |
傳輸速度 | 快(差異傳輸) | 慢(完整傳輸) |
資源消耗 | 高(需計算差異) | 低 |
特性 | rsync | rclone |
---|---|---|
云存儲支持 | × | ? |
加密傳輸 | 需配合SSH | 內置 |
多線程 | × | ? |
內存占用 | 低 | 高 |
rsync作為經過時間檢驗的備份工具,在可靠性、靈活性和效率方面表現卓越。通過本文介紹的各種技巧和策略,您可以根據實際需求構建從簡單到復雜的不同備份方案。建議從基礎備份開始,逐步增加自動化、校驗和安全功能,最終形成完整的備份體系。
最佳實踐提示:定期驗證備份的完整性和可恢復性,這才是真正可靠的備份方案。
# 基礎同步
rsync -av /src/ /dest/
# 遠程同步(SSH)
rsync -avz -e ssh /local/ user@remote:/remote/
# 帶進度和斷點續傳
rsync -avzP /src/ user@remote:/dest/
# 刪除目標多余文件
rsync -av --delete /src/ /dest/
# 帶寬限制
rsync -avz --bwlimit=1000 /src/ user@remote:/dest/
man rsync
”`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。