rsync backup Linux: Sao lưu dữ liệu tự động qua SSH đầy đủ

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.

Sơ đồ luồng rsync: client so sánh file checksum, gửi delta qua SSH, server ghi file mới

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 {} \;
Biểu đồ dung lượng 7 snapshot rsync sử dụng hard-link, minh họa tiết kiệm không gian lưu trữ

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=no hoặc thêm key fingerprint.
  • Permission denied — Kiểm tra chmod 600 ~/.ssh/id_ed25519 và owner đích.
  • Partial transfer due to error — Mạng lỗi, dùng --timeout=60.
  • In-place update bị lỗi — Thêm --inplace nếu file bị lock.
  • Checksum mismatch — Thêm --checksum để so sánh nội dung file thay vì size+mtime.
  • Timeout — Tăng --timeout hoặ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.

Man page rsync | Hướng dẫn từ Red Hat

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Giao diện FancyZones với các vùng chia màn hình được tùy chỉnh trong Windows

PowerToys trên Windows: 6 công cụ tối ưu hóa workflow developer 2025

PowerToys là gì? PowerToys là bộ công cụ mã nguồn mở do Microsoft phát triển, cung cấp hàng loạt tính năng nâng cao giúp tối ưu hóa workflow trên Windows….

Xem thêm

8 tính năng ẩn trên iPhone: Back Tap, Khóa ứng dụng, SOS khẩn cấp không cần app

iOS 18 mang đến hàng loạt tính năng mới: Apple Intelligence, màn hình khóa tùy biến, RCS, Game Mode. Nhưng bên cạnh những thay đổi lớn, nhiều “mẹo ẩn” (hidden…

Xem thêm

Justfile: Task runner đơn giản thay thế Makefile và script shell

Justfile: Task runner đơn giản thay thế Makefile và script shell Justfile (câu lệnh just) là task runner hiện đại được viết bằng Rust, thay thế Makefile, npm scripts, bash…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất