Rsync là gì?
Rsync (remote sync) là công cụ đồng bộ file, thư mục trên Linux. Nó sử dụng thuật toán khi copy dữ liệu sao cho dữ liệu phải copy là nhỏ nhất (chỉ copy những gì thay đổi giữa nguồn và gốc), khi đồng bộ nó giữ nguyên mọi thuộc tính của file, thư mục (từ chủ sở hữu, quyền truy cập file …).
Một số ưu điểm của Rsync
- Rsync hỗ trợ copy giữ nguyên thông số của files/folder như Symbolic links, Permissions, TimeStamp, Owner và Group.
- Rsync nhanh hơn scp vì Rsync sử dụng giao thức remote-update, chỉ transfer những dữ liệu thay đổi mà thôi.
- Rsync tiết kiệm băng thông do sử dụng phương pháp nén và giải nén khi transfer.
- Rsync không yêu cầu quyền super-user.
Cài đặt Rsync
Rsync được cài đặt dễ dàng với một dòng lệnh:
Red Hat/CentOS
yum install rsync -y
Debian/Ubuntu
apt-get install rsysnc -y
Sử dụng Rsync để đồng bộ file
Cấu trúc cú pháp
Cú pháp cơ bản của Rsync như sau:
rsync [option] <Source> <Destination>
Trong đó:
- rsync: là lệnh gọi công cụ rsync
- [option]: là các tuỳ trọn khi thực hiện trong quá trình truyền tải file
- <Source>: Là đường dẫn đến file/folder nguồn thực hiện truyền tải.
- <Destination>: Là đường dẫn đích lưu trữ file/folder khi truyền tải.
Một số Option thường sử dụng trong Rsync như:
-v
: hiển thị trạng thái kết quả-r
: copy dữ liệu recursively, nhưng không đảm bảo thông số của file và thư mục.-a
: cho phép copy dữ liệu recursively, đồng thời giữ nguyên được tất cả các thông số của thư mục và file.-z
: nén dữ liệu khi transfer, tiết kiệm băng thông tuy nhiên tốn thêm một chút thời gian nén.-h
: human-readable, output kết quả dễ đọc.--delete
: xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.--exclude
: loại trừ ra những dữ liệu không muốn truyền đi, nếu bạn cần loại ra nhiều file hoặc folder ở nhiều đường dẫn khác nhau thì mỗi cái bạn phải thêm--exclude
tương ứng.
Lưu ý:
- Bạn có thể kết hợp nhiều option vào một lệnh rsync để tối ưu quá trình đồng bộ file.
- Rsync không tự động chạy nên thường được dùng kết hợp với crontab.
- Khi lần đầu chạy rsync, toàn bộ dữ liệu nguồn sẽ được copy đến server đích, từ lần chạy sau trở đi chỉ những dữ liệu chưa được copy mới được transfer – đây là quá trình đồng bộ dữ liệu. Do đó, bạn có thể hiểu rsync thực hiện việc copy hoặc đồng bộ đều đúng.
Copy file và thư mục trên local
rsync -avzh backup.tar /tmp/backups/
Lênh trên sẽ copy file backup.tar vào thư mục /tmp/backups/. Nếu thư mục đích chưa có sẽ được tạo tự động.
Copy thư mục trên local
rsync -avzh /root/rpmpkgs /tmp/backups/
Lệnh trên sẽ copy thư mục /root/rpmpkgs đến thư mục /tmp/backups/ và giữ nguyên thuộc tính của folder và các file đã copy.
Copy thư mục từ Local lên Remote Server
rsync -avzh rpmpkgs/ [email protected]:/home/
Lệnh trên copy thư mục rpmpkgs
từ Server Local lên Remote Server có IP 10.10.10.12
, lưu ở thư mục /home/
Copy thư mục từ Remote Server về Local
rsync -avzh [email protected]:/home/tarunika/rpmpkgs /tmp/myrpms
Lệnh trên sẽ copy dữ liệu ở thư mục /home/tarunika/rpmpkgs
trên Remote Server 10.10.10.12
về máy Server Local lưu ở thư mục/tmp/myrpms
Copy file/folder từ Remote Server về Local Server qua SSH
Với Rsync, bạn có thể transfer qua giao thức SSH, qua đó dữ liệu được bảo mật an toàn hơn.
Để xác định giao thức sẽ sử dụng với rsync, bạn cần thêm tùy chọn -e
cùng với tên giao thức, ở đây là ssh
rsync -avzhe ssh [email protected]:/root/access.log /home/danglee/log/
Lệnh trên copy file /root/access.log
trên Remote Server 10.10.10.12
về thư mục/home/danglee/log/
trên máy Local.
Copy file/folder từ Local lên Remote Server qua SSH
rsync -avzhe ssh /home/danglee/data.tar [email protected]:/backups/
Hiển thị tiến trình trong khi Copy dữ liệu
Để hiển thị tiến độ transfer dữ liệu, bạn có thể sử dụng option --progress
[root@danglee]# rsync -avzhe ssh --progress /home/rpmpkgs [email protected]:/root/rpmpkgs
[email protected]'s password:
sending incremental file list
created directory /root/rpmpkgs
rpmpkgs/
rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm
1.02M 100% 2.72MB/s 0:00:00 (xfer#1, to-check=3/5)
rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm
99.04K 100% 241.19kB/s 0:00:00 (xfer#2, to-check=2/5)
rpmpkgs/nagios-3.5.0.tar.gz
1.79M 100% 1.56MB/s 0:00:01 (xfer#3, to-check=1/5)
rpmpkgs/nagios-plugins-1.4.16.tar.gz
2.09M 100% 1.47MB/s 0:00:01 (xfer#4, to-check=0/5)
sent 4.99M bytes received 92 bytes 475.56K bytes/sec
total size is 4.99M speedup is 1.00
Tùy chọn –include và –exclude
Hai tùy chọn --include
và --exclude
cho phép chúng ta thêm/bớt file hoặc thư mục trong quá trình đồng bộ dữ liệu.
rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm
Ở ví dụ trên, Rsync include toàn bộ những file hoặc thư mục có tên bắt đầu bởi ký tự ‘R’ và exclude toàn bộ những file hoặc thư mục còn lại.
Tùy chọn –delete
Tuỳ chọn --delete
cho phép bạn xóa một file hoặc thư mục không có ở thư mục nguồn, mà lại xuất hiện ở thư mục đích trong quá trình copy.
rsync -avzhe ssh --progress --delete /home/rpmpkgs [email protected]:/root/rpmpkgs
Xóa dữ liệu ở nguồn sau khi copy thành công
Để rsync tự động xóa dữ liệu sau khi đồng bộ lên server đích thành công, bạn có thể sử dụng option --remove-source-files
rsync -avzhe ssh --remove-source-files /home/rpmpkgs [email protected]:/root/rpmpkgs
Giới hạn băng thông khi chạy Rsync
Để giới hạn băng thông mạng khi chạy Rsync, bạn có thể sử dụng option --bwlimit
đơn vị tính là KB/s.
rsync -avzhe ssh --bwlimit=1024 /home/rpmpkgs [email protected]:/root/rpmpkgs
Câu lệnh Rsync sẽ giới hạn băng thông truyền tải là 1024KB/s = 1MB/s