11 ví dụ lệnh Rsync trên Centos / Ubuntu / Debian / Fedora
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ộ giữa các thư mục, đĩa và mạng, thực hiện sao lưu dữ liệu và tạo bản sao giữa hai máy Linux.
Một số ưu điểm và tính năng của lệnh rsync:
- Sao chép và đồng bộ dữ liệu một cách hiệu quả đến hoặc từ một hệ thống từ xa.
- Hỗ trợ sao chép liên kết, thiết bị, chủ sở hữu, nhóm và quyền truy cập.
- Nhanh hơn scp (Secure Copy) vì rsync sử dụng giao thức cập nhật từ xa cho phép truyền tải chỉ những sự khác biệt giữa hai tập hợp tệp. Lần đầu tiên, nó sao chép toàn bộ nội dung của một tệp hoặc thư mục từ nguồn đến đích, nhưng từ lần sau, nó chỉ sao chép những khối và byte đã thay đổi đến đích.
- Rsync sử dụng ít băng thông hơn vì nó sử dụng phương pháp nén và giải nén trong quá trình gửi và nhận dữ liệu ở cả hai đầu.
Cú pháp cơ bản của lệnh rsync.
# rsync options source destination
Một số tùy chọn thông dụng được sử dụng với lệnh rsync:
- -v: Chi tiết.
- -r: Sao chép dữ liệu theo cách đệ quy (nhưng không bảo quản thời gian và quyền truy cập khi truyền tải dữ liệu).
- -a: Chế độ lưu trữ, cho phép sao chép tệp một cách đệ quy và bảo tồn liên kết tượng trưng, quyền truy cập tệp, sở hữu người dùng và nhóm, và thời gian.
- -z: Nén dữ liệu tệp.
- -h: Hiển thị dữ liệu số dưới dạng định dạng đọc được cho con người.
Cài đặt Rsync trên hệ thống Linux
Cài đặt gói rsync bằng lệnh sau trên bản phân phối Linux.
$ sudo apt-get install rsync [On Debian/Ubuntu & Mint] $ pacman -S rsync [On Arch Linux] $ emerge sys-apps/rsync [On Gentoo] $ sudo yum install rsync [On Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux] $ sudo zypper install rsync [On openSUSE]
Sao chép/đồng bộ tệp và thư mục cục bộ bằng lệnh rsync
2.1 Sao chép/đồng bộ một tệp trên máy tính cục bộ
Lệnh sau sẽ đồng bộ một tệp duy nhất trên máy cục bộ từ một vị trí này sang một vị trí khác. Ví dụ, trong ví dụ trên, tên tệp backup.tar cần được sao chép hoặc đồng bộ đến thư mục /tmp/backups/.
# rsync -zvh backup.tar.gz /tmp/backups/ 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.
2.2 Sao chép/đồng bộ 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 từ một thư mục này sang một thư mục khác trên cùng máy. Ví dụ, trong ví dụ này, /root/rpmpkgs chứa một số tệp gói rpm và bạn muốn sao chép thư mục đó vào trong thư mục /tmp/backups/.
# rsync -avzh /root/rpmpkgs /tmp/backups/ 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
Lệnh rsync sao chép/đồng bộ tệp và thư mục
3.1 Sao chép một thư mục từ máy chủ cục bộ đến máy chủ xa
Lệnh này sẽ đồng bộ một thư mục từ máy cục bộ đến một máy từ xa. Ví dụ, nếu có một thư mục trên máy tính cục bộ có tên "rpmpkgs" chứa một số gói RPM và bạn muốn gửi nội dung của thư mục cục bộ đó đến một máy chủ từ xa, bạn có thể sử dụng lệnh sau.
# rsync -avzh /root/rpmpkgs root@192.168.0.141:/root/ 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. root@192.168.0.141'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
3.2 Sao chép/đồng bộ một thư mục từ máy chủ xa đến máy tính cục bộ
Lệnh này sẽ giúp bạn đồng bộ một thư mục từ máy chủ xa đến máy tính cục bộ. Ví dụ, một thư mục /root/rpmpkgs 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 thư mục /tmp/myrpms.
# rsync -avzh root@192.168.0.141:/root/rpmpkgs /tmp/myrpms root@192.168.0.141'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
Lưu ý: Việc sử dụng lệnh rsync để sao chép hoặc đồng bộ dữ liệu là một công việc quan trọng, vì vậy hãy đảm bảo bạn đã nắm vững các tùy chọn và cú pháp trước khi thực hiện.
Rsync qua SSH
Sử dụng SSH (Secure Shell) để truyền dữ liệu với rsync, sử dụng giao thức SSH trong quá trình truyền dữ liệu giúp đảm bảo dữ liệu của bạn đ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 trong quá trình truyền qua mạng internet.
Khi sử dụng rsync, chúng ta cần cung cấp mật khẩu người dùng/root để hoàn thành tác vụ cụ thể. Việc sử dụng tùy chọn SSH sẽ gửi thông tin đăng nhập theo cách mã hóa để bảo mật mật khẩu.
4.1 Sao chép một tệp từ máy chủ xa đến máy chủ cục bộ qua SSH
Để chỉ định một giao thức với rsync, sử dụng tùy chọn "-e" với tên giao thức bạn muốn sử dụng. Ở 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.
# rsync -avzhe ssh root@192.168.0.141:/root/anaconda-ks.cfg /tmp root@192.168.0.141'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
4.2 Sao chép một tệp từ máy chủ cục bộ đến máy chủ xa qua SSH
# rsync -avzhe ssh backup.tar.gz root@192.168.0.141:/backups/ boot@192.168.0.141'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
Hiển thị tiến trình trong quá trình truyền dữ liệu với rsync
Để hiển thị tiến trình trong quá trình truyền dữ liệu từ một máy đến máy khác, sử dụng tùy chọn "--progress". Nó sẽ hiển thị các tệp và thời gian còn lại để hoàn thành việc truyền dữ liệu.
# rsync -avzhe ssh --progress /root/rpmpkgs root@192.168.0.141:/root/rpmpkgs root@192.168.0.141'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
Sử dụng 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 bằng cách chỉ định tham số với các tùy chọn này để chỉ định các tệp hoặc thư mục mà bạn muốn bao gồm trong quá trình đồng bộ và loại trừ các tệp và thư mục mà bạn không muốn được truyền.
Ở ví dụ này, lệnh rsync sẽ chỉ bao gồm các tệp và thư mục bắt đầu bằng 'R' và loại trừ tất cả các tệp và thư mục khác.
# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.141:/var/lib/rpm/ /root/rpm root@192.168.0.141'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
Sử dụng tùy chọn --delete
Nếu một tệp 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/thư mục hiện có ở đích trong quá trình đồng bộ hóa.
Sử dụng tùy chọn --delete để xóa các tệp không tồn tại trong thư mục nguồn.
Ví dụ: Nguồn và đích đã được đồng bộ. Bây giờ tạo một tệp mới test.txt tại đích.
# cd /root/rpm/ # touch test.txt # rsync -avz --delete root@192.168.0.151:/var/lib/rpm/ /root/rpm/ root@192.168.0.151'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 có tệp mới gọi là test.txt, khi đồng bộ với nguồn với tùy chọn --delete sẽ xóa tệp test.txt.
Thiết lập kích thước tệp tối đa được truyền bằng lệnh rsync
Chỉ định kích thước tệp tối đa được truyền hoặc đồng bộ, tùy chọn "--max-size". Ở ví dụ này, kích thước tệp tối đa là 200k, vì vậy lệnh này sẽ truyền chỉ những tệp có kích thước bằng hoặc nhỏ hơn 200k.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.151:/root/tmprpm root@192.168.0.151'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
Lệnh rsync tự động xóa các tệp nguồn sau khi truyền thành công
Giả sử bạn có máy chủ web chính và một máy chủ sao lưu dữ liệu, bạn đã tạo sao lưu hàng ngày và đồng bộ nó với máy chủ sao lưu, bây giờ bạn không muốn giữ bản sao sao lưu địa phương đó trên máy chủ web nữa.
Vậy, bạn sẽ chờ đến khi quá trình truyền hoàn thành rồi xóa tệp sao lưu cục bộ đó bằng cách thủ công? Tất nhiên là KHÔNG. Việc xóa tự động này được thực hiện bằng tùy chọn "--remove-source-files".
# rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/ root@192.168.0.151'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 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory
Thực hiện thử nghiệm không thực tế với rsync
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 bạn sẽ làm gì. Rsync có thể gây ra rối loạn trong thư mục đích.
Việc sử dụng tùy chọn này sẽ không thay đổi các tệp và hiển thị kết quả của lệnh.
Nếu kết quả hiển thị chính xác như bạn muốn, bạn có thể loại bỏ tùy chọn "--dry-run" khỏi lệnh và chạy trên bảng điều khiển.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/ root@192.168.0.151'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)
Thiết lập giới hạn băng thông và truyền tệp với rsync
Đặt giới hạn băng thông khi truyền dữ liệu từ một máy đến máy khác bằng tùy chọn "--bwlimit". Tùy chọn này giới hạn băng thông I/O.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.151:/root/tmprpm/ root@192.168.0.151'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 đồng bộ chỉ các khối và byte đã thay đổi, nếu bạn muốn đồng bộ toàn bộ tệp một cách rõ ràng, sử dụng tùy chọn "-W".
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10