ReactJS: Cách sử dụng Rsync để đồng bộ hóa các thư mục cục bộ và từ xa
Giới thiệu
Rsync , viết tắt của remote sync - đồng bộ từ xa, là một công cụ đồng bộ hóa tệp cục bộ và từ xa. Nó sử dụng một thuật toán để giảm thiểu lượng dữ liệu được sao chép bằng cách chỉ di chuyển các phần của tệp đã thay đổi.
Trong bài hướng dẫn này, chúng tôi sẽ định nghĩa Rsync, xem lại cú pháp khi sử dụng rsync
, giải thích cách sử dụng Rsync để đồng bộ hóa với hệ thống từ xa và các tùy chọn khác có sẵn cho bạn.
Điều kiện tiên quyết
Để thực hành sử dụng rsync
đồng bộ tệp giữa hệ thống cục bộ và hệ thống từ xa, bạn sẽ cần hai máy tương ứng hoạt động như máy tính cục bộ và máy tính từ xa của bạn. Hai máy này có thể là máy chủ riêng ảo, máy ảo, vùng chứa hoặc máy tính cá nhân miễn là chúng đã được định cấu hình đúng cách.
Nếu bạn định làm theo hướng dẫn này bằng cách sử dụng các máy chủ, thì cần thận trọng khi thiết lập chúng với người dùng quản trị và định cấu hình tường lửa trên mỗi máy chủ. Để thiết lập các máy chủ này, hãy làm theo Hướng dẫn Thiết lập Máy chủ Ban đầu của chúng tôi.
Bất kể bạn sử dụng loại máy nào để làm theo hướng dẫn này, bạn sẽ cần phải tạo khóa SSH trên cả hai loại máy đó. Sau đó, sao chép khóa công khai của mỗi máy chủ vào file authorized_keys
của máy chủ khác.
Hướng dẫn này đã được xác thực trên các máy chạy Ubuntu 20.04, mặc dù nó thường hoạt động với bất kỳ máy tính nào chạy hệ điều hành dựa trên Linux đã được cài đặt rsync
.
Định nghĩa Rsync
Rsync là một công cụ đồng bộ hóa hỗ trợ mạng rất linh hoạt. Do tính phổ biến của nó trên các hệ thống giống như Linux và Unix và tính phổ biến của nó như một công cụ cho các tập lệnh hệ thống, nó được bao gồm trên hầu hết các bản phân phối Linux theo mặc định.
Hiểu cú pháp Rsync
Cú pháp cho rsync
hoạt động tương tự như các công cụ khác, chẳng hạn như ssh
, scp
và cp
.
Đầu tiên, hãy thay đổi vào thư mục chính của bạn bằng cách chạy lệnh sau:
cd ~
Sau đó, tạo một thư mục thử nghiệm:
mkdir dir1
Tạo một thư mục thử nghiệm khác:
mkdir dir2
Bây giờ hãy thêm một số tệp thử nghiệm:
touch dir1/file{1..100}
Bây giờ có một thư mục được gọi dir1
với 100 tệp trống trong đó. Xác nhận bằng cách liệt kê các tệp:
ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90
file10 file19 file28 file37 file46 file55 file64 file73 file82 file91
file100 file2 file29 file38 file47 file56 file65 file74 file83 file92
file11 file20 file3 file39 file48 file57 file66 file75 file84 file93
file12 file21 file30 file4 file49 file58 file67 file76 file85 file94
file13 file22 file31 file40 file5 file59 file68 file77 file86 file95
file14 file23 file32 file41 file50 file6 file69 file78 file87 file96
file15 file24 file33 file42 file51 file60 file7 file79 file88 file97
file16 file25 file34 file43 file52 file61 file70 file8 file89 file98
file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Bạn cũng có một thư mục trống được gọi là dir2
. Để đồng bộ hóa nội dung của dir1
trên dir2
cùng một hệ thống, bạn sẽ chạy rsync
và sử dụng cờ -r
, viết tắt của "recursive" và cần thiết cho đồng bộ hóa thư mục:
rsync -r dir1/ dir2
Một tùy chọn khác là sử dụng cờ -a
, là cờ kết hợp và là viết tắt của "archive". Cờ này đồng bộ hóa đệ quy và lưu giữ các liên kết tượng trưng, các tệp thiết bị và đặc biệt, thời gian sửa đổi, nhóm, chủ sở hữu và quyền. Nó được sử dụng phổ biến hơn -r
và là cờ được khuyến khích sử dụng. Chạy lệnh tương tự như ví dụ trước, lần này sử dụng cờ -a
:
rsync -a dir1/ dir2
Xin lưu ý rằng có một dấu gạch chéo (/
) ở cuối đối số đầu tiên trong cú pháp của hai lệnh trước và được đánh dấu ở đây:
rsync -a dir1/ dir2
Dấu gạch chéo này biểu thị nội dung của dir1
. Nếu không có dấu gạch chéo, dir1
bao gồm cả thư mục, sẽ được đặt bên trong dir2
. Kết quả sẽ tạo ra một hệ thống phân cấp như sau:
~/dir2/dir1/[files]
Một mẹo khác là kiểm tra kỹ các đối số của bạn trước khi thực hiện một lệnh rsync
. Rsync cung cấp một phương pháp để thực hiện việc này bằng cách chuyển các tùy chọn -n
hoặc --dry-run
. Cờ -v
, có nghĩa là "verbose", cũng cần thiết để có được đầu ra thích hợp. Bạn sẽ kết hợp dấu a
và n
và cờ v
trong lệnh sau:
rsync -anv dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
Bây giờ hãy so sánh kết quả đầu ra đó với kết quả bạn nhận được khi xóa dấu gạch chéo, như sau:
rsync -anv dir1 dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18 . . .
Đầu ra này bây giờ chứng tỏ rằng chính thư mục đã được chuyển, thay vì chỉ các tệp trong thư mục.
Sử dụng Rsync để đồng bộ hóa với hệ thống từ xa
Để sử dụng rsync
để đồng bộ hóa với hệ thống từ xa, bạn chỉ cần quyền truy cập SSH được định cấu hình giữa máy cục bộ và máy từ xa, cũng như rsync
được cài đặt trên cả hai hệ thống. Khi bạn đã xác minh quyền truy cập SSH giữa hai máy, bạn có thể đồng bộ hóa thư mục dir1
từ phần trước với một máy từ xa bằng cách sử dụng cú pháp sau. Xin lưu ý trong trường hợp này, rằng bạn muốn chuyển thư mục thực tế, vì vậy bạn sẽ bỏ qua dấu gạch chéo sau:
rsync -a ~/dir1 username@remote_host:destination_directory
Quá trình này được gọi là thao tác push vì nó “đẩy” một thư mục từ hệ thống cục bộ sang hệ thống từ xa. Thao tác ngược lại là pull, và được sử dụng để đồng bộ hóa một thư mục từ xa với hệ thống cục bộ. Nếu thư mục dir1
nằm trên hệ thống từ xa thay vì hệ thống cục bộ của bạn, thì cú pháp sẽ như sau:
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Giống như cp
và các công cụ tương tự, nguồn luôn là đối số đầu tiên và đích luôn là đối số thứ hai.
## Sử dụng các Tùy chọn Rsync Khác
Rsync cung cấp nhiều tùy chọn để thay đổi hành vi mặc định của tiện ích, chẳng hạn như các tùy chọn cờ mà bạn đã tìm hiểu trong phần trước.
Nếu bạn đang chuyển các tệp chưa được nén, chẳng hạn như tệp văn bản, bạn có thể giảm tốc độ truyền mạng bằng cách thêm tính năng nén với tùy chọn -z
:
rsync -az source destination
Cờ -P
cũng hữu ích. Nó kết hợp các cờ --progress
và --partial
. Cờ đầu tiên này cung cấp thanh tiến trình cho quá trình chuyển và cờ thứ hai cho phép bạn tiếp tục chuyển bị gián đoạn:
rsync -azP source destination
Output
sending incremental file list
created directory destination
source/
source/file1
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101)
sourcefile10
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101)
source/file100
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101)
source/file11
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101)
source/file12
0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101)
. . .
Nếu bạn chạy lại lệnh, bạn sẽ nhận được đầu ra rút gọn vì không có thay đổi nào được thực hiện. Điều này minh họa khả năng sử dụng thời gian sửa đổi của Rsync để xác định xem các thay đổi đã được thực hiện hay chưa:
rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
Giả sử bạn cập nhật thời gian sửa đổi trên một số tệp bằng lệnh như sau:
touch dir1/file{1..10}
Sau đó, nếu bạn định chạy rsync với -azP
lại, bạn sẽ nhận thấy trong đầu ra cách Rsync chỉ sao chép lại các tệp đã thay đổi một cách thông minh:
rsync -azP source destination
Output
sending incremental file list
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
Để giữ cho hai thư mục thực sự đồng bộ, cần phải xóa các tệp khỏi thư mục đích nếu chúng bị xóa khỏi nguồn. Theo mặc định, rsync
không xóa bất kỳ thứ gì khỏi thư mục đích.
Bạn có thể thay đổi hành vi này với tùy chọn --delete
. Trước khi sử dụng tùy chọn này, bạn có thể sử dụng -n
, tùy chọn --dry-run
để thực hiện kiểm tra nhằm ngăn chặn việc mất dữ liệu không mong muốn:
rsync -an --delete source destination
Nếu bạn muốn loại trừ các tệp hoặc thư mục nhất định nằm bên trong thư mục bạn đang đồng bộ hóa, bạn có thể làm như vậy bằng cách chỉ định chúng trong danh sách được phân tách bằng dấu phẩy theo tùy chọn --exclude=
:
rsync -a --exclude=pattern_to_exclude source destination
Nếu bạn có một mẫu được chỉ định để loại trừ, bạn có thể ghi đè loại trừ đó cho các tệp khớp với một mẫu khác bằng cách sử dụng tùy chọn --include=
:
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Cuối cùng, tùy chọn của Rsync --backup
có thể được sử dụng để lưu trữ các bản sao lưu của các tệp quan trọng. Nó được sử dụng cùng với tùy chọn --backup-dir
, chỉ định thư mục nơi các tệp sao lưu sẽ được lưu trữ:
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Phần kết luận
Rsync có thể sắp xếp hợp lý việc truyền tệp qua các kết nối được nối mạng và thêm tính mạnh mẽ cho đồng bộ hóa thư mục cục bộ. Tính linh hoạt của Rsync làm cho nó trở thành một lựa chọn tốt cho nhiều hoạt động ở cấp độ tệp khác nhau.
Thành thạo Rsync cho phép bạn thiết kế các hoạt động sao lưu phức tạp và có được quyền kiểm soát chi tiết đối với cách thức và nội dung được chuyển.