
rsync là tiêu chuẩn sao lưu trên Linux, nhưng phần lớn người dùng chỉ dùng cờ -avz cơ bản. Công cụ này thực sự có thể chuyển file delta (chỉ phần đã thay đổi) qua SSH, tự động xóa file nguồn sau khi xác nhận, và quản lý tập tin mirror từ xa. Hiểu rõ rsync tiết kiệm băng thông, tăng tốc độ backup, và giảm rủi ro mất dữ liệu.

Khác với các công cụ sao lưu đơn giản như cp hoặc scp, rsync so sánh file nguồn và đích bằng checksum và kích thước, chỉ truyền phần file đã thay đổi (delta). Điều này giúp backup 100GB database trong vài phút thay vì vài giờ, đồng thời tiết kiệm đáng kể băng thông mạng.
rsync hoạt động như thế nào?
rsync so sánh file nguồn và đích bằng checksum và kích thước. Chỉ phần file đã thay đổi (delta) được truyền qua network, không phải toàn bộ file mỗi lần backup. Thuật toán này giúp backup 100GB database trong vài phút thay vì vài giờ.
Phiên bản minimal backup từ máy local sang server:
rsync -avz --delete /home/user/data/ [email protected]:/backup/data/
Cờ rsync cần biết
| Cờ | Tác dụng | Ví dụ |
|---|---|---|
-a |
Archive mode (preserve permissions, timestamps, symlinks) | Luôn dùng |
-v |
Verbose output | Debug/kiểm tra |
-z |
Compress data in transit | Mạng chậm |
--delete |
Xóa file đích không tồn tại ở nguồn | Mirror đúng |
--progress |
Hiển thị tiến trình từng file | Backup thủ công |
--dry-run |
Mô phỏng, không thay đổi gì | Kiểm tra trước |
-e ssh |
Dùng SSH làm transport | Backup từ xa |
--exclude |
Bỏ qua pattern | --exclude '.git' |
--link-dest |
Hard-link file không đổi (incremental) | Backup snapshot |
--backup |
Lưu lại file bị xóa hoặc ghi đè | Khôi phục dễ dàng |
--backup-dir |
Lưu file backup vào thư mục chỉ định | Quản lý phiên bản |
--suffix |
Thêm hậu tố cho file backup | Tránh ghi đè |
--compare-dest |
So sánh với thư mục tham chiếu | Không truyền nếu giống nhau |
Backup qua SSH có xác thực key
Tạo key SSH không mật khẩu (để cron chạy tự động):
ssh-keygen -t ed25519 -C "backup@server"
ssh-copy-id [email protected]
Sau đó cron script dùng key đó đăng nhập không cần mật khẩu. Quan trọng: đặt quyền chmod 600 ~/.ssh/id_ed25519.
Script backup tự động hoàn chỉnh
#!/bin/bash
# backup.sh — rsync + SSH + logging
set -euo pipefail
SRC="/home/user/data/"
DEST="[email protected]:/backup/data/"
LOG="/var/log/rsync-backup.log"
DATE=$(date +%Y-%m-%d_%H:%M)
rsync -avz
--delete
--exclude '.git/'
--exclude 'node_modules/'
--exclude '*.tmp'
--progress
-e "ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no"
"$SRC" "$DEST"
>> "$LOG" 2>&1
if [ ${PIPESTATUS[0]} -eq 0 ]; then
echo "$DATE Backup thành công" >> "$LOG"
else
echo "$DATE Backup THẤT BẠI" >> "$LOG"
# Gửi cảnh báo qua Telegram/Mail ở đây
exit 1
fi
Incremental backup với hard-link snapshot
rsync có --link-dest — tạo snapshot mới nhưng hard-link file không đổi từ snapshot cũ. Tiết kiệm dung lượng đáng kể.
LATEST=$(ls -td /backup/snapshots/* 2>/dev/null | head -1)
rsync -avz
--link-dest="$LATEST"
--delete
-e ssh
/home/user/data/ user@server:/backup/snapshots/$(date +%Y-%m-%d)
Nếu file không đổi, snapshot mới chỉ thêm hard-link — dung lượng gần bằng 0. Xóa snapshot cũ 30 ngày:
find /backup/snapshots/ -type d -mtime +30 -exec rm -rf {} \;

So sánh rsync với borg, rclone, restic
| Công cụ | Ưu điểm | Nhược điểm |
|---|---|---|
| rsync | Đơn giản, có sẵn, mirror đúng nguồn | Không có built-in encryption |
| borg | Deduplication nén tốt, encrypted at rest | Cần repository, restore phức tạp |
| rclone | Hỗ trợ 70+ cloud (S3, GCS, Dropbox) | Bandwidth upload limit, rate-limit cần config |
| restic | Encrypted backup, multiple backends | Resource intensive |
Lên lịch cron backup tự động
# crontab -e — backup 02:00 hàng ngày, log giữ 7 ngày
0 2 * * * /home/user/bin/backup.sh
0 3 * * 1 /usr/bin/find /var/log/rsync-backup.log -mtime +7 -delete
Kiểm tra cron chạy đúng:
grep CRON /var/log/syslog | tail -20
Lỗi thường gặp và cách fix
- ssh: handshake failed — Đảm bảo
StrictHostKeyChecking=nohoặc thêm key fingerprint. - Permission denied — Kiểm tra
chmod 600 ~/.ssh/id_ed25519và owner đích. - Partial transfer due to error — Mạng lỗi, dùng
--timeout=60. - In-place update bị lỗi — Thêm
--inplacenếu file bị lock. - Checksum mismatch — Thêm
--checksumđể so sánh nội dung file thay vì size+mtime. - Timeout — Tăng
--timeouthoặc chia nhỏ công việc.
Kết luận
rsync là công cụ sao lưu đáng tin cậy nhất cho Linux. Với SSH, hard-link snapshot, và cron — bạn có giải pháp backup hoàn chỉnh với dung lượng tối thiểu. Kết hợp với Borg hoặc Rclone nếu cần encrypted at rest hoặc backup lên cloud.
