Sử dụng Rsync để đồng bộ file trên Linux (CentOS – Ubuntu)

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.

Mô hình Lab

su dung rsync de dong bo file linux 2

Trong bài viết này, Zhost sẽ sử dụng 02 Server chạy CentOS 7 để thực hiện đồng bộ file bằng Rsync.

    • Linux Server 01: 10.10.10.11
    • Linux Server 02: 10.10.10.12

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. 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/ [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/zhost/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/zhost/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@zhost]# 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--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.

Zhost chúc các bạn thành công!