Rsync command là công cụ đồng bộ và sao chép file được dùng nhiều nhất trên Linux — từ copy nội bộ giữa hai thư mục, đến đồng bộ với server từ xa qua SSH, backup incremental, hay mirror dữ liệu giữa hai máy chủ. Bài viết tổng hợp 16 ví dụ thực tế, có thể dùng trực tiếp.
Ưu Điểm Của Rsync Command
- Delta transfer — chỉ truyền phần dữ liệu thay đổi, không copy lại toàn bộ file, tiết kiệm băng thông đáng kể
- Hỗ trợ SSH — truyền file mã hóa an toàn qua mạng
- Backup incremental — chỉ cập nhật file mới hoặc đã thay đổi
- Giữ nguyên metadata — permission, ownership, timestamp, symlink đều được bảo toàn
- Giới hạn bandwidth — kiểm soát tốc độ truyền để không ảnh hưởng các service khác
- Nhanh hơn scp — đặc biệt khi sync thư mục lớn hoặc file đã tồn tại một phần ở đích
Cú Pháp Rsync Command
|
1 2 |
rsync [OPTIONS] SOURCE DESTINATION |
- -v — verbose, hiển thị chi tiết quá trình transfer
- -r — copy đệ quy (không giữ timestamp và permission)
- -a — archive mode: copy đệ quy + giữ symlink, permission, ownership, timestamp
- -z — nén dữ liệu khi truyền, giảm băng thông
- -h — hiển thị dung lượng theo định dạng đọc được (KB, MB, GB)
- -P hoặc –progress — hiển thị tiến trình transfer
Cài Đặt Rsync
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Debian / Ubuntu sudo apt install rsync # RHEL / CentOS / Rocky / AlmaLinux sudo dnf install rsync # Arch Linux sudo pacman -S rsync # Alpine Linux sudo apk add rsync # OpenSUSE sudo zypper install rsync |
16 Ví Dụ Rsync Command Thực Tế
1. Copy File Nội Bộ (Local)
Sync một file từ vị trí này sang vị trí khác trên cùng máy. Nếu thư mục đích chưa tồn tại, rsync tự tạo:
|
1 2 |
rsync -zvh backup.tar.gz /tmp/backups/ |
2. Copy Thư Mục Nội Bộ
Sync toàn bộ thư mục sang thư mục khác trên cùng máy:
|
1 2 |
rsync -avzh /root/rpmpkgs /tmp/backups/ |
3. Copy Thư Mục Từ Local Lên Remote Server
Đẩy thư mục từ máy local lên server từ xa:
|
1 2 |
rsync -avzh /root/rpmpkgs user@192.168.0.141:/root/ |
4. Copy Thư Mục Từ Remote Server Về Local
Kéo thư mục từ server về máy local:
|
1 2 |
rsync -avzh user@192.168.0.141:/root/rpmpkgs /tmp/myrpms |
5. Rsync Qua SSH
Dùng option -e ssh để chỉ định rõ giao thức SSH. Toàn bộ dữ liệu truyền qua kênh mã hóa, kể cả password:
|
1 2 |
rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination |
6. Copy File Từ Remote Về Local Qua SSH
|
1 2 |
rsync -avzhe ssh user@192.168.0.141:/root/anaconda-ks.cfg /tmp |
7. Copy File Từ Local Lên Remote Qua SSH
|
1 2 |
rsync -avzhe ssh backup.tar.gz user@192.168.0.141:/backups/ |
8. Hiển Thị Tiến Trình Transfer
Thêm –progress để xem từng file đang transfer và tốc độ theo thời gian thực:
|
1 2 |
rsync -avzhe ssh --progress /root/rpmpkgs user@192.168.0.141:/root/rpmpkgs |
9. Chỉ Include File Theo Extension
Chỉ sync những file có extension cụ thể, bỏ qua tất cả file còn lại:
|
1 2 |
rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/ |
10. Exclude File Theo Extension
Bỏ qua những file có extension cụ thể, sync tất cả file còn lại:
|
1 2 |
rsync -avz --exclude='*.log' /path/to/source/ user@remote:/path/to/destination/ |
11. Kết Hợp Include Và Exclude
Ví dụ: chỉ sync những file bắt đầu bằng chữ R, bỏ qua tất cả còn lại:
|
1 2 |
rsync -avze ssh --include 'R*' --exclude '*' user@192.168.0.141:/var/lib/rpm/ /root/rpm |
Thứ tự quan trọng: –include phải đặt trước –exclude, rsync xử lý rule theo thứ tự từ trên xuống.
12. Dùng Option –delete Để Xóa File Không Còn Ở Source
Khi muốn destination hoàn toàn khớp với source — file nào không còn ở source sẽ bị xóa ở destination:
|
1 2 |
rsync -avz --delete user@192.168.0.141:/var/lib/rpm/ /root/rpm/ |
Dùng cẩn thận: option này xóa thật, không có trash. Kết hợp với –dry-run ở ví dụ 15 để kiểm tra trước.
13. Giới Hạn Kích Thước File Transfer
Chỉ transfer những file nhỏ hơn hoặc bằng giới hạn chỉ định — hữu ích khi không muốn sync file quá lớn:
|
1 2 |
rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ user@192.168.0.141:/root/tmprpm |
14. Tự Động Xóa File Source Sau Khi Transfer
Hữu ích khi cần chuyển file sang backup server rồi dọn sạch file gốc — không cần xóa thủ công sau khi sync xong:
|
1 2 |
rsync --remove-source-files -zvh backup.tar.gz user@192.168.0.141:/tmp/backups/ |
15. Dry Run — Kiểm Tra Trước Khi Thực Thi
Chạy thử để xem rsync sẽ làm gì mà không thay đổi bất kỳ file nào. Nên dùng trước khi chạy lệnh có –delete hoặc –remove-source-files:
|
1 2 |
rsync --dry-run --remove-source-files -zvh backup.tar.gz user@192.168.0.141:/tmp/backups/ |
Output có dòng (DRY RUN) ở cuối — nếu kết quả đúng như mong muốn thì bỏ –dry-run và chạy lại.
16. Giới Hạn Bandwidth Khi Transfer
Dùng –bwlimit để giới hạn tốc độ I/O, tránh rsync chiếm hết băng thông ảnh hưởng các service khác. Đơn vị là KB/s:
|
1 2 |
rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ user@192.168.0.141:/root/tmprpm/ |
Mặc định rsync chỉ sync các block đã thay đổi. Nếu muốn force sync toàn bộ file (bất kể đã thay đổi hay chưa), thêm option -W:
|
1 2 |
rsync -zvhW backup.tar /tmp/backups/backup.tar |
Tổng Kết
Rsync command là công cụ không thể thiếu trong bộ kỹ năng của bất kỳ sysadmin hay DevOps nào làm việc trên Linux. Từ sync nội bộ, backup định kỳ, đến mirror giữa hai server — rsync xử lý được hết với hiệu suất cao và tiêu tốn băng thông tối thiểu nhờ cơ chế delta transfer.
Để xem đầy đủ tất cả option có sẵn, dùng lệnh man rsync hoặc tham khảo tài liệu chính thức tại linux.die.net/man/1/rsync.
Xem thêm các bài thủ thuật Linux tại tungle.blog và chuyên mục Thủ thuật, hoặc bài liên quan về backup và đồng bộ dữ liệu trên Linux.
Bạn đang dùng rsync cho mục đích gì — backup, deploy hay mirror server? Để lại bình luận bên dưới.