Cách sử dụng Lệnh Rsync trong Linux

Tác giả Network Engineer, T.M.Một 04, 2021, 05:09:52 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 3 Khách đang xem chủ đề.

Cách sử dụng Lệnh Rsync trong Linux


Rsync (Đồng bộ hóa từ xa) là lệnh được sử dụng phổ biến nhất để sao chép và đồng bộ hóa các tập tin và thư mục từ xa cũng như cục bộ trong các hệ thống Linux / Unix.

Với sự trợ giúp của lệnh rsync, bạn có thể sao chép và đồng bộ hóa dữ liệu của mình từ xa và cục bộ trên các thư mục, đĩa và mạng, thực hiện sao lưu dữ liệu và nhân bản giữa hai máy Linux.

Bài viết này giải thích 10 cách sử dụng cơ bản và nâng cao của lệnh rsync để chuyển các tập tin của bạn từ xa và cục bộ trong các máy chạy Linux . Bạn không cần phải là người dùng root để chạy lệnh rsync.

Một số ưu điểm và tính năng của lệnh Rsync:

  • Nó sao chép và đồng bộ hóa các tập tin đến hoặc từ một hệ thống từ xa một cách hiệu quả.
  • Hỗ trợ sao chép liên kết, thiết bị, chủ sở hữu, nhóm và quyền.
  • Nó nhanh hơn scp (sao chép an toàn) vì rsync sử dụng giao thức cập nhật từ xa cho phép chỉ chuyển sự khác biệt giữa hai tập hợp tập tin. Lần đầu tiên, nó sao chép toàn bộ nội dung của một tập tin hoặc một thư mục từ nguồn đến đích nhưng từ lần sau, nó chỉ sao chép các khối và byte đã thay đổi tới đích.
  • Rsync tiêu thụ ít băng thông hơn vì nó sử dụng phương pháp nén và giải nén trong khi gửi và nhận dữ liệu ở cả hai đầu.

Cú pháp cơ bản của lệnh rsync:

Mã nguồn [Chọn]
# rsync options source destination
Một số tùy chọn phổ biến được sử dụng với lệnh rsync:

  • -v: chi tiết
  • -r: sao chép dữ liệu một cách đệ quy nhưng không bảo toàn dấu thời gian và quyền trong khi truyền dữ liệu.
  • -a: chế độ lưu trữ, cho phép sao chép tập tin một cách đệ quy và nó cũng lưu giữ các liên kết tượng trưng, ​​quyền đối với tập tin, quyền sở hữu của người dùng và nhóm và dấu thời gian.
  • -z: nén dữ liệu tập tin.
  • -h: con người có thể đọc được, số đầu ra ở định dạng con người có thể đọc được.

Cài đặt Rsync trong Hệ thống Linux:

Chúng ta có thể cài đặt gói rsync với sự trợ giúp của lệnh sau trong bản phân phối Linux của bạn.

Mã nguồn [Chọn]
$ sudo apt-get install rsync   [On Debian/Ubuntu & Mint]
Mã nguồn [Chọn]
$ pacman -S rsync              [On Arch Linux]
Mã nguồn [Chọn]
$ emerge sys-apps/rsync        [On Gentoo]
Mã nguồn [Chọn]
$ sudo dnf install rsync       [On Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux]
Mã nguồn [Chọn]
$ sudo zypper install rsync    [On openSUSE]
1. Sao chép / đồng bộ hóa tập tin và thư mục cục bộ

1.1. Sao chép / đồng bộ hóa tập tin trên máy tính cục bộ

Lệnh sau sẽ đồng bộ một tập tin trên máy cục bộ từ vị trí này sang vị trí khác. Ở đây trong ví dụ này, tên tập tin backup.tar cần được sao chép hoặc đồng bộ hóa với thư mục /tmp/backups/

Mã nguồn [Chọn]
[ root @ vietnetwork ] # rsync -zvh backup.tar.gz /tmp/backups/
Mã nguồn [Chọn]
created directory /tmp/backups
backup.tar.gz

sent 224.54K bytes  received 70 bytes  449.21K bytes/sec
total size is 224.40K  speedup is 1.00


Trong ví dụ trên, bạn có thể thấy rằng nếu đích chưa tồn tại, rsync sẽ tự động tạo một thư mục cho đích.
 
1.2. Sao chép / đồng bộ hóa một thư mục trên máy tính cục bộ

Lệnh sau sẽ chuyển hoặc đồng bộ tất cả các tập tin từ một thư mục sang một thư mục khác trong cùng một máy. Ở đây trong ví dụ này, /root/rpmpkgs chứa một số tập tin gói rpm và bạn muốn thư mục đó được sao chép bên trong thư mục /tmp/backups/

Mã nguồn [Chọn]
[root@vietnetwork]# rsync -avzh /root/rpmpkgs /tmp/backups/
Mã nguồn [Chọn]
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.47M bytes  received 96 bytes  2.32M bytes/sec
total size is 3.74M  speedup is 1.08


2. Sao chép / đồng bộ tập tin và thư mục đến hoặc từ máy chủ

2.1. Sao chép Thư mục từ máy chủ cục bộ sang máy chủ từ xa

Lệnh này sẽ đồng bộ hóa một thư mục từ một máy cục bộ sang một máy từ xa. Ví dụ: có một thư mục trong máy tính cục bộ của bạn "rpmpkgs" chứa một số gói RPM và bạn muốn nội dung của thư mục cục bộ đó gửi đến một máy chủ từ xa, bạn có thể sử dụng lệnh sau.

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync -avzh /root/rpmpkgs [email protected]:/root/
Mã nguồn [Chọn]
The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
[email protected]'s password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.74M bytes  received 96 bytes  439.88K bytes/sec
total size is 3.74M  speedup is 1.00


2.2. Sao chép / đồng bộ hóa một thư mục từ xa với một máy cục bộ

Lệnh này sẽ giúp bạn đồng bộ hóa một thư mục từ xa với một thư mục cục bộ. Ở đây trong ví dụ này, một thư mục /root/rpmpkgs nằm trên một máy chủ từ xa đang được sao chép vào máy tính cục bộ của bạn trong /tmp/myrpms

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms
Mã nguồn [Chọn]
[email protected]'s password:
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 104 bytes  received 3.49M bytes  997.68K bytes/sec
total size is 3.74M  speedup is 1.07


3. Rsync qua SSH

Với rsync, chúng ta có thể sử dụng SSH (Secure Shell) để truyền dữ liệu, sử dụng giao thức SSH trong khi truyền dữ liệu của chúng ta, bạn có thể được đảm bảo rằng dữ liệu của mình đang được truyền trong một kết nối an toàn với mã hóa để không ai có thể đọc dữ liệu của bạn khi nó đang được truyền qua trên internet.

Ngoài ra, khi chúng ta sử dụng rsync, chúng ta cần cung cấp mật khẩu người dùng / root để thực hiện tác vụ cụ thể đó, vì vậy việc sử dụng tùy chọn SSH sẽ gửi thông tin đăng nhập của bạn theo cách được mã hóa để mật khẩu của bạn được an toàn.

3.1. Sao chép tập tin từ máy chủ từ xa sang máy chủ cục bộ bằng SSH

Để chỉ định một giao thức với rsync, bạn cần cung cấp tùy chọn "-e" với tên giao thức bạn muốn sử dụng. Ở đây trong ví dụ này, chúng ta sẽ sử dụng "ssh" với tùy chọn "-e" và thực hiện truyền dữ liệu.

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp
Mã nguồn [Chọn]
[email protected]'s password:
receiving incremental file list
anaconda-ks.cfg

sent 43 bytes  received 1.10K bytes  325.43 bytes/sec
total size is 1.90K  speedup is 1.67


3.2. Sao chép tập tin từ máy chủ cục bộ sang máy chủ từ xa bằng SSH

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/
Mã nguồn [Chọn]
[email protected]'s password:
sending incremental file list
created directory /backups
backup.tar.gz

sent 224.59K bytes  received 66 bytes  64.19K bytes/sec
total size is 224.40K  speedup is 1.00


4. Hiển thị tiến trình trong khi truyền dữ liệu với rsync

Để hiển thị tiến trình trong khi chuyển dữ liệu từ máy này sang máy khác, chúng ta có thể sử dụng tùy chọn '–progress'. Nó hiển thị các tập tin và thời gian còn lại để hoàn tất quá trình chuyển.

Mã nguồn [Chọn]
[root@vietnetwork:/]# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs
Mã nguồn [Chọn]
[email protected]'s password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
          1.47M 100%   31.80MB/s    0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
        138.01K 100%    2.69MB/s    0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
          2.01M 100%   18.45MB/s    0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
        120.48K 100%    1.04MB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 3.74M bytes  received 96 bytes  1.50M bytes/sec
total size is 3.74M  speedup is 1.00


5. Sử dụng các tùy chọn –include và –exclude

Hai tùy chọn này cho phép chúng ta bao gồm và loại trừ các tập tin bằng cách chỉ định các tham số với tùy chọn này giúp chúng ta chỉ định các tập tin hoặc thư mục mà bạn muốn đưa vào đồng bộ hóa của mình và loại trừ các tập tin và thư mục mà bạn không muốn chuyển.

Ở đây trong ví dụ này, lệnh rsync sẽ chỉ bao gồm các tập tin và thư mục bắt đầu bằng 'R' và loại trừ tất cả các tập tin và thư mục khác.

Mã nguồn [Chọn]
[root@vietnetwork:/]# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm
Mã nguồn [Chọn]
[email protected]'s password:
receiving incremental file list
created directory /root/rpm
./
Requirename

sent 61 bytes  received 273,074 bytes  60,696.67 bytes/sec
total size is 761,856  speedup is 2.79


6. Sử dụng tùy chọn –delete

Nếu một tập tin hoặc thư mục không tồn tại ở nguồn, nhưng đã tồn tại ở đích, bạn có thể muốn xóa tập tin / thư mục hiện có đó tại đích trong khi đồng bộ hóa.

Chúng ta có thể sử dụng tùy chọn '–delete' để xóa các tập tin không có trong thư mục nguồn.

Nguồn và đích được đồng bộ hóa. Bây giờ, hãy tạo một tập tin test.txt mới tại đích.

Mã nguồn [Chọn]
[root@vietnetwork:~]# cd /root/rpm/

[root@vietnetwork:~/rpm]# touch test.txt

[root@vietnetwork:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/

Mã nguồn [Chọn]
[email protected]'s password:
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003

sent 445 bytes  received 18,543,954 bytes  2,472,586.53 bytes/sec
total size is 71,151,616  speedup is 3.84


Đích đến có tập tin mới là test.txt, khi đồng bộ hóa với nguồn bằng tùy chọn '–delete ', nó đã loại bỏ tập tin test.txt
 
7. Đặt kích thước tối đa của tập tin sẽ được truyền

Bạn có thể chỉ định kích thước tập tối đa được chuyển hoặc đồng bộ hóa. Bạn có thể làm điều đó với tùy chọn "–max-size". Ở đây trong ví dụ này, kích thước tập tin tối đa là 200k, vì vậy lệnh này sẽ chỉ chuyển những tập tin bằng hoặc nhỏ hơn 200k

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm
Mã nguồn [Chọn]
[email protected]'s password:
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002

sent 129.52K bytes  received 396 bytes  28.87K bytes/sec
total size is 71.15M  speedup is 547.66


8. Tự động xóa các tập tin nguồn sau khi chuyển thành công

Bây giờ, giả sử bạn có máy chủ web chính và máy chủ sao lưu dữ liệu, bạn đã tạo bản sao lưu hàng ngày và đồng bộ hóa nó với máy chủ sao lưu của mình, bây giờ bạn không muốn giữ bản sao lưu cục bộ đó trong máy chủ web của mình.

Vì vậy, bạn sẽ đợi quá trình chuyển hoàn tất và sau đó xóa tập tin sao lưu cục bộ đó theo cách thủ công? Dĩ nhiên là không. Việc xóa tự động này có thể được thực hiện bằng cách sử dụng tùy chọn '–remove-source-files'

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/
Mã nguồn [Chọn]
[email protected]'s password:
backup.tar.gz

sent 795 bytes  received 2.33K bytes  894.29 bytes/sec
total size is 267.30K  speedup is 85.40

Mã nguồn [Chọn]
[root@vietnetwork:~]# ls -l backup.tar.gz
Mã nguồn [Chọn]
ls: cannot access 'backup.tar.gz': No such file or directory
9. Chạy rsync với tùy chọn --dry-run

Nếu bạn là người mới sử dụng rsync và không biết chính xác lệnh của mình sẽ làm gì. Rsync thực sự có thể làm rối tung mọi thứ trong thư mục đích của bạn và sau đó hoàn tác có thể là một công việc tẻ nhạt.

Việc sử dụng tùy chọn này sẽ không thực hiện bất kỳ thay đổi nào đối với tập tin và hiển thị đầu ra của lệnh, nếu đầu ra hiển thị chính xác như bạn muốn thì bạn có thể xóa tùy chọn '–dry-run' khỏi lệnh của mình và chạy trên cửa sổ dòng lệnh Terminal.

Mã nguồn [Chọn]
[root@vietnetwork:~]# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/
Mã nguồn [Chọn]
[email protected]'s password:
backup.tar.gz

sent 50 bytes  received 19 bytes  19.71 bytes/sec
total size is 267.30K  speedup is 3,873.97 (DRY RUN)

10. Rsync đặt giới hạn băng thông và truyền tập tin

Bạn có thể đặt giới hạn băng thông trong khi truyền dữ liệu từ máy này sang máy khác với sự trợ giúp của tùy chọn '–bwlimit'. Tùy chọn này giúp chúng ta giới hạn băng thông I / O.

Mã nguồn [Chọn]
[root@vietnetwork]# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email protected]:/root/tmprpm/
Mã nguồn [Chọn]
[email protected]'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

Ngoài ra, theo mặc định, rsync chỉ đồng bộ hóa các khối và byte đã thay đổi, nếu bạn muốn rõ ràng muốn đồng bộ hóa toàn bộ tập tin thì bạn sử dụng tùy chọn '-W' với nó.

Mã nguồn [Chọn]
[ root @ vietnetwork ] # rsync -zvhW backup.tar /tmp/backups/backup.tar
Mã nguồn [Chọn]
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10

Đó là tất cả với rsync cho tới bây giờ, bạn có thể xem các trang hướng dẫn để có thêm tùy chọn. Hãy để lại ý kiến và đề xuất của bạn.