Các ví dụ về sử dụng lệnh rsync Image Các ví dụ về sử dụng lệnh rsync

Bài viết này giới thiệu các ví dụ về sử dụng lệnh rsync trên hệ điều hành Linux.

1. Giới thiệu về Rsync

Rsync(remote sync) là công cụ đồng bộ file, thư mục của hệ điều hành 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 ...).

Các tính năng quan trọng của rsync:

  • Tốc độ: Lần đầu tiên rsync sao chép toàn bộ nội dung giữa các thư mục nguồn và các thư mục đích. Trong lần tiếp theo rsync chỉ chuyển các khối hoặc byte đã thay đổi đến vị trí đích, điều này làm cho việc chuyển rất nhanh.
  • Bảo mật: rsync cho phép mã hóa dữ liệu bằng giao thức ssh trong khi truyền.
  • Ít băng thông: rsync sử dụng nén và giải nén khối dữ liệu theo từng khối ở đầu gửi và nhận tương ứng. Vì vậy, băng thông được sử dụng bởi rsync sẽ luôn ít hơn so với các giao thức truyền tệp khác.
  • Đặc quyền : Không yêu cầu đặc quyền đặc biệt để cài đặt và thực thi rsync

Mặc định hầu hết các bản phân phối Linux có sẵn công cụ này, nếu chưa có thì chúng ta chạy lệnh sau:

  • Đối với bản phân phối Red Hat/CentOS

    yum install rsync
    
  • Đối với bản phân phối Debian/Ubuntu

    apt-get install rsysnc
    

2. Cách sử dụng rsync

Cú pháp của rsync:

rsync option source destination

Trong đó:

  • source: đường dẫn thư mục chứa dữ liệu gốc muốn đồng bộ, nơi truyền dữ liệu.
  • destination: đường dẫn nơi chứa dữ liệu đồng bộ đến, nơi nhận dữ liệu.
  • option: các tham số tùy chọn.

Các tùy chọn thường được sử dụng:

  • -a: Tùy chọn này sẽ gọi toàn user, group, permission của dữ liệu truyền đi
  • -v: Hiển thị trạng thái truyền tải file để chúng ta có thể theo dõi.
  • -h: Kết hợp với tùy chọn -v để định dạng dữ liệu show ra dễ nhìn hơn.
  • -z: Nén dữ liệu trước khi truyền đi giúp tăng tốc quá trình đồng bộ file.
  • -e: Sử dụng giao thức SSH để mã hóa dữ liệu.
  • -P: Tùy chọn này dùng khi đường truyền không ổn định, nó sẽ gửi tiếp các file chưa được gửi đi khi có kết nối trở lại.
  • --delete: Xóa dữ liệu ở destination nếu source không tồn tại dữ liệu đó.
  • --exclude: Loại trừ dữ liệu không muốn truyền đi.

Lưu ý: Chỉ dùng --delete khi bạn chắc chắn rằng "source" và "destination" đều đúng, nhất là về vị trí, nếu bạn để sai vị trí hoặc sai tên thư mục thì có thể dẫn đến mất dữ liệu toàn bộ khi dùng rsync

3. Đồng bộ hóa hai thư mục trong máy chủ

Để đồng bộ hai thư mục trong một máy tính sử dụng lệnh rsync -zvr sau đây:

[root@test1 ~]#  rsync -zvr /var/opt/ /root/bak/
sending incremental file list
Bai tap QTM/
Bai tap QTM/Co ban GPO 3.docx
Bai tap QTM/Enable Performance Monitoring in Server 2012 R2.mp4

sent 10,056,323 bytes  received 58 bytes  6,704,254.00 bytes/sec
total size is 14,184,093  speedup is 1.41

Trong ví dụ trên:

  • -z là để cho phép nén
  • -v hiển thị trạng thái truyền tải file để chúng ta có thể theo dõi.
  • -r chỉ ra đệ quy

Chúng ta xem thời gian trên một trong các tệp được sao chép từ nguồn đến đích. Như bên dưới, rsync không bảo toàn thời gian trong quá trình đồng bộ hóa.

[root@test1 ~]# ls -l /var/opt/Bai\ tap\ QTM/ /root/bak/Bai\ tap\ QTM/
/root/bak/Bai tap QTM/:
total 13852
-rw-r--r-- 1 root root   479148 Mar 24 00:09 Co ban GPO 3.docx
-rw-r--r-- 1 root root 13704945 Mar 24 00:09 Enable Performance Monitoring in Server 2012 R2.mp4

/var/opt/Bai tap QTM/:
total 13852
-rw-r--r-- 1 root root   479148 Mar 23 23:57 Co ban GPO 3.docx
-rw-r--r-- 1 root root 13704945 Mar 23 23:57 Enable Performance Monitoring in Server 2012 R2.mp4

4. Bảo toàn thời gian khi đồng bộ hóa

Thực hiện bảo toàn thời gian khi đồng bộ hóa với tuỳ chọn -a chúng ta thực hiện như sau:

[root@test1 ~]#  rsync -azv /var/opt/ /root/bak/
sending incremental file list
./
Bai tap QTM/
Bai tap QTM/Co ban GPO 3.docx
Bai tap QTM/Enable Performance Monitoring in Server 2012 R2.mp4

sent 10,056,332 bytes  received 65 bytes  6,704,264.67 bytes/sec
total size is 14,184,093  speedup is 1.41

Tùy chọn -a thực hiện như sau:

  • Chế độ đệ quy
  • Bảo tồn các liên kết tượng trưng
  • Bảo toàn quyền
  • Giữ gìn dấu thời gian
  • Giữ gìn chủ sở hữu và nhóm

Kiểm tra thời gian bảo toàn hay không chúng ta sử dụng lệnh ls -l

[root@test1 ~]# ls -l /var/opt/Bai\ tap\ QTM/ /root/bak/Bai\ tap\ QTM/
/root/bak/Bai tap QTM/:
total 13852
-rw-r--r-- 1 root root   479148 Mar 23 23:57 Co ban GPO 3.docx
-rw-r--r-- 1 root root 13704945 Mar 23 23:58 Enable Performance Monitoring in Server 2012 R2.mp4

/var/opt/Bai tap QTM/:
total 13852
-rw-r--r-- 1 root root   479148 Mar 23 23:57 Co ban GPO 3.docx
-rw-r--r-- 1 root root 13704945 Mar 23 23:58 Enable Performance Monitoring in Server 2012 R2.mp4

Qua việc kiểm tra trên thì thời gian của tệp không thay đổi khi đồng bộ hoá

5. Đồng bộ hoá một tệp

Để đồng bộ hóa một tệp chúng ta sử dụng lệnh rsync như bên dưới.

[root@test1 ~]#  rsync -v /var/opt/Bai\ tap\ QTM/Co\ ban\ GPO\ 3.docx /root/bak/
Co ban GPO 3.docx

sent 52 bytes  received 12 bytes  128.00 bytes/sec
total size is 479,148  speedup is 7,486.69

6. Đồng bộ hóa các tệp từ Local đến Remote và ngược lại

6.1. Đồng bộ hóa các tệp từ Local đến Remote

Tiện ích rsync cho phép chúng ta đồng bộ hóa các tập tin/thư mục giữa hệ thống local và remote. Chúng ta thực hiện như bên dưới:

MacBook% rsync -avz Downloads/include.docx root@102.91.120.159:/root/bak/
Enter passphrase for key '/Users/Name/.ssh/id_rsa':
building file list ... done
include.docx

sent 11022 bytes  received 42 bytes  567.38 bytes/sec
total size is 13608  speedup is 1.23

Khi thực hiện đồng bộ hóa với máy chủ từ xa, chúng ta chỉ định tên người dùng và địa chỉ IP của máy chủ từ xa và thư mục đích trên máy chủ từ xa.

6.2. Đồng bộ hóa các tệp Remote đến Local

Khi bạn muốn đồng bộ hóa các tệp từ Remote sang Local, thì chúng ta chỉnh định username và địa chỉ IP của máy chủ từ xa cùng đường dẫn từ xa trong nguồn và đường dẫn cục bộ chúng ta thực hiện như sau:

MacBook% rsync -avz root@102.91.120.159:/root/bak/include.docx Documents
Enter passphrase for key '/Users/Name/.ssh/id_rsa':
receiving file list ... done
include.docx

sent 38 bytes  received 11011 bytes  2455.33 bytes/sec
total size is 13608  speedup is 1.23

7. Remote shell để đồng bộ hóa

Tiện ích rsync cho phép bạn chỉ định shell từ xa mà bạn muốn sử dụng. Chúng ta có thể sử dụng rsync ssh để kích hoạt kết nối từ xa.

Sử dụng rsync -e ssh để chỉ định sử dụng shell từ xa port mặc định là 22.

Nếu remote có số port khác port mặc định chúng ta sử dụng cú pháp sau: 'ssh -p port_number'. Thực hiện như bên dưới:

MacBook% rsync -avz -e 'ssh -p 2019' Downloads/C/mang2chieu.cpp root@104.98.127.154:/root/bak/
Enter passphrase for key '/Users/Name/.ssh/id_rsa':
building file list ... done
mang2chieu.cpp

sent 1447 bytes  received 42 bytes  330.89 bytes/sec
total size is 6306  speedup is 4.24

8. Chỉ đồng bộ hóa Cấu trúc cây thư mục (không phải các tệp)

Sử dụng tùy chọn -d để đồng bộ hóa cây thư mục từ nguồn đến đích.

Ví dụ: Đồng bộ hóa cây thư mục theo cách đệ quy, không phải các tệp trong thư mục.

MacBook% rsync -v -d -e 'ssh -p 2019' root@104.98.127.154:/root/bak/ Documents
Enter passphrase for key '/Users/Name/.ssh/id_rsa':
receiving file list ... done
DS_Store/
Database/
Bai tap QTM/

sent 346 bytes  received 359355519 bytes  2753684.79 bytes/sec
total size is 359284114  speedup is 1.00

9. Xem tiến trình rsync trong khi chuyển

Khi chúng ta sử dụng rsync để sao lưu, chúng ta muốn biết tiến trình sao lưu diển ra như thế nào có bao nhiêu tệp là bản sao, với tốc độ sao chép tệp,...

Tùy chọn --progress hiển thị tiến trình chi tiết của việc thực hiện rsync như bên dưới:

MacBook% rsync -avz --progress -e 'ssh -p 2019' root@104.98.127.154:/root/bak/ Documents
Enter passphrase for key '/Users/Name/.ssh/id_rsa':
receiving file list ...
14 files to consider
./
.DS_Store
        6148 100%    5.86MB/s    0:00:00 (xfer#1, to-check=12/14)
Co ban GPO 3.docx
      479148 100%   14.28MB/s    0:00:00 (xfer#2, to-check=11/14)
c3660-ik9s-mz123-26.bin
    22855564 100%   29.49MB/s    0:00:00 (xfer#3, to-check=10/14)
c3660-ik9s-mz123-26.image
    58121772 100%  125.12MB/s    0:00:00 (xfer#4, to-check=9/14)
c3725-adventerprisek9-mz.124-11.XW7.bin
    46381652 100%   39.67MB/s    0:00:01 (xfer#5, to-check=8/14)
c3725-adventerprisek9-mz.124-11.XW7.image
    97890384 100%  121.56MB/s    0:00:00 (xfer#6, to-check=7/14)
c7200-adventerprisek9-mz.124-15.T9.bin
    41580964 100%   35.03MB/s    0:00:01 (xfer#7, to-check=6/14)
c7200-adventerprisek9-mz.124-15.T9.image
    91948568 100%  127.09MB/s    0:00:00 (xfer#8, to-check=5/14)
mang2chieu.cpp
        6306 100%    8.81kB/s    0:00:00 (xfer#9, to-check=3/14)
Bai tap QTM/
Bai tap QTM/Co ban GPO 3.docx
      479148 100%  654.43kB/s    0:00:00 (xfer#10, to-check=1/14)
Bai tap QTM/Enable Performance Monitoring in Server 2012 R2.mp4
    13704945 100%    4.58MB/s    0:00:02 (xfer#11, to-check=0/14)

sent 315926 bytes  received 10057090 bytes  768371.56 bytes/sec
total size is 373468207  speedup is 36.00

10. Xóa các tệp được tạo tại Target

Nếu một tệp không có trong nguồn, nhưng hiện tại Target chúng ta có thể xóa tệp tại Target trong rsync.

Sử dụng tùy chọn --delete như hiển thị bên dưới. Tùy chọn xóa các tệp không có trong thư mục nguồn.

## Tao tep test.txt tai Target
MacBook% touch Documents/test.txt
MacBook% rsync -avz --delete -e 'ssh -p 2019' root@104.98.127.154:/root/bak/ Documents
Enter passphrase for key '/Users/Name/.ssh/id_rsa':
receiving file list ... done
deleting test.txt

sent 152 bytes  received 859 bytes  288.86 bytes/sec
total size is 373468207  speedup is 369404.75

Trong Target có tệp mới test.txt, khi đồng bộ hóa với nguồn với tùy chọn --delete đã xóa tệp test.txt

11. Không tạo tệp mới tại Target

Chúng ta chỉ có thể đồng bộ hóa các tệp hiện có tại Target. Trong trường hợp nguồn có các tệp mới không có ở Target, chúng ta có thể tránh tạo các tệp mới này ở Target. Để sử dụng tính năng này dùng tùy chọn --existing như bên dưới:

Đầu tiên, thêm một index.html mới tại nguồn.

[root@test1 ~]# touch /root/bak/index.html

Tiếp theo, thực hiện rsync với tùy chọn --existing:

MacBook% rsync -avz --existing -e 'ssh -p 2019' root@104.98.127.154:/root/bak/ Documents
Enter passphrase for key '/Users/dang/.ssh/id_rsa':
receiving file list ... done
./

sent 22 bytes  received 546 bytes  162.29 bytes/sec
total size is 373468207  speedup is 657514.45

Đầu ra ở trên đã không nhận được tệp mới index.html

12. Xem các thay đổi giữa nguồn và đích

Tùy chọn -i để xem sự khác biệt trong các tệp hoặc thư mục giữa nguồn và đích.

Kiểm tra tệp và thư mục tại nguồn:

[root@test1 ~]# ls -l /var/opt/Bai\ tap\ QTM/
total 13852
-rw-r--r-- 1 root root   479148 Mar 23 23:57 Co ban GPO 3.docx
-rw-r--r-- 1 root root 13704945 Mar 23 23:58 Enable Performance Monitoring in Server 2012 R2.mp4

Kiểm tra tệp và thư mục tại đích:

[root@test1 ~]# ls -l /root/bak/
total 350872
drwxr-xr-x 2 root root        90 Mar 23 23:57 Bai tap QTM
-rw-r--r-- 1 root root  22855564 Mar 23 23:55 c3660-ik9s-mz123-26.bin
-rw-r--r-- 1 root root  58121772 Mar 23 23:55 c3660-ik9s-mz123-26.image
-rw-r--r-- 1 root root    479148 Mar 23 23:57 Co ban GPO 3.docx
-rw-r--r-- 1  501 games    13608 Mar  1 09:36 include.docx
-rw-r--r-- 1 root root         0 Mar 24 01:37 index.html

Bây giờ chúng ta hãy xem sự khác nhau trong các tệp hoặc thư mục giữa nguồn và đích. Sử dụng tùy chọn -i hiển thị các thay đổi mục.

[root@test1 ~]#  rsync -azvi /var/opt/ /root/bak/
sending incremental file list
.d..t...... ./

sent 183 bytes  received 20 bytes  406.00 bytes/sec
total size is 14,184,093  speedup is 69,872.38

Các chữ cái hiển thị khi chạy tuỳ chọn -i ý nghĩa như sau:

  • > xác định rằng một tập tin đang được chuyển đến máy chủ lưu trữ cục bộ.
  • f nó là một tập tin.
  • s sự thay đổi kích thước.
  • t thay đổi dấu thời gian.
  • o chủ sở hữu thay đổi
  • g nhóm thay đổi.