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.
Nội dung bài viết
I. Tính năng nổi bật của Rsync
1. Copy file và thư mục trên local
2. Copy file và thư mục giữa các server
4. Hiển thị tiến trình trong khi transfer dữ liệu với rsync
5. Sử dụng tùy chọn –include và –exclude
7. Giới hạn dung lượng tối đa của file được đồng bộ
I. 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.
II. Cài đặt Rsync
Rsync được cài đặt dễ dàng với một dòng lệnh:
– Trên Red Hat/CentOS
yum install rsync
– Trên Debian/Ubuntu
apt-get install rsysnc
III. Sử dụng Rsync
Câu lệnh căn bản của 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.
Rsync không tự động chạy nên thường được dùng kết hợp với crontab. Tiếp theo mình sẽ giới thiệu một số ví dụ thường dùng với Rsync và kết thúc bài là script mình dùng để tự động backup toàn bộ VPS hàng ngày.
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 mình sẽ sử dụng duy nhất khái niệm Copy cho ngắn gọn nhé.
1. Copy file và thư mục trên local
Copy file trên local
[root@hocvps]# rsync -zvh backup.tar /tmp/backups/ created directory /tmp/backups backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Ví dụ trên copy file backup.tar sang thư mục /tmp/backups/ trên cùng một máy. Như bạn thấy thư mục đích chưa có nên rsync tự động tạo trước khi copy.
Copy thư mục trên local
[root@hocvps]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm rpmpkgs/nagios-3.5.0.tar.gz rpmpkgs/nagios-plugins-1.4.16.tar.gz sent 4.99M bytes received 92 bytes 3.33M bytes/sec total size is 4.99M speedup is 1.00
Câu lệnh trên copy toàn bộ file từ thư mục /root/rpmpkgs
đến thư mục /tmp/backups/
trên cùng một máy.
2. Copy file và thư mục giữa các server
Copy thư mục từ Local lên Remote Server
[root@hocvps]# rsync -avz rpmpkgs/ root@192.168.0.101:/home/ root@192.168.0.101's password: sending incremental file list ./ httpd-2.2.3-82.el5.centos.i386.rpm mod_ssl-2.2.3-82.el5.centos.i386.rpm nagios-3.5.0.tar.gz nagios-plugins-1.4.16.tar.gz sent 4993369 bytes received 91 bytes 399476.80 bytes/sec total size is 4991313 speedup is 1.00
Lệnh trên copy thư mục rpmpkgs
từ Local lên Remote Server có IP 192.168.0.101
, lưu ở thư mục /home/
Copy thư mục từ Remote Server về Local
[root@hocvps]# rsync -avzh root@192.168.0.100:/home/tarunika/rpmpkgs /tmp/myrpms root@192.168.0.100's password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm rpmpkgs/nagios-3.5.0.tar.gz rpmpkgs/nagios-plugins-1.4.16.tar.gz sent 91 bytes received 4.99M bytes 322.16K bytes/sec total size is 4.99M speedup is 1.00
Lệnh trên sẽ copy dữ liệu ở thư mục /home/tarunika/rpmpkgs
trên Remote Server 192.168.0.100
về máy Local lưu ở thư mục /tmp/myrpms
3. Rsync 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.
Copy file từ Remote Server về Local Server qua SSH
Để 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
.
[root@hocvps]# rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/ root@192.168.0.100's password: receiving incremental file list install.log sent 30 bytes received 8.12K bytes 1.48K bytes/sec total size is 30.74K speedup is 3.77
Lệnh trên copy file /root/install.log
trên Remote Server 192.168.0.100
về thư mục /tmp/
trên máy Local.
Copy file từ Local lên Remote Server qua SSH
[root@hocvps]# rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/ root@192.168.0.100's password: sending incremental file list backup.tar sent 14.71M bytes received 31 bytes 1.28M bytes/sec total size is 16.18M speedup is 1.10
[root@hocvps]# rsync -avzhe "ssh -p 2222" root@192.168.0.100:/root/install.log /tmp/
4. Hiển thị tiến trình trong khi transfer dữ liệu với rsync
Để hiển thị tiến độ transfer dữ liệu, bạn có thể sử dụng tùy chọn --progress
[root@hocvps]# rsync -avzhe ssh --progress /home/rpmpkgs root@192.168.0.100:/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
5. Sử dụng tùy chọn –include và –exclude
Hai tùy chọn này cho phép chúng ta thêm hoặc bớt file hoặc thư mục trong quá trình đồng bộ dữ liệu.
[root@hocvps]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/var/lib/rpm/ /root/rpm root@192.168.0.101's password: receiving incremental file list created directory /root/rpm ./ Requirename Requireversion sent 67 bytes received 167289 bytes 7438.04 bytes/sec total size is 434176 speedup is 2.59
Ở 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.
6. Sử dụng tùy chọn –delete
Nếu muố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 transfer, bạn hãy sử dụng tùy chọn --delete
.
[root@hocvps]# touch test.txt [root@hocvps]# rsync -avz --delete root@192.168.0.100:/var/lib/rpm/ . Password: receiving file list ... done deleting test.txt ./ sent 26 bytes received 390 bytes 48.94 bytes/sec total size is 45305958 speedup is 108908.55
Server đích đã có file test.txt
, trong quá trình đồng bộ với option --delete
, file sẽ bị xóa.
7. Giới hạn dung lượng tối đa của file được đồng bộ
Để giới hạn những file lớn được đồng bộ, bạn có thể sử dụng option --max-size
[root@hocvps]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.100:/root/tmprpm root@192.168.0.100's password: sending incremental file list created directory /root/tmprpm ./ Conflictname Group Installtid Name Provideversion Pubkeys Requireversion Sha1header Sigmd5 Triggername __db.001 sent 189.79K bytes received 224 bytes 13.10K bytes/sec total size is 38.08M speedup is 200.43
8. Tự động xóa dữ liệu nguồn sau khi đồng bộ 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 lựa chọn --remove-source-files
[root@hocvps]# rsync --remove-source-files -zvh backup.tar /tmp/backups/ backup.tar sent 14.71M bytes received 31 bytes 4.20M bytes/sec total size is 16.18M speedup is 1.10 [root@hocvps]# ll backup.tar ls: backup.tar: No such file or directory
9. Chạy thử nghiệm Rsync
Nếu bạn không chắc câu lệnh có thực hiện chính xác những gì mong muốn hay không, hãy thêm tùy chọn --dry-run
.
Rsync lúc này sẽ không thay đổi gì dữ liệu cả mà chỉ show output mà thôi. Nếu mọi thứ hoạt động ổn, hãy bỏ tùy chọn --dry-run
ra khỏi câu lệnh.
root@hocvps]# rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/ backup.tar sent 35 bytes received 15 bytes 100.00 bytes/sec total size is 16.18M speedup is 323584.00 (DRY RUN)
10. Giới hạn bandwidth
[root@hocvps]# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.100:/root/tmprpm/ root@192.168.0.100's password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
IV. Tổng kết
Ứng dụng của Rsync có rất nhiều, bạn có thể đồng bộ hóa file giữa các thư mục, giữa các server qua đó backup server sang một server khác hoặc synchronize real time. Tùy nhu cầu mà bạn hãy ứng dụng Rsync cho hiệu quả.
Chúc bạn thành công.
Mình tạo máy ảo ubuntu để tải data từ server về, một điều mà mình thấy khá bất cập là rsync tạo ra file log có kích thước lớn, cho 1 sv 500gb thì rsync có thể tự động sinh ra tới 10gb log data. Mình cũng không biết trên máy chủ có sinh ra như vậy không, nếu sinh ra như vậy thì quá tốn tài nguyên sv (Ghi chú là mình sử dụng share folder chứ không lưu data trực tiếp lên máy ảo).
Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.2]
Mình gặp lỗi này cho dù các thông số chính xác rồi,
mình cũng gặp lỗi này, không biết bạn đã tìm được cách khắc phục chưa, có gì chỉ mình cách khắc phục với, nó bị làm sao vậy
Mình rsync over SSH từ VPS về NAS tại local. NAS local thì không tạo ssh keygent được, mỗi lần rsync phải nhập pass?
Xin chào ad,
Nhờ ad tư vấn giúp mình vấn đề này: Mình đang có 1 vps đang chạy hosting, vì sử dụng gói đắt tiền nên mình cần xuống gói rẻ hơn, nhưng do không được phép nên mình đang nghĩ đến việc copy “toàn bộ file” trên vps cũ sang vps mới . Xin hỏi ad có cách nào nhanh nhất phù hợp với múc đích của mình không nhỉ?
Xin cảm ơn!
Không có rồi. Và cũng chỉ copy dữ liệu web và database chứ việc copy toàn bộ file không để làm gì
Chào Admin!
Cho mình hỏi xíu. Script hocvps mình có chặn IP khi quá nhiều lần đăng nhập không thành công không?
Mình dùng Rsync để copy dữ liệu giữa 2 VPS thì báo lỗi do trước đó mình nhập password server remote sai.
Mình có test lại lệnh ssh root@xx.xx.xx.xx -p 2222 trên các vps khác thì bình thường chỉ riêng cái VPS cần dùng k kết nối được.
Lỗi connect to host xx.xx.xx.xx port 2222: Connection refused
Có chặn bạn nhé. Chặn qua Fail2BAn
https://hocvps.com/cai-dat-fail2ban-tren-centos/
mình muốn thêm vào crontab mà vướn password thì phải làm sao bạn nhỉ ?
Bạn tham khảo bài viết này nhé. https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password
Để đăng nhập dùng luôn SSH Keys, không cần nhập password
Tạo SSH Keys thì có bài viết này https://hocvps.com/ssh-keys-login/
cám ơn bác mình làm dc rồi,
@Luân Trần
Mình dùng rsync để backup nhưng hiện đang gặp phải vấn đề này, không biết có bạn nào có cách khăc phục không chỉ mình phát. Đó là khi rsync các file tiếng việt (kiểu như ảnh của website, ví dụ: một-cô-gái-đẹp.jpg) thì sau khi rsync tên file lỗi hết, những chữ cái có dấu biến thành ?? hết.
Mình cũng lục tung internet lên rồi mà chưa giải quyết được, cũng thử dùng mấy công cụ khác như rclone nhưng mà chậm lắm, mỗi ngày mình phải backup 10 con server = 10GB dữ liệu, chỉ có rsync là nhanh nhất, hiệu quả nhất
Thực sự thì Linux hỗ trợ tiếng việt không tốt nên rsync không xử lý được thì cũng đành chịu thôi. Bình thường file/thư mục cả Windows/Linux thì tối kị cũng không nên đặt tên tiếng việt. Bạn dùng rclone được thì dùng chứ mình cũng k có bphap gì
Sài cái này tự tạo 1 CDN thì ổn k Luân nhỉ 😀 Server để local Singapore đôi khi load ảnh hơi delay 😀
Chào bạn,
Mình dùng lệnh Rsync này được rồi nhưng có thể xuất ra 1 file log để xem lại tiến trình xử lý của nó được không
--progress
có giúp hiển thị tiến trình mà? Còn nếu bạn sử dụng qua crontab thì có lưu log trong crontabLocal ở đây được hiểu là ở đâu. Máy tính chúng ta hay VPS /local
Local ở đây hiểu là ở bản thân của VPS nhé bạn. Ví dụ sync từ thư mục này sang thư mục khác nhưng vẫn ở VPS để lưu trữ
Em đồng bộ nhưng nó thiếu ko đủ dử liệu thì sao anh
Quá trình transfer có thông báo gì không. Bạn thử đồng bộ lại coi
Cái này mình xài 1 server riêng cài rsync để backup online có ổn không?
VD 1 server 100g. Backup rồi restore tốc độ thế nào bạn?
Mình nghe bảo có snapshot, nhanh hơn nhiều?
Quá ổn nhé bạn, snapshot là giải pháp của nhà cung cấp, nên sẽ nhanh hơn.
Tuy nhiên phải tạo snapshot thủ công. Bạn có thể dùng Rsync với chạy cronjob để tự động sao lưu hàng ngày, hàng giờ, mỗi phút nếu muốn.
Không có example về crontab nhỉ, để auto input password vào nếu xài rsync giữa các server.
Server mình tắt password rồi, có cách gì cho rsync xài ssh key không?
Bác Luân ơi, khi chạy cronjob làm sao nhập password vậy bác, chỉ em với
Password gì bạn nhỉ?
Mình backup qua vps dự phòng, nên từ vps dự phòng lần phải có pass root của vps chính đó bác
Cái khúc mình chạy lệnh xong enter là kêu nhập password đó
À, bạn tham khảo bài này thử coi: https://hocvps.com/backup-vps-voi-duplicity/
Đoạn Duplicity có copy SSH key lên VPS backup đó.
bạn gennerate ssh key của server cần backup ra xong add vào server lưu trữ file backup, khi rsync vào qua ssh thì không cần nhập pass nữa
Cái này ứng dụng vào việc backup nhiều VPS liền 1 lúc có được không a nhỉ?
Được nhé, a đang dùng cái này để backup VPS.