Thứ sáu, 27/10/2017 | 00:00 GMT+7

Cách backup dữ liệu vào dịch vụ lưu trữ đối tượng với ứng dụng khách backup Restic

Restic là một ứng dụng backup an toàn và hiệu quả được viết bằng ngôn ngữ Go. Nó có thể backup các file local vào một số kho backend khác nhau như folder local , server SFTP hoặc dịch vụ lưu trữ đối tượng tương thích S3.

Trong hướng dẫn này, ta sẽ cài đặt Restic và khởi tạo một repository trên một dịch vụ lưu trữ đối tượng. Sau đó, ta sẽ backup một số file vào repository . Cuối cùng, ta sẽ tự động hóa các bản backup của bạn để chụp ảnh nhanh hàng giờ và tự động cắt các ảnh chụp nhanh cũ khi cần thiết.

Yêu cầu

Đối với hướng dẫn này, bạn cần một máy tính dựa trên UNIX với một số file bạn muốn backup . Mặc dù Restic có sẵn cho Mac, Linux và Windows, các lệnh và kỹ thuật được sử dụng trong hướng dẫn này sẽ chỉ hoạt động trên MacOS và Linux.

Restic yêu cầu dung lượng bộ nhớ tốt để chạy, bạn nên có RAM từ 1GB trở lên để tránh lỗi nhận.

Bạn cũng cần biết các chi tiết sau về dịch vụ lưu trữ đối tượng của bạn :

  • Khóa truy cập
  • Chìa khoá bí mật
  • URL server
  • Tên group

Nếu bạn đang sử dụng dịch vụ lưu trữ đối tượng DigitalOcean Spaces , bạn có thể cài đặt Không gian và nhận tất cả thông tin trên theo hướng dẫn của ta Cách tạo DigitalOcean và Khóa API .

Khi bạn đã có thông tin lưu trữ đối tượng của bạn , hãy chuyển sang phần tiếp theo để cài đặt phần mềm Restic.

Cài đặt ứng dụng client dự phòng Restic

Restic có sẵn dưới dạng file thực thi được biên dịch trước cho nhiều nền tảng. Điều này nghĩa là ta có thể download một file duy nhất và chạy nó, không cần trình quản lý gói hoặc phụ thuộc.

Để tìm đúng file cần download , trước tiên hãy sử dụng trình duyệt web để chuyển đến trang phát hành của Restic trên GitHub . Bạn sẽ tìm thấy danh sách các file trong tiêu đề Download .

Đối với hệ thống Linux 64 bit (môi trường server phổ biến nhất), bạn muốn file kết thúc bằng _linux_amd64.bz2 .

Đối với MacOS, hãy tìm file có _darwin_amd64.bz2 .

Nhấp chuột phải vào file chính xác cho hệ thống của bạn, sau đó chọn Sao chép địa chỉ liên kết (từ ngữ có thể hơi khác trong trình duyệt của bạn). Thao tác này sẽ sao chép URL download vào clipboard của bạn.

Tiếp theo, trong phiên terminal trên máy tính bạn đang backup (nếu đó là máy từ xa, trước tiên bạn có thể cần đăng nhập qua SSH), hãy đảm bảo bạn đang ở trong folder chính của bạn , sau đó download file bằng curl :

  • cd ~
  • curl -LO https://github.com/restic/restic/releases/download/v0.7.3/restic_0.7.3_linux_amd64.bz

Extract file ta đã download :

  • bunzip2 restic*

Sau đó sao chép file vào /usr/local/bin và cập nhật các quyền của file để file có thể thực thi được. Ta cần sử dụng sudo cho hai hành động này, vì user bình thường không có quyền ghi vào /usr/local/bin :

  • sudo cp restic* /usr/local/bin/restic
  • sudo chmod a+x /usr/local/bin/restic

Kiểm tra xem cài đặt có thành công không bằng cách gọi lệnh restic không có đối số:

  • restic

Một số văn bản trợ giúp sẽ in ra màn hình của bạn. Nếu vậy, hệ binary restic đã được cài đặt đúng cách. Tiếp theo, ta sẽ tạo một file cấu hình cho Restic, sau đó khởi tạo repository đối tượng của ta .

Tạo file cấu hình

Restic cần biết khóa truy cập, khóa bí mật, chi tiết kết nối lưu trữ đối tượng và password repository của ta để khởi tạo repository mà ta có thể backup . Ta sẽ cung cấp thông tin này cho Restic bằng cách sử dụng các biến môi trường .

Các biến môi trường là các bit thông tin mà bạn có thể xác định trong shell của bạn , các biến này được chuyển đến các chương trình bạn chạy. Ví dụ: mọi chương trình bạn chạy trên dòng lệnh đều có thể thấy biến môi trường $PWD của bạn, biến này chứa đường dẫn của folder hiện tại.

Việc đặt các mã thông báo và password nhạy cảm trong các biến môi trường là một thực tế phổ biến, vì việc chỉ định chúng trên dòng lệnh không an toàn. Vì ta sẽ tự động hóa các bản backup của bạn sau này, nên ta sẽ lưu thông tin này vào một file mà tập lệnh của ta có thể truy cập.

Đầu tiên, hãy mở một file trong folder chính của bạn:

  • nano ~/.restic-env

Thao tác này sẽ mở một file trống bằng editor nano . Khi ta hoàn tất, file sẽ bao gồm bốn lệnh export . Các câu lệnh export này xác định các biến môi trường và cung cấp chúng cho bất kỳ chương trình nào bạn chạy trong tương lai:

.restic-env
export AWS_ACCESS_KEY_ID="your-access-key" export AWS_SECRET_ACCESS_KEY="your-secret-key" export RESTIC_REPOSITORY="s3:server-url/bucket-name" export RESTIC_PASSWORD="a-strong-password" 

Các khóa truy cập và khóa bí mật sẽ được cung cấp bởi dịch vụ lưu trữ đối tượng của bạn. Bạn có thể cần tạo một bộ khóa duy nhất chỉ dành cho Restic, để có thể dễ dàng thu hồi quyền truy cập trong trường hợp khóa bị mất hoặc bị xâm phạm.

Giá trị RESTIC_REPOSITORY sẽ là: s3:nyc3.digitaloceanspaces.com/example-bucket . Nếu bạn cần kết nối với server trên cổng không chuẩn hoặc qua chỉ HTTP không an toàn, hãy đưa thông tin đó vào URL như s3:http://example-server:3000/example-bucket .

RESTIC_PASSWORD xác định password mà Restic sẽ sử dụng để mã hóa các bản backup của bạn. Mã hóa này diễn ra local , vì vậy bạn có thể backup vào một server ngoại vi không tin cậy mà không lo nội dung file của bạn bị lộ.

Bạn nên chọn một password mạnh ở đây và sao chép nó vào nơi an toàn để backup . Một cách để tạo password ngẫu nhiên mạnh là sử dụng lệnh openssl :

  • openssl rand -base64 24
Output
j8CGOSdz8ibUYK137wtdiD0SJiNroGUp

Điều này xuất ra một chuỗi ngẫu nhiên gồm 24 ký tự, bạn có thể sao chép và paste vào file cấu hình.

Khi tất cả các biến được điền đúng cách, hãy lưu file .

Khởi tạo Kho lưu trữ

Để tải cấu hình vào môi trường shell của ta , ta source file ta vừa tạo:

  • source ~/.restic-env

Bạn có thể kiểm tra đảm bảo điều này hoạt động bằng cách in ra một trong các biến:

  • echo $RESTIC_REPOSITORY

URL repository của bạn sẽ được in ra. Bây giờ ta có thể khởi tạo repository của bạn bằng lệnh Restic:

  • restic init
Output
created restic backend 57f73c1afc at s3:nyc3.digitaloceanspaces.com/example-bucket Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.

Kho lưu trữ hiện đã sẵn sàng để nhận dữ liệu backup . Ta sẽ gửi dữ liệu đó tiếp theo.

Backup một folder

Bây giờ repository đối tượng từ xa của ta đã được khởi tạo, ta có thể đẩy dữ liệu backup vào đó. Ngoài mã hóa, Restic thực hiện khác biệt và khử trùng lặp trong khi backup . Điều này nghĩa là bản backup đầu tiên của ta sẽ là bản backup đầy đủ của tất cả các file và các bản backup tiếp theo sẽ chỉ phải truyền các file mới và các thay đổi. Ngoài ra, dữ liệu trùng lặp sẽ được phát hiện và không được ghi vào phần backend , giúp tiết kiệm dung lượng.

Trước khi ta backup , nếu bạn đang thử nghiệm mọi thứ trên hệ thống trống và cần một số file mẫu để backup , hãy tạo một file văn bản đơn giản trong folder chính của bạn:

  • echo "sharks have no organs for producing sound" >> ~/facts.txt

Điều này sẽ tạo ra một file tin facts.txt . Bây giờ backup nó, cùng với phần còn lại của folder chính của bạn:

  • restic backup ~
Output
scan [/home/sammy] scanned 4 directories, 14 files in 0:00 [0:04] 100.00% 2.558 MiB/s 10.230 MiB / 10.230 MiB 18 / 18 items 0 errors ETA 0:00 duration: 0:04, 2.16MiB/s snapshot 427696a3 saved

Restic sẽ hoạt động trong một thời gian ngắn, hiển thị cho bạn các cập nhật trạng thái trực tiếp trong suốt quá trình, sau đó xuất ra ID của ảnh chụp nhanh mới (được đánh dấu ở trên).

Lưu ý: Nếu bạn muốn backup một folder khác, hãy thay thế dấu ~ ở trên bằng đường dẫn của folder . Bạn có thể cần sử dụng sudo trước restic backup nếu folder đích không thuộc sở hữu của user của bạn. Nếu bạn cần sudo để backup , hãy nhớ sử dụng lại nó khi khôi phục ảnh chụp nhanh, nếu không bạn có thể gặp một số lỗi về việc không thể cài đặt quyền đúng cách.

Tiếp theo, ta sẽ tìm hiểu cách tìm hiểu thêm thông tin về các ảnh chụp nhanh được lưu trữ trong repository lưu trữ của ta .

Ảnh chụp nhanh danh sách

Để liệt kê các bản backup được lưu trữ trong repository lưu trữ, hãy sử dụng lệnh con snapshots :

  • restic snapshots
Output
ID Date Host Tags Directory ---------------------------------------------------------------------- 427696a3 2017-10-23 16:37:17 restic-test /home/sammy

Bạn có thể thấy ID ảnh chụp nhanh mà ta nhận được trong lần backup đầu tiên, dấu thời gian cho thời điểm ảnh chụp nhanh được chụp, tên server , thẻ và folder đã được backup .

Cột Thẻ của ta trống, vì ta không sử dụng bất kỳ thẻ nào trong ví dụ này. Bạn có thể thêm thẻ vào ảnh chụp nhanh bằng cách thêm cờ --tag theo sau là tên thẻ. Bạn có thể chỉ định nhiều thẻ bằng cách lặp lại tùy chọn --tag .

Thẻ có thể hữu ích để lọc ảnh chụp nhanh sau này khi bạn cài đặt policy lưu giữ hoặc khi tìm kiếm thủ công một ảnh chụp nhanh cụ thể để khôi phục.

Server lưu trữ có trong danh sách vì bạn có thể gửi ảnh chụp nhanh từ nhiều server lưu trữ đến một repository duy nhất. Bạn cần sao chép password repository vào từng máy. Bạn cũng có thể cài đặt nhiều password cho repository của bạn để kiểm soát quyền truy cập chi tiết hơn. Bạn có thể tìm hiểu thêm thông tin về việc quản lý password repository trong tài liệu chính thức của Restic .

Bây giờ ta đã tải lên ảnh chụp nhanh và biết cách liệt kê nội dung repository của bạn , ta sẽ sử dụng ID ảnh chụp nhanh của bạn để kiểm tra khôi phục bản backup .

Khôi phục Ảnh chụp nhanh

Ta sẽ khôi phục toàn bộ ảnh chụp nhanh vào một folder tạm thời để xác minh mọi thứ đang hoạt động bình thường. Sử dụng ID ảnh chụp nhanh từ danh sách ở bước trước. Ta sẽ gửi các file đã khôi phục đến một folder mới trong /tmp/restore :

  • restic restore 427696a3 --target /tmp/restore
Output
restoring <Snapshot 427696a3 of [/home/sammy] at 2017-10-23 16:37:17.573706791 +0000 UTC by sammy@restic-test> to /tmp/restore

Thay đổi folder và liệt kê nội dung của nó:

  • cd /tmp/restore
  • ls

Bạn sẽ thấy folder mà ta đã backup . Trong ví dụ này, nó sẽ là folder chính của sammy user . Nhập folder đã khôi phục và liệt kê các file bên trong:

  • cd sammy
  • ls
Output
facts.txt restic_0.7.3_linux_amd64

facts.txt của ta ở đó, cùng với file binary restic mà ta đã extract ở phần đầu của hướng dẫn. In file facts.txt ra màn hình đảm bảo đó là những gì ta mong đợi:

  • cat facts.txt

Bạn sẽ thấy sự thật về cá mập mà ta đã đưa vào file trước đây. Nó đã làm việc!

Lưu ý: Nếu bạn không muốn khôi phục lại tất cả các file trong một bản chụp, bạn có thể sử dụng --include--exclude tùy chọn để tinh chỉnh lựa chọn của bạn. Đọc phần Khôi phục của tài liệu Restic để tìm hiểu thêm.

Bây giờ ta biết backup và khôi phục đang hoạt động, hãy tự động tạo các ảnh chụp nhanh mới.

Tự động hóa backup

Restic bao gồm một lệnh forget để giúp duy trì một repository ảnh chụp nhanh đang chạy. Bạn có thể sử dụng restic forget --prune để đặt các policy về số lượng bản backup cần giữ hàng ngày, hàng giờ, hàng tuần, v.v. Các bản backup không phù hợp với policy sẽ bị xóa khỏi repository .

Ta sẽ sử dụng dịch vụ hệ thống cron để chạy tác vụ backup mỗi giờ. Đầu tiên, hãy mở crontab của user của bạn:

  • crontab -e

Bạn có thể được yêu cầu chọn một editor . Chọn yêu thích của bạn - hoặc nano nếu bạn không có ý kiến - sau đó nhấn ENTER . Crontab mặc định cho user của bạn sẽ mở ra trong editor của bạn. Nó có thể có một số comment giải thích cú pháp crontab. Ở cuối file , thêm phần sau vào một dòng mới:

crontab
. . . 42 * * * * . /home/sammy/.restic-env; /usr/local/bin/restic backup -q /home/sammy; /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7 

Hãy bước qua lệnh này. 42 * * * * xác định thời điểm cron nên chạy tác vụ. Trong trường hợp này, nó sẽ chạy ở phút thứ 42 của mỗi giờ , ngày , thángngày trong tuần . Để biết thêm thông tin về cú pháp này, hãy đọc hướng dẫn của ta Cách sử dụng Cron Để Tự động hóa Công việc .

Tiếp theo . / home/sammy /.restic-env; tương đương với source ~/.restic-env mà ta đã chạy trước đây để tải các khóa và password vào môi trường shell của ta . Điều này có tác dụng tương tự trong crontab của ta : các lệnh tiếp theo trên dòng này sẽ có quyền truy cập vào thông tin này.

/usr/local/bin/restic backup -q / home/sammy ; là lệnh backup Restic của ta . Ta sử dụng đường dẫn đầy đủ đến binary restic , vì dịch vụ cron sẽ không tự động tìm kiếm các lệnh trong /usr/local/bin . Tương tự, ta đánh vần rõ ràng đường dẫn folder chính bằng /home/sammy thay vì sử dụng phím tắt ~ . Tốt nhất là càng rõ ràng càng tốt khi viết lệnh cho cron . Ta sử dụng cờ -q để chặn kết quả trạng thái từ Restic, vì ta sẽ không ở gần để đọc nó.

Cuối cùng, /usr/local/bin/restic forget -q --prune --keep-hourly 24 --keep-daily 7 sẽ lược bỏ các ảnh chụp nhanh cũ không còn cần thiết dựa trên các cờ lưu giữ đã chỉ định. Trong ví dụ này, ta lưu giữ ảnh chụp nhanh 24 giờ và 7 ảnh chụp nhanh hàng ngày. Ngoài ra còn có các tùy chọn cho các policy hàng tuần, hàng tháng, hàng năm và dựa trên thẻ.

Khi bạn đã cập nhật lệnh để phù hợp với nhu cầu của bạn , hãy lưu file và thoát khỏi editor . Crontab sẽ được cài đặt và kích hoạt. Sau một vài giờ, hãy chạy lại restic snapshots để xác minh ảnh chụp nhanh mới đang được tải lên.

Kết luận

Trong hướng dẫn này, ta đã tạo file cấu hình cho Restic với các chi tiết xác thực lưu trữ đối tượng của ta , sử dụng Restic để khởi tạo repository , backup một số file và kiểm tra bản backup . Cuối cùng, ta đã tự động hóa quy trình với cron.

Restic có tính linh hoạt hơn và nhiều tính năng hơn đã được thảo luận ở đây. Để tìm hiểu thêm về Restic, hãy xem tài liệu chính thức hoặc trang web chính của họ .


Tags:

Các tin liên quan