Hướng dẫn không đồng bộ hóa để đồng bộ hóa dữ liệu với Rsync

Mục lục:

Hướng dẫn không đồng bộ hóa để đồng bộ hóa dữ liệu với Rsync
Hướng dẫn không đồng bộ hóa để đồng bộ hóa dữ liệu với Rsync

Video: Hướng dẫn không đồng bộ hóa để đồng bộ hóa dữ liệu với Rsync

Video: Hướng dẫn không đồng bộ hóa để đồng bộ hóa dữ liệu với Rsync
Video: Lenovo Yoga 2 Pro Review with Yoga 13 Comparison - YouTube 2024, Tháng tư
Anonim
Giao thức rsync có thể khá đơn giản để sử dụng cho các công việc sao lưu / đồng bộ hóa thông thường, nhưng một số tính năng nâng cao hơn có thể làm bạn ngạc nhiên. Trong bài viết này, chúng tôi sẽ giới thiệu cho các bạn những người tích trữ dữ liệu lớn nhất và những người đam mê sao lưu có thể sử dụng rsync như một giải pháp duy nhất cho tất cả các nhu cầu dự phòng dữ liệu của họ.
Giao thức rsync có thể khá đơn giản để sử dụng cho các công việc sao lưu / đồng bộ hóa thông thường, nhưng một số tính năng nâng cao hơn có thể làm bạn ngạc nhiên. Trong bài viết này, chúng tôi sẽ giới thiệu cho các bạn những người tích trữ dữ liệu lớn nhất và những người đam mê sao lưu có thể sử dụng rsync như một giải pháp duy nhất cho tất cả các nhu cầu dự phòng dữ liệu của họ.

Cảnh báo: Advanced Geeks Only

Nếu bạn đang ngồi ở đó suy nghĩ “rsync là gì?” Hoặc “Tôi chỉ sử dụng rsync cho các tác vụ thực sự đơn giản”, bạn có thể xem bài viết trước của chúng tôi về cách sử dụng rsync để sao lưu dữ liệu của bạn trên Linux. giới thiệu về rsync, hướng dẫn bạn cài đặt và giới thiệu các chức năng cơ bản hơn. Khi bạn nắm vững cách sử dụng rsync (trung thực, nó không phức tạp) và thoải mái với thiết bị đầu cuối Linux, bạn đã sẵn sàng chuyển sang hướng dẫn nâng cao này.

Chạy rsync trên Windows

Trước tiên, chúng ta hãy có được các độc giả Windows của chúng tôi trên cùng một trang với các chuyên gia Linux của chúng tôi. Mặc dù rsync được xây dựng để chạy trên các hệ thống giống Unix, không có lý do gì khiến bạn không thể sử dụng nó dễ dàng như trên Windows. Cygwin tạo ra một API Linux tuyệt vời mà chúng tôi có thể sử dụng để chạy rsync, vì vậy hãy truy cập trang web của họ và tải xuống phiên bản 32 bit hoặc 64 bit, tùy thuộc vào máy tính của bạn.

Cài đặt rất đơn giản; bạn có thể giữ tất cả các tùy chọn ở các giá trị mặc định của chúng cho đến khi bạn đến màn hình "Chọn gói".

Bây giờ bạn cần thực hiện các bước tương tự cho Vim và SSH, nhưng các gói sẽ trông hơi khác một chút khi bạn chọn chúng, vì vậy đây là một số ảnh chụp màn hình:
Bây giờ bạn cần thực hiện các bước tương tự cho Vim và SSH, nhưng các gói sẽ trông hơi khác một chút khi bạn chọn chúng, vì vậy đây là một số ảnh chụp màn hình:

Cài đặt Vim:

Cài đặt SSH:
Cài đặt SSH:
Sau khi bạn đã chọn ba gói đó, hãy tiếp tục nhấp vào tiếp theo cho đến khi bạn hoàn tất quá trình cài đặt. Sau đó, bạn có thể mở Cygwin bằng cách nhấp vào biểu tượng trình cài đặt được đặt trên màn hình của bạn.
Sau khi bạn đã chọn ba gói đó, hãy tiếp tục nhấp vào tiếp theo cho đến khi bạn hoàn tất quá trình cài đặt. Sau đó, bạn có thể mở Cygwin bằng cách nhấp vào biểu tượng trình cài đặt được đặt trên màn hình của bạn.

Các lệnh rsync: Đơn giản để nâng cao

Bây giờ người dùng Windows đang ở trên cùng một trang, chúng ta hãy xem xét một lệnh rsync đơn giản và cho thấy cách sử dụng một số công tắc nâng cao có thể nhanh chóng làm cho nó trở nên phức tạp.

Giả sử bạn có một loạt các tệp cần được sao lưu - không phải những ngày này? Bạn cắm ổ cứng di động của mình để có thể sao lưu các tệp trên máy tính của bạn và đưa ra lệnh sau:

rsync -a /home/geek/files/ /mnt/usb/files/

Hoặc, cách nó sẽ nhìn trên một máy tính Windows với Cygwin:

rsync -a /cygdrive/c/files/ /cygdrive/e/files/

Khá đơn giản và tại thời điểm đó, thực sự không cần sử dụng rsync, vì bạn chỉ có thể kéo và thả tệp. Tuy nhiên, nếu ổ đĩa cứng khác của bạn đã có một số tệp và chỉ cần các phiên bản cập nhật cộng với các tệp đã được tạo kể từ lần đồng bộ hóa cuối cùng, lệnh này tiện dụng vì nó chỉ gửi dữ liệu mới qua ổ đĩa cứng. Với các tệp lớn và đặc biệt là chuyển các tệp qua internet, đó là một vấn đề lớn.

Sao lưu các tệp của bạn vào ổ cứng ngoài và sau đó giữ ổ đĩa cứng ở cùng một vị trí như máy tính của bạn là một ý tưởng rất tồi, vì vậy, hãy xem những gì cần thiết để bắt đầu gửi tệp của bạn qua internet sang một máy tính khác ( bạn đã thuê, thành viên gia đình, v.v.)

rsync -av --delete -e 'ssh -p 12345’ /home/geek/files/ [email protected]:/home/geek2/files/

Lệnh trên sẽ gửi tệp của bạn đến một máy tính khác có địa chỉ IP là 10.1.1.1. Nó sẽ xóa các tệp không liên quan khỏi đích không còn tồn tại trong thư mục nguồn, xuất ra các tên tệp đang được truyền để bạn có ý tưởng về những gì đang xảy ra và rsync đường hầm qua SSH trên cổng 12345.

Các

-a -v -e --delete

công tắc là một số cơ bản và thường được sử dụng nhất; bạn đã biết rất nhiều về chúng nếu bạn đang đọc hướng dẫn này. Chúng ta hãy đi qua một số thiết bị chuyển mạch khác đôi khi bị bỏ qua nhưng vô cùng hữu ích:

--progress

- Công tắc này cho phép chúng ta xem tiến độ truyền của từng tệp. Điều này đặc biệt hữu ích khi chuyển các tệp lớn qua internet, nhưng có thể tạo ra một lượng thông tin vô nghĩa khi chỉ chuyển các tệp nhỏ qua mạng nhanh.

Một lệnh rsync với

--progress

chuyển đổi dưới dạng bản sao lưu đang diễn ra:

Image
Image

--partial

- Đây là một công tắc đặc biệt hữu ích khi chuyển các tệp lớn qua internet. Nếu rsync bị gián đoạn vì bất kỳ lý do nào giữa chuyển tập tin, tập tin được truyền một phần sẽ được lưu trong thư mục đích và quá trình truyền sẽ được tiếp tục khi nó bị tắt khi lệnh rsync được thực hiện lại. Khi chuyển các tệp lớn qua internet (ví dụ: một vài gigabyte), sẽ không có gì tệ hơn là việc mất internet thứ hai, màn hình xanh hoặc lỗi của con người sẽ khiến quá trình chuyển tệp của bạn bị bắt đầu và phải bắt đầu lại từ đầu.

-P

- công tắc này kết hợp

--progress

--partial

do đó, sử dụng nó thay vào đó và nó sẽ làm cho lệnh rsync của bạn một chút neater.

-z

hoặc là

--compress

- Công tắc này sẽ làm cho rsync nén dữ liệu tệp khi dữ liệu đang được chuyển, giảm lượng dữ liệu phải được gửi đến đích. Nó thực sự là một chuyển đổi khá phổ biến nhưng không quan trọng, chỉ thực sự mang lại lợi ích cho bạn khi chuyển giữa các kết nối chậm và không có gì cho các loại tệp sau: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h

hoặc là

--human-readable

- Nếu bạn đang sử dụng

--progress

chuyển đổi, chắc chắn bạn cũng sẽ muốn sử dụng tính năng này. Tức là, trừ khi bạn muốn chuyển đổi byte thành megabyte một cách nhanh chóng. Các

-h

chuyển đổi chuyển đổi tất cả các số đã xuất thành định dạng có thể đọc được của con người, do đó bạn có thể thực sự hiểu được lượng dữ liệu được truyền.

-n

hoặc là

--dry-run

- Công tắc này là điều cần thiết để biết khi nào bạn viết script rsync đầu tiên của mình và thử nghiệm nó. Nó thực hiện chạy thử nhưng không thực sự thực hiện bất kỳ thay đổi nào - những thay đổi sẽ vẫn được xuất ra như bình thường, vì vậy bạn có thể đọc qua mọi thứ và đảm bảo nó có vẻ ổn trước khi đưa tập lệnh của bạn vào sản xuất.

-R

hoặc là

--relative

- Công tắc này phải được sử dụng nếu thư mục đích chưa tồn tại. Chúng tôi sẽ sử dụng tùy chọn này sau trong hướng dẫn này để chúng tôi có thể tạo các thư mục trên máy đích bằng dấu thời gian trong tên thư mục.

--exclude-from

- Công tắc này được sử dụng để liên kết đến danh sách loại trừ có chứa đường dẫn thư mục mà bạn không muốn sao lưu. Nó chỉ cần một tập tin văn bản đơn giản với một đường dẫn thư mục hoặc tập tin trên mỗi dòng.

--include-from

- Tương tự như

--exclude-from

nhưng nó liên kết tới một tệp chứa thư mục và đường dẫn tệp dữ liệu bạn muốn sao lưu.

--stats

- Không thực sự là một chuyển đổi quan trọng bằng bất kỳ phương tiện nào, nhưng nếu bạn là sysadmin, có thể dễ dàng biết được số liệu thống kê chi tiết của mỗi bản sao lưu, chỉ để bạn có thể theo dõi lượng lưu lượng được gửi qua mạng của mình và như vậy.

--log-file

- Điều này cho phép bạn gửi đầu ra rsync vào một tệp nhật ký. Chúng tôi chắc chắn khuyên bạn nên làm điều này để sao lưu tự động mà bạn không có ở đó để tự mình đọc qua đầu ra. Luôn luôn cung cấp cho các tập tin đăng nhập một lần trong thời gian rảnh rỗi của bạn để đảm bảo rằng tất cả mọi thứ đang hoạt động đúng. Ngoài ra, đó là một chuyển đổi quan trọng cho một sysadmin để sử dụng, vì vậy bạn không còn tự hỏi làm thế nào sao lưu của bạn không thành công trong khi bạn rời khỏi thực tập viên phụ trách.

Bây giờ chúng ta hãy xem lệnh rsync của chúng ta rằng chúng ta có thêm một vài switch:

rsync -avzhP --delete --stats --log-file=/home/geek/rsynclogs/backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/

Lệnh này vẫn khá đơn giản, nhưng chúng tôi vẫn chưa tạo giải pháp sao lưu phong nha. Mặc dù các tệp của chúng tôi hiện đang ở hai vị trí vật lý khác nhau, bản sao lưu này không làm gì để bảo vệ chúng tôi khỏi một trong những nguyên nhân chính gây mất dữ liệu: lỗi của con người.

Sao lưu ảnh chụp nhanh

Nếu bạn vô tình xóa một tệp, vi-rút sẽ làm hỏng bất kỳ tệp nào của bạn hoặc điều gì đó khác xảy ra trong đó tệp của bạn bị thay đổi không mong muốn và sau đó bạn chạy tập lệnh sao lưu rsync, dữ liệu đã sao lưu của bạn sẽ bị ghi đè bằng những thay đổi không mong muốn. Khi một điều như vậy xảy ra (không nếu, nhưng khi nào), giải pháp sao lưu của bạn không làm gì để bảo vệ bạn khỏi mất mát dữ liệu của bạn.

Người tạo ra rsync đã nhận ra điều này và thêm

--backup

--backup-dir

đối số để người dùng có thể chạy sao lưu khác biệt. Ví dụ đầu tiên trên trang web của rsync hiển thị tập lệnh trong đó sao lưu toàn bộ được chạy bảy ngày một lần và sau đó các thay đổi đối với các tệp đó được sao lưu trong các thư mục riêng biệt hàng ngày. Vấn đề với phương pháp này là để khôi phục các tệp của bạn, bạn phải khôi phục chúng hiệu quả bảy lần khác nhau. Hơn nữa, hầu hết các chuyên viên máy tính chạy sao lưu của họ nhiều lần trong ngày, vì vậy bạn có thể dễ dàng có hơn 20 thư mục sao lưu khác nhau tại bất kỳ thời điểm nào. Không chỉ khôi phục các tệp của bạn bây giờ là một nỗi đau, nhưng thậm chí chỉ xem xét dữ liệu đã sao lưu của bạn có thể cực kỳ tốn thời gian - bạn phải biết lần cuối cùng một tệp đã được thay đổi để tìm bản sao được sao lưu gần đây nhất. Trên hết, điều đó không hiệu quả khi chỉ chạy hàng tuần (hoặc thậm chí ít thường xuyên hơn trong một số trường hợp) sao lưu gia tăng.

Sao lưu ảnh chụp nhanh để giải cứu! Sao lưu ảnh chụp nhanh không gì khác ngoài sao lưu gia tăng, nhưng chúng sử dụng các liên kết cứng để giữ lại cấu trúc tệp của nguồn gốc. Điều đó có thể khó khăn để quấn đầu bạn vào lúc đầu, vì vậy chúng ta hãy xem một ví dụ.

Giả sử chúng tôi có một tập lệnh sao lưu chạy tự động sao lưu dữ liệu của chúng tôi sau mỗi hai giờ. Bất cứ khi nào rsync thực hiện điều này, nó đặt tên cho mỗi bản sao lưu theo định dạng: Sao lưu theo tháng-ngày-năm-thời gian.

Vì vậy, vào cuối một ngày điển hình, chúng tôi sẽ có danh sách các thư mục trong thư mục đích như sau:

Khi duyệt qua bất kỳ thư mục nào trong số những thư mục đó, bạn sẽ thấy mọi tệp từ thư mục nguồn chính xác như lúc đó. Tuy nhiên, sẽ không có bản sao trên bất kỳ hai thư mục nào. rsync thực hiện điều này với việc sử dụng hardlinking thông qua
Khi duyệt qua bất kỳ thư mục nào trong số những thư mục đó, bạn sẽ thấy mọi tệp từ thư mục nguồn chính xác như lúc đó. Tuy nhiên, sẽ không có bản sao trên bất kỳ hai thư mục nào. rsync thực hiện điều này với việc sử dụng hardlinking thông qua

--link-dest=DIR

tranh luận.

Tất nhiên, để có được những tên thư mục độc đáo và gọn gàng này, chúng ta sẽ phải tăng cường kịch bản rsync của mình một chút. Hãy xem xét những gì cần thực hiện để thực hiện một giải pháp sao lưu như thế này, và sau đó chúng tôi sẽ giải thích chi tiết hơn về kịch bản:

#!/bin/bash

#copy old time.txt to time2.txt

yes | cp ~/backup/time.txt ~/backup/time2.txt

#overwrite old time.txt file with new time

echo `date +”%F-%I%p”` > ~/backup/time.txt

#make the log file

echo “” > ~/backup/rsync-`date +”%F-%I%p”`.log

#rsync command

rsync -avzhPR --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --delete --stats --log-file=~/backup/rsync-`date +”%F-%I%p”`.log --exclude-from '~/exclude.txt' --link-dest=/home/geek2/files/`cat ~/backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/`date +”%F-%I%p”`/

#don’t forget to scp the log file and put it with the backup

scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log

Đó sẽ là một script rsync snapshot điển hình. Trong trường hợp chúng tôi mất bạn ở đâu đó, hãy phân tích từng mảnh một:

Dòng đầu tiên của kịch bản lệnh của chúng tôi sao chép nội dung của time.txt thành time2.txt. Các đường ống có là để xác nhận rằng chúng tôi muốn ghi đè lên các tập tin. Tiếp theo, chúng ta lấy thời gian hiện tại và đặt nó vào time.txt. Những tập tin này sẽ có ích sau này.

Dòng tiếp theo tạo tệp nhật ký rsync, đặt tên nó là rsync-date.log (trong đó ngày là ngày tháng và thời gian thực tế).

Bây giờ, lệnh rsync phức tạp mà chúng tôi đã cảnh báo bạn về:

-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest

- Chỉ các công tắc mà chúng ta đã nói trước đây; cuộn lên nếu bạn cần bồi dưỡng.

--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r

- Đây là các quyền cho thư mục đích. Vì chúng tôi đang tạo thư mục này ở giữa tập lệnh rsync của mình, chúng tôi cần phải chỉ định các quyền để người dùng của chúng tôi có thể ghi tệp vào đó.

Việc sử dụng lệnh date và cat

Chúng ta sẽ đi qua từng lần sử dụng ngày tháng và các lệnh cat bên trong lệnh rsync, theo thứ tự chúng xuất hiện. Lưu ý: chúng tôi biết rằng có nhiều cách khác để thực hiện chức năng này, đặc biệt với việc sử dụng khai báo biến, nhưng với mục đích của hướng dẫn này, chúng tôi đã quyết định sử dụng phương pháp này.

Tệp nhật ký được chỉ định là:

~/backup/rsync-`date +”%F-%I%p”`.log

Ngoài ra, chúng tôi có thể đã chỉ định nó là:

~/backup/rsync-`cat ~/backup/time.txt`.log

Dù bằng cách nào,

--log-file

lệnh sẽ có thể tìm thấy tệp nhật ký ngày được tạo trước đó và ghi vào đó.

Tệp đích liên kết được chỉ định là:

--link-dest=/home/geek2/files/`cat ~/backup/time2.txt`

Điều này có nghĩa là

--link-dest

lệnh được đưa ra thư mục của bản sao lưu trước đó. Nếu chúng tôi đang chạy bản sao lưu cứ hai giờ một lần và lúc 4 giờ chiều thì chúng tôi đã chạy tập lệnh này, sau đó

--link-dest

lệnh tìm thư mục được tạo lúc 2:00 chiều và chỉ chuyển dữ liệu đã thay đổi kể từ đó (nếu có).

Để nhắc lại, đó là lý do tại sao time.txt được sao chép sang time2.txt ở đầu tập lệnh, do đó,

--link-dest

lệnh có thể tham khảo thời gian đó sau đó.

Thư mục đích được chỉ định là:

[email protected]:/home/geek2/files/`date +”%F-%I%p”`

Lệnh này chỉ đơn giản là đặt các tệp nguồn vào một thư mục có tiêu đề ngày và giờ hiện tại.

Cuối cùng, chúng tôi đảm bảo rằng một bản sao của tệp nhật ký được đặt bên trong bản sao lưu.

scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log

Chúng tôi sử dụng bản sao an toàn trên cổng 12345 để lấy nhật ký rsync và đặt nó vào thư mục thích hợp. Để chọn tệp nhật ký chính xác và đảm bảo tệp kết thúc ở đúng vị trí, tệp time.txt phải được tham chiếu qua lệnh cat. Nếu bạn tự hỏi tại sao chúng tôi quyết định cat time.txt thay vì chỉ sử dụng lệnh date, đó là bởi vì rất nhiều thời gian có thể bị transpired trong khi lệnh rsync đang chạy, vì vậy để đảm bảo chúng tôi có thời gian phù hợp, chúng tôi chỉ cần tài liệu văn bản mà chúng tôi đã tạo trước đó.

Tự động hóa

Sử dụng Cron trên Linux hoặc Task Scheduler trên Windows để tự động hóa kịch bản rsync của bạn. Một điều bạn phải cẩn thận là đảm bảo rằng bạn kết thúc bất kỳ quy trình rsync đang chạy nào trước khi tiếp tục một quy trình mới. Trình lập lịch tác vụ dường như tự động đóng mọi phiên bản đã chạy, nhưng đối với Linux, bạn sẽ cần phải sáng tạo hơn một chút.

Hầu hết các bản phân phối Linux có thể sử dụng lệnh pkill, vì vậy hãy chắc chắn thêm phần sau vào phần đầu của tập lệnh rsync của bạn:

pkill -9 rsync

Mã hóa

Không, chúng ta chưa xong. Cuối cùng, chúng tôi có một giải pháp sao lưu tuyệt vời (và miễn phí!), Nhưng tất cả các tệp của chúng tôi vẫn dễ bị trộm cắp. Hy vọng rằng, bạn đang sao lưu tập tin của bạn đến một số nơi hàng trăm dặm. Không có vấn đề làm thế nào an toàn mà nơi xa xôi là, trộm cắp và hack có thể luôn luôn là vấn đề.

Trong ví dụ của chúng tôi, chúng tôi đã tạo đường hầm cho tất cả lưu lượng rsync của chúng tôi thông qua SSH, vì vậy điều đó có nghĩa là tất cả các tệp của chúng tôi đều được mã hóa trong khi chuyển tiếp đến đích của chúng. Tuy nhiên, chúng tôi cần đảm bảo đích đến chỉ là an toàn. Hãy nhớ rằng rsync chỉ mã hóa dữ liệu của bạn khi nó đang được chuyển, nhưng các tệp được mở rộng khi chúng đến đích của chúng.

Một trong những tính năng tốt nhất của rsync là nó chỉ chuyển các thay đổi trong mỗi tệp. Nếu bạn có tất cả các tệp của mình được mã hóa và thực hiện một thay đổi nhỏ, toàn bộ tệp sẽ phải được truyền lại do mã hóa hoàn toàn ngẫu nhiên tất cả dữ liệu sau bất kỳ thay đổi nào.

Vì lý do này, tốt nhất / dễ nhất để sử dụng một số loại mã hóa đĩa, chẳng hạn như BitLocker cho Windows hoặc dm-crypt cho Linux. Bằng cách đó, dữ liệu của bạn được bảo vệ trong trường hợp trộm cắp, nhưng các tệp có thể được chuyển với rsync và mã hóa của bạn sẽ không cản trở hiệu suất của nó. Có các tùy chọn khác có sẵn hoạt động tương tự như rsync hoặc thậm chí thực hiện một số dạng của nó, chẳng hạn như Bản sao, nhưng chúng thiếu một số tính năng mà rsync cung cấp.

Sau khi bạn đã thiết lập sao lưu ảnh chụp nhanh tại vị trí bên ngoài và mã hóa ổ cứng nguồn và đích, hãy tự vỗ về mặt sau để làm chủ rsync và triển khai giải pháp sao lưu dữ liệu dễ nhất có thể.

Đề xuất: