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 theorsync
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ởirsync
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 đổig
nhóm thay đổi.