Thứ ba, 10/09/2013 | 00:00 GMT+7

Cách sử dụng Rsync để đồng bộ hóa các thư mục cục bộ và từ xa trên VPS

Rsync , viết tắt của “remote sync”, là một công cụ đồng bộ hóa file local 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 file đã thay đổi.


Trong hướng dẫn này, ta sẽ trình bày cách sử dụng cơ bản của tiện ích mạnh mẽ này. Ta sẽ sử dụng VPS Ubuntu 12.04 trong các ví dụ, nhưng bạn có thể sử dụng bất kỳ bản phân phối Linux hiện đại nào để làm theo.

Rsync là gì?


Rsync là một công cụ đồng bộ hóa hỗ trợ mạng rất linh hoạt. Nó cũng có thể đề cập đến giao thức mạng được phát triển để sử dụng công cụ này. Khi ta tham khảo rsync trong hướng dẫn này, ta chủ yếu đề cập đến tiện ích chứ không phải giao thức.

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.

Cú pháp cơ bản


Cú pháp cơ bản của rsync rất đơn giản và hoạt động theo cách tương tự như ssh, scp và cp.
Ta sẽ tạo hai folder thử nghiệm và một số file thử nghiệm bằng các lệnh sau:

    cd ~     mkdir dir1     mkdir dir2     touch dir1/file{1..100} 

Bây giờ ta có một folder tên là dir1 với 100 file trống trong đó.

    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

Ta cũng có một folder trống được gọi là dir2 .

Để đồng bộ nội dung của dir1 với dir2 trên cùng một hệ thống, hãy nhập:

    rsync -r dir1/ dir2 

Tùy chọn -r nghĩa là đệ quy, cần thiết để đồng bộ hóa folder .

Ta cũng có thể sử dụng cờ -a để thay thế:

    rsync -a dir1/ dir2 

Tùy chọn -a là một cờ kết hợp. Nó là viết tắt của "lưu trữ" và đồng bộ hóa đệ quy và lưu giữ các softlink , các file đặc biệt và thiết bị, thời gian sửa đổi, group , chủ sở hữu và các quyền. Nó thường được sử dụng hơn -r và thường là những gì bạn muốn sử dụng.

Một lưu ý quan trọng


Bạn có thể nhận thấy rằng có một dấu gạch chéo (/) ở cuối đối số đầu tiên trong các lệnh trên:

  • rsync -a dir1/ dir2

Điều này là cần thiết để nghĩa là "nội dung của dir1 ". Giải pháp thay thế, không có dấu gạch chéo ở cuối, sẽ đặt dir1 , bao gồm cả folder , trong dir2 . Điều này sẽ tạo ra một hệ thống phân cấp giống như sau:

~/dir2/dir1/[files] 

Luôn kiểm tra kỹ các đối số của bạn trước khi thực hiện 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 (cho dài dòng) cũng cần thiết để có được kết quả thích hợp:

rsync -anv dir1/ dir2 
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

So sánh kết quả này với kết quả mà ta nhận được khi loại bỏ dấu gạch chéo 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 . . .

Bạn có thể thấy ở đây rằng chính folder đã được chuyển.

Cách sử dụng Rsync để đồng bộ hóa với hệ thống từ xa


Việc đồng bộ hóa với hệ thống từ xa sẽ trở nên bình thường nếu bạn có quyền truy cập SSH vào máy từ xa và cài đặt rsync trên cả hai mặt. Nếu bạn cần cài đặt SSH key , hãy nhấp vào đây.

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 folder dir1 từ trước đó với một máy tính từ xa bằng cách sử dụng cú pháp này ( lưu ý ta muốn chuyển folder thực trong trường hợp này, vì vậy ta bỏ qua dấu gạch chéo):

  • rsync -a ~/dir1 username@remote_host:destination_directory

Đây được gọi là thao tác “đẩy” vì nó đẩy một folder từ hệ thống local sang hệ thống từ xa. Hoạt động ngược lại là "kéo". Nó được sử dụng để đồng bộ hóa một folder từ xa với hệ thống local . Nếu dir1 nằm trên hệ thống từ xa thay vì hệ thống local của ta , thì cú pháp sẽ là:

  • 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.

Các tùy chọn hữu ích cho Rsync


Rsync cung cấp nhiều tùy chọn để thay đổi hành vi mặc định của tiện ích. Ta đã thảo luận về một số cờ cần thiết hơn.

Nếu bạn đang chuyển các file chưa được nén, như file văn bản, bạn có thể giảm tốc độ truyền mạng bằng cách thêm nén với tùy chọn -z :

  • rsync -az source destination

Cờ -P rất hữu ích. Nó kết hợp những lá cờ -progress-partial. Cái đầu tiên trong số này cung cấp cho bạn thanh tiến trình để chuyển và cái 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 ./ 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) file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101) file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101) . . .

Nếu ta chạy lại lệnh, ta sẽ nhận được kết quả ngắn hơ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

Ta có thể cập nhật thời gian sửa đổi trên một số file và thấy rằng rsync chỉ sao chép lại một cách thông minh các file đã thay đổi:

  • touch dir1/file{1..10}
  • 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 folder thực sự đồng bộ, cần phải xóa các file khỏi folder đí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 folder đích.

Ta 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, hãy sử dụng tùy chọn –dry-run và thực hiện kiểm tra để tránh mất dữ liệu:

  • rsync -a --delete source destination

Nếu bạn muốn loại trừ một số file hoặc folder nhất định nằm bên trong folder bạn đang đồng bộ hóa, bạn có thể thực hiện bằng cách chỉ định chúng trong danh sách được phân tách bằng dấu phẩy sau tùy chọn –exclude = :

  • rsync -a --exclude=pattern_to_exclude source destination

Nếu ta đã chỉ định một mẫu để loại trừ, ta có thể overrides loại trừ đó cho các file trùng 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, rsync của --backup tùy chọn được dùng để lưu trữ các bản backup các file quan trọng. Nó được sử dụng cùng với tùy chọn --backup-dir , chỉ định folder nơi các file backup sẽ được lưu trữ.

  • rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

Kết luận


Rsync có thể đơn giản hóa việc truyền file 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 folder local . 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 file khác nhau.

Thành thạo rsync cho phép bạn thiết kế các hoạt động backup phức tạp và có được quyền kiểm soát chi tiết đối với những gì được chuyển và cách thức.
<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan