Lệnh rsync trên Linux: tùy chọn | ví dụ sử dụng

Thông báo tiếp thị liên kết Ver 3.1
Thông báo tiếp thị liên kết Ver 3.2 (chỉ trên di động)
Môi trường thử nghiệmHọ RHELAlmaLinux 9.8Tài khoản rootKiểm tra ngày 2026-10-07

Nếu để đồng bộ thư mục giữa hai server mà lần nào cũng sao chép lại toàn bộ, thì dù chỉ có một tệp thay đổi, lượng dữ liệu truyền vẫn bằng toàn bộ dung lượng. Lệnh rsync là viết tắt của remote sync; lệnh này so sánh nguồn và đích rồi chỉ truyền những tệp khác nhau, và hoạt động theo cùng một cách giữa các thư mục cục bộ cũng như giữa các server kết nối qua SSH. Bài viết này tổng hợp cách dùng cơ bản, các tùy chọn và ví dụ của hai phương thức kết nối: SSH và rsync daemon.

Kết quả trong bài này được lấy từ rsync 3.2.7 trên AlmaLinux 9.8; nếu chưa cài, hãy cài bằng trình quản lý gói.

# Họ RHEL
dnf -y install rsync
# Họ Debian
apt -y install rsync

✅ Cách dùng cơ bản

Cách dùng cơ bản như sau.

rsync -tùy chọn nguồn đích

Giống như lệnh cp, bạn ghi nguồn trước, đích sau. Nếu thêm dấu gạch chéo [/] vào cuối nguồn thì chỉ nội dung bên trong thư mục được đưa vào đích; nếu không thêm thì cả thư mục sẽ được đưa vào.

~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.png

Chạy lại cùng lệnh đó thì danh sách tệp sẽ trống và số byte sent giảm xuống còn vài trăm byte, vì các tệp có cùng kích thước và thời gian sửa đổi sẽ được bỏ qua.

~]# rsync -av www/ backup/
sending incremental file list

sent 166 bytes  received 13 bytes  358.00 bytes/sec
total size is 3,015  speedup is 16.84

Nếu chỉ dùng -r mà không có -a, thời gian sửa đổi sẽ không được giữ lại, nên lần chạy sau sẽ gửi lại chính các tệp đó. Khi đồng bộ thư mục, hãy mặc định thêm -a.

Tùy chọn -n chỉ hiển thị những tệp sẽ thay đổi mà không truyền gì, và cuối kết quả có thêm [(DRY RUN)]. Với các tùy chọn xóa tệp ở đích như -⁠-delete, hãy kiểm tra trước bằng -n rồi mới chạy thật.

~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html

sent 188 bytes  received 39 bytes  454.00 bytes/sec
total size is 3,013  speedup is 13.27 (DRY RUN)

✅ Tùy chọn lệnh rsync & trình mô phỏng

Tùy chọnMô tả
-a--archiveSao chép cả thư mục con và giữ nguyên quyền, chủ sở hữu, thời gian sửa đổi và liên kết tượng trưng (giống -rlptgoD)
-v--verboseIn ra tên các tệp đã truyền và lượng dữ liệu đã truyền
-z--compressNén dữ liệu tệp trong lúc truyền
-r--recursiveSao chép cả thư mục con (có trong -a)
-t--timesGiữ nguyên thời gian sửa đổi (có trong -a). Đây là căn cứ để quyết định tệp nào được bỏ qua ở lần chạy sau
-n--dry-runChỉ in ra các tệp sẽ thay đổi mà không truyền, và hiển thị (DRY RUN) ở cuối
-u--updateBỏ qua các tệp mới hơn ở phía đích
-h--human-readableIn số byte theo đơn vị K·M·G
-PGiống --partial --progress. Hiển thị tiến độ của từng tệp và tiếp tục các lần truyền bị gián đoạn
-i--itemize-changesIn ra các thay đổi của từng tệp dưới dạng ký hiệu>f+++++++++ tệp mới · >f.st.⁠.⁠.⁠.⁠.⁠. đổi kích thước và thời gian · *deleting đã xóa
-e--rsh=COMMANDChỉ định shell từ xa-e 'ssh -p 2222 -i /root/.ssh/key.pem'
--deleteXóa ở đích những tệp không có trong nguồn (cần -r hoặc -a)
--exclude=PATTERNLoại trừ các tệp và thư mục khớp với mẫu--exclude '*.tmp' --exclude 'cache/'
--include=PATTERNĐặt trước --exclude để đưa riêng mẫu đó ra khỏi danh sách loại trừ
--max-size=SIZEKhông truyền các tệp lớn hơn kích thước chỉ định (--min-size dành cho tệp nhỏ hơn)--max-size=3M --min-size=10k
--bwlimit=RATEGiới hạn tốc độ truyền, đơn vị là KiB/s
--statsIn thống kê số tệp và lượng dữ liệu truyền
Trình mô phỏng lệnh rsyncrsync 3.2.7
[root@server work]#
Chỉ chạy trong trình duyệt và không đụng đến tệp thật. Thư mục www là nguồn, thư mục backup là bản sao lưu lần trước; hãy nhập rsync với các tùy chọn khác nhau rồi kiểm tra kết quả bằng ll, cat và diff. Địa chỉ từ xa (user@host:đường_dẫn) chỉ được nhận về mặt cú pháp, không kết nối thật. Các thay đổi sẽ trở lại như ban đầu khi bạn nhấn [Start over]. Dùng phím ↑↓ để gọi lại các lệnh đã gõ trước đó, và nhập uknew help để xem các lệnh có thể dùng.

✅ Phương thức kết nối: SSH và rsync daemon

Có hai phương thức kết nối để đồng bộ với server từ xa. Một dấu hai chấm [:] sau host là đi qua SSH, còn hai dấu hai chấm [::] là kết nối thẳng tới rsync daemon ở cổng 873.

Phân loạiPhương thức SSH (:)Phương thức rsync daemon (::)
Cú pháp kết nốirsync -tùy chọn user@host:/đường_dẫn /đường_dẫn_cục_bộrsync -tùy chọn host::module/đường_dẫn /đường_dẫn_cục_bộ
CổngCổng SSH (mặc định 22)873
Mã hóaMã hóa bằng SSHKhông mã hóa
Xác thựcKhóa SSH hoặc mật khẩuhosts allow trong rsyncd.conf, có thể thêm tài khoản và mật khẩu (tùy chọn)
Thiết lập phía serverKhông cần (chỉ cần kết nối SSH được là dùng được)Cài rsync-daemon, /etc/rsyncd.conf, mở cổng 873
Mục đíchSao lưu và triển khai giữa các server (lựa chọn mặc định)Nhân bản (mirror) trong mạng nội bộ mà không cấp tài khoản SSH

🔲 Phương thức SSH

Nếu server kết nối được qua SSH thì có thể dùng ngay mà không cần thiết lập gì phía server. Khi dùng cổng khác hoặc dùng tệp khóa, hãy đưa nguyên lệnh ssh vào tùy chọn -e.

# Cục bộ → từ xa
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# Từ xa → cục bộ
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# Chỉ định cổng SSH và tệp khóa
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Lệnh rsync: kết quả chạy từ xa về cục bộ

Để loại bỏ một số tệp hoặc thư mục, hãy thêm -⁠-exclude cho từng mẫu, hoặc gom các mẫu trong dấu ngoặc nhọn để ghi một lần.

rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
Lệnh rsync: từ xa về cục bộ, loại trừ một số tệp và thư mục

🔲 Phương thức rsync daemon

rsync daemon cho phép truy cập theo từng module qua cổng 873 mà không cần tài khoản SSH; vì dữ liệu truyền đi không được mã hóa nên nó được dùng giữa các server trong cùng một mạng nội bộ.

Trên AlmaLinux 9, hãy cài gói rsync-daemon rồi bật dịch vụ. Nếu server dùng firewalld thì mở cổng 873; với server cloud thì mở trong tường lửa trên console. Cách dùng xinetd trên RHEL 8 trở về trước đã không còn ở bản 9.

dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload

Ghi tên module, đường dẫn và các host được phép vào tệp cấu hình [/etc/rsyncd.conf]. Nếu đặt read only là yes, phía từ xa chỉ có thể lấy dữ liệu về.

[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30

Từ phía từ xa, nếu chỉ ghi hai dấu hai chấm sau host thì sẽ hiện danh sách module, còn ghi thêm tên module thì sẽ hiện danh sách tệp bên trong module đó.

~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x          4,096 2025/06/12 22:14:39 .
drwxr-xr-x          4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x          4,096 2025/06/12 22:14:39 2server_data

Khi sao chép, dữ liệu được nhận theo dạng [host::module/đường_dẫn]. -⁠-delete xóa ở đích những tệp không có trong nguồn, còn -⁠-include chỉ đưa những mục đặt trước -⁠-exclude ra khỏi danh sách loại trừ.

~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/

sent 58 bytes  received 332 bytes  780.00 bytes/sec
total size is 442  speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/
Lệnh rsync: từ xa về cục bộ, dùng tùy chọn delete
Lệnh rsync: từ xa về cục bộ, dùng các tùy chọn delete, include và exclude

Trên server bật SELinux, việc truy cập đường dẫn module có thể bị chặn với lỗi [Permission denied (13)]. Trong thử nghiệm, lệnh đã chạy được sau khi tắt SELinux bằng [setenforce 0].

~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes  received 90 bytes  65.33 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see Trước errors) (code 23) at main.c(1658) [Receiver=3.1.2]

-⁠-bwlimit giới hạn tốc độ truyền theo đơn vị KiB/s, còn thêm -P thì xem được cả tiến độ của từng tệp. -⁠-max-size và -⁠-min-size chỉ truyền các tệp nằm trong khoảng kích thước chỉ định.

rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
Lệnh rsync: từ xa về cục bộ, giới hạn băng thông 100kb và xem tiến độ bằng tùy chọn -P

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 3   +   1   =