Rsync Công Cụ Đồng Bộ Dữ Liệu Trên Linux
Rsync (Remote Sync) là một công cụ dùng để sao chép và đồng bộ file/thư mục được dùng rất phổ biến. Với sự trợ giúp của rsync, bạn có thể đồng bộ dữ liệu trên local hoặc giữa các server với nhau một cách dễ dàng.
Tính năng nổi bật 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
Hướng Dẫn Cài đặt Rsync
Trên Red Hat/CentOS
yum install rsync -y
Trên Debian/Ubuntu
apt-get install rsysnc -y
Cách Sử dụng Rsync
Cấu trúc cơ bản Rsync
rsync [options] <source> <destination>
Trong đó:
- Source: dữ liệu nguồn
- Destination: dữ liệu đích
- Options: một số tùy chọn thêm
Các tham số cần biết khi dùng Rsync
-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-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. Trong bài viết này, Zhost sẽ sử dụng Copy cho ngắn ngọn.
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/ root@10.10.10.12:/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 root@10.10.10.12:/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 root@10.10.10.12:/root/access.log /home/hnitmedia/log/
Lệnh trên copy file /root/access.log
trên Remote Server 10.10.10.12
về thư mục /home/zhost/log/
trên máy Local.
Copy file/folder từ Local lên Remote Server qua SSH
rsync -avzhe ssh /home/hnitmedia/data.tar root@10.10.10.12:/backups/
Nếu sử dụng port SSH custom, không phải port tiêu chuẩn 22, bạn cần chỉ rõ port muốn dùng trong câu lệnh. Ví dụ với port 2222 của hnitmedia câu lệnh sẽ như sau:
rsync -avzhe "ssh -p 2222" /home/hnitmedia/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@hnitmedia]# rsync -avzhe ssh --progress /home/rpmpkgs root@10.10.10.12:/root/rpmpkgs
root@192.168.0.100'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 '*' root@10.10.10.12:/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 root@10.10.10.12:/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 root@10.10.10.12:/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 root@10.10.10.12:/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.