Lệnh Rsync là gì? 5+ cách dùng đồng bộ file VPS (Nhanh & hiệu quả)

Tác giả: Trần Thảo 24 tháng 02, 2026

Khi quản lý VPS, việc di chuyển file là một tác vụ hàng ngày. Bạn có thể cần upload code từ máy local, tải về file log, hoặc sao lưu website sang một server khác.

Nhiều người mới thường dùng scp hoặc các client FTP/SFTP. Các công cụ này hoạt động tốt, nhưng chúng có một điểm yếu lớn về hiệu suất: nếu bạn upload một thư mục 10GB, rồi sửa 1 file nhỏ chỉ 5KB, bạn sẽ phải upload lại… toàn bộ 10GB.

Đây chính là lúc lệnh rsync (Remote Sync) phát huy tác dụng. Nó là một công cụ đồng bộ hóa thông minh, được thiết kế để chỉ truyền đi những phần đã thay đổi của tệp tin, giúp tiết kiệm thời gian và băng thông một cách đáng kinh ngạc.

Nếu bạn đang tìm một giải pháp sao lưu tổng quan, bạn có thể xem qua 3 cách backup VPS phổ biến (Snapshot, Rclone, Tar). Nhưng nếu bạn cần một công cụ thay thế scp để đồng bộ file hiệu quả, thì rsync chính là câu trả lời tối ưu.

Lệnh Rsync là gì?

Lệnh rsync trong Linux

Rsync (viết tắt của Remote Sync) là một tiện ích dòng lệnh mạnh mẽ và linh hoạt trên Linux/Unix dùng để đồng bộ hóa tệp tin và thư mục giữa các hệ thống.

Cơ chế hoạt động: Thuật toán Delta-Transfer

Sự khác biệt cốt lõi nằm ở thuật toán “delta-transfer”. Thay vì sao chép toàn bộ file A (nguồn) sang file B (đích) một cách máy móc, rsync thực hiện quy trình sau:

  1. So sánh: Kiểm tra file ở “đích” và so sánh với file ở “nguồn” (mặc định dựa trên kích thước và thời gian sửa đổi).
  2. Tính toán Delta: Xác định chính xác những “khối” (chunks) dữ liệu nào trong file nguồn khác biệt so với file đích. “Delta” chính là phần chênh lệch đó.
  3. Chỉ truyền Delta: Chỉ truyền những “khối” dữ liệu mới hoặc đã thay đổi này qua mạng.
  4. Tái tạo: Tại “đích”, rsync sử dụng các khối delta này để ghép vào dữ liệu cũ, tái tạo lại file sao cho giống hệt file ở “nguồn”.

Kết quả: Nếu bạn sửa 10 dòng code trong một file 500MB, rsync chỉ truyền đi vài KB thay vì toàn bộ 500MB như scp.

So sánh nhanh: Lệnh Rsync vs. Cp vs. Scp

Để thấy rõ sức mạnh của lệnh rsync, hãy xem bảng so sánh dưới đây:

Tính năng cp (Copy) scp (Secure Copy) rsync (Remote Sync)
Cơ chế Copy toàn bộ Copy toàn bộ qua mạng Chỉ copy phần thay đổi (Delta)
Phạm vi Chỉ Local Local ↔ Remote Local ↔ Local, Local ↔ Remote
Tốc độ (Lần 2+) Chậm Rất chậm Cực nhanh
Nén dữ liệu Không Không (tùy chọn -z)
Giữ thuộc tính Hạn chế Có (với -p) Rất tốt (với -a)
Resume khi lỗi Không Không (với -P)

Ghi chú: Để tìm hiểu sâu hơn về scp, bạn có thể đọc bài Cách sao chép tệp với lệnh SCP trong Linux.

Hướng dẫn cài đặt Rsync

Tin tốt là rsync gần như đã được cài đặt sẵn trên hầu hết các bản phân phối Linux hiện đại và macOS. Bạn có thể kiểm tra bằng lệnh:

rsync --version

Nếu VPS của bạn chưa có, việc cài đặt rất đơn giản:

Trên Ubuntu / Debian:

sudo apt update
sudo apt install rsync

Trên CentOS / RHEL:

sudo yum install rsync

(Nếu bạn mới làm quen với VPS, hãy xem qua Tổng hợp 20+ lệnh Linux cơ bản nhất cho người mới dùng VPS để nắm vững các thao tác nền tảng).

Cú pháp và các “Options” quan trọng

Cú pháp cơ bản của rsync tương tự như cpscp:

rsync [options] [source] [destination]

Sức mạnh của nó nằm ở các [options]. Dưới đây là những tùy chọn quan trọng nhất:

  • -a (archive): Tùy chọn “thần thánh”. Nó kích hoạt chế độ sao lưu (archive), giữ nguyên mọi thuộc tính file. Nó tương đương với -rlptgoD (đệ quy, giữ symlinks, quyền, thời gian, nhóm, chủ sở hữu, thiết bị).
  • -v (verbose): Hiển thị chi tiết quá trình xử lý. Giúp bạn theo dõi tiến độ.
  • -h (human-readable): Hiển thị dung lượng (KB, MB, GB) ở định dạng dễ đọc.
  • -z (compress): Nén dữ liệu khi truyền qua mạng. Tiết kiệm băng thông nhưng tốn ít CPU. Khuyên dùng khi truyền qua Internet.
  • -P (progress + partial): Tùy chọn cực kỳ hữu ích, kết hợp:
    • --progress: Hiển thị thanh tiến trình.
    • --partial: Nếu kết nối bị ngắt, rsync giữ lại phần file đã tải. Khi chạy lại, nó sẽ tiếp tục từ điểm đó thay vì tải lại từ đầu.
  • --delete: Đồng bộ hóa hai chiều (Mirror). Nó sẽ xóa bất kỳ file nào ở “đích” mà không tồn tại ở “nguồn”. Cần thận trọng khi dùng.
  • -n hoặc --dry-run: TÙY CHỌN AN TOÀN. Chạy thử giả lập, hiển thị những gì sẽ xảy ra mà không thực sự thay đổi dữ liệu.

Lời khuyên: Luôn sử dụng --dry-run (hoặc -n) trước khi chạy lệnh rsync có cờ --delete để tránh mất dữ liệu quan trọng.

5+ kịch bản sử dụng lệnh Rsync phổ biến

Bảo mật dữ liệu khi đồng bộ VPS

Dưới đây là các ví dụ thực tế giúp bạn áp dụng ngay lập tức.

Kịch bản 1: Đồng bộ Local (Trên cùng VPS)

Sử dụng rsync thay cho cp để sao lưu thư mục. Ví dụ: sao lưu /var/www/html sang /var/backups/www.

rsync -avh /var/www/html/ /var/backups/www/

CẢNH BÁO KỸ THUẬT: Lỗi “Trailing Slash” (Dấu / ở cuối)
Dấu / ở cuối đường dẫn nguồn (source) thay đổi hoàn toàn hành vi của lệnh:

  • /source/ (Có dấu /): Copy NỘI DUNG bên trong thư mục nguồn vào đích.
  • /source (Không có dấu /): Copy CẢ THƯ MỤC nguồn vào bên trong đích.

Hãy kiểm tra kỹ hoặc dùng --dry-run trước khi thực thi!

Kịch bản 2: Đồng bộ từ Local lên VPS (Push qua SSH)

Đẩy mã nguồn từ máy tính cá nhân lên thư mục web trên VPS. Sử dụng thêm -z (nén) và -P (tiến trình).

# Từ máy Local
rsync -avzP ~/projects/my-project/ [email protected]:/var/www/html/

Rsync sẽ dùng SSH để truyền tải an toàn. Nếu bạn đã cài đặt SSH Key, bạn sẽ không cần nhập mật khẩu.

Kịch bản 3: Đồng bộ từ VPS về Local (Pull qua SSH)

Tải file log hoặc dữ liệu backup từ VPS về máy cá nhân.

# Từ máy Local
rsync -avzP [email protected]:/var/log/nginx/ /Users/myname/vps-logs/nginx/

Kịch bản 4: Dùng --delete để “mirror” website

Để thư mục đích giống hệt thư mục nguồn (bao gồm cả việc xóa file thừa), hãy dùng --delete.

# BƯỚC 1: CHẠY THỬ (Dry Run)
rsync -avzPn --delete ~/projects/my-project/ [email protected]:/var/www/html/

# BƯỚC 2: CHẠY THẬT (Nếu kết quả dry-run đúng ý)
rsync -avzP --delete ~/projects/my-project/ [email protected]:/var/www/html/

Kịch bản 5: Loại trừ (Exclude) file và thư mục

Khi deploy, bạn thường muốn bỏ qua các thư mục như .git, node_modules, hoặc file log.

Cách 1: Exclude trực tiếp

rsync -avzP --delete \
    --exclude '.git' \
    --exclude 'node_modules' \
    --exclude '*.log' \
    ~/projects/my-project/ [email protected]:/var/www/html/

Cách 2: Dùng file danh sách (Chuyên nghiệp hơn)
Tạo file exclude-list.txt chứa danh sách cần bỏ qua:

.git
node_modules
/cache
*.log

Sau đó chạy lệnh:

rsync -avzP --delete --exclude-from='exclude-list.txt' ~/projects/my-project/ [email protected]:/var/www/html/

Kịch bản 6: Dùng port SSH tùy chỉnh

Nếu VPS của bạn đã đổi port SSH (ví dụ: 2222) để tăng bảo mật, hãy dùng cờ -e:

rsync -avzP -e 'ssh -p 2222' ~/projects/my-project/ [email protected]:/var/www/html/

Mẹo nâng cao & Tự động hóa

1. Giới hạn băng thông (`–bwlimit`)

Tránh làm nghẽn mạng VPS khi backup file lớn bằng cách giới hạn tốc độ (đơn vị KB/s).

# Giới hạn tốc độ ở 5 MB/s (5000 KB/s)
rsync -avzP --bwlimit=5000 /path/to/largefile.zip user@remote:/backups/

2. Tự động hóa với Cron và SSH Key

Để backup tự động hàng đêm mà không cần nhập mật khẩu, bạn cần kết hợp cron và SSH Key.

  1. Cấu hình SSH Key: Đảm bảo VPS nguồn có thể SSH sang VPS đích không cần mật khẩu.
  2. Thiết lập Cron: Mở crontab -e và thêm dòng lệnh.
# Chạy backup lúc 2:30 sáng mỗi ngày
30 2 * * * /usr/bin/rsync -a --delete /var/www/html/ user@remote-vps:/backups/html/

Lưu ý quan trọng cho Cron:
Trong môi trường Cron, hãy luôn sử dụng đường dẫn tuyệt đối của lệnh (ví dụ: /usr/bin/rsync) để tránh lỗi “command not found”. Bạn có thể tìm đường dẫn bằng lệnh which rsync.

3. Chỉ cập nhật file mới hơn (`–update`)

Dùng cờ -u để bảo rsync không ghi đè nếu file ở đích có thời gian sửa đổi mới hơn file ở nguồn.

rsync -avzPu user@:/production-logs/ /local-backup/logs/

4. Kiểm tra toàn vẹn tuyệt đối (`–checksum`)

Mặc định rsync kiểm tra kích thước và thời gian. Để so sánh nội dung từng bit (checksum MD5), dùng -c. Lưu ý: Tốn nhiều tài nguyên CPU/Disk I/O hơn.

rsync -avzc /local/source/ /remote/dest/

5. Di chuyển file (`–remove-source-files`)

Giống lệnh mv qua mạng: Xóa file gốc sau khi truyền thành công.

rsync -avz --remove-source-files /var/log/app/ /log-archive-server:/logs/

6. Khắc phục lỗi “Permission Denied”

Nếu gặp lỗi này, hãy kiểm tra:

  1. Quyền đọc (Source): User chạy lệnh có quyền đọc file nguồn không?
  2. Quyền ghi (Destination): User đích có quyền ghi vào thư mục đó không?

Để hiểu rõ hơn về phân quyền, hãy tham khảo: Cách giải quyết lỗi Permission Denied trong Linux.

Câu hỏi thường gặp (FAQ)

1. Lệnh rsync có mã hóa dữ liệu khi truyền không?

Khi sử dụng cú pháp user@host:path, rsync chạy qua giao thức SSH, nên toàn bộ dữ liệu được mã hóa và an toàn. Nếu dùng chế độ daemon (rsync://), dữ liệu thường không được mã hóa. Hãy ưu tiên dùng qua SSH.

2. Rsync có tự động xóa file ở nơi nhận không?

Không. Mặc định rsync chỉ thêm hoặc cập nhật file. Nó chỉ xóa file ở đích khi bạn dùng thêm cờ --delete.

3. Tại sao lần chạy đầu tiên lại chậm?

Vì chưa có dữ liệu ở đích để so sánh (delta-transfer), rsync phải copy 100% dữ liệu, tương đương với scp. Tốc độ vượt trội chỉ xuất hiện từ lần chạy thứ 2.

4. Rsync khác gì lệnh tar?

  • tar: Gom và nén nhiều file thành 1 file lưu trữ (.tar.gz). Xem thêm: Lệnh Tar trong Linux.
  • rsync: Đồng bộ cấu trúc thư mục, giữ nguyên dạng file, không tạo file nén.

5. Rsync khác gì Restic hoặc Rclone?

Rsync là công cụ đồng bộ (mirror). Nếu file gốc bị lỗi, bản backup cũng sẽ bị lỗi theo khi đồng bộ.
Restic/Rclone hỗ trợ Versioning (lưu nhiều phiên bản theo thời gian) và Deduplication (chống trùng lặp).

Kết luận

Lệnh rsync là công cụ không thể thiếu cho mọi quản trị viên VPS nhờ khả năng đồng bộ thông minh, tiết kiệm băng thông và linh hoạt. Nắm vững các cờ -a, -P, --delete--dry-run sẽ giúp bạn quản lý dữ liệu hiệu quả hơn.

Tuy nhiên, hãy nhớ rằng rsync thiên về “đồng bộ” hơn là “backup lưu trữ”. Nếu bạn cần giải pháp backup có khả năng khôi phục lại các phiên bản cũ (restore points) và tiết kiệm dung lượng lưu trữ tối đa, hãy tham khảo giải pháp chuyên dụng: Backup VPS chống trùng lặp với Restic.

Tài liệu tham khảo