Tự động sao lưu file vào máy chủ từ xa với Rsync | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Tự động sao lưu file vào máy chủ từ xa với Rsync

Chia sẻ kiến thức 05/03/2022

Sao lưu với rsync là một cách hiệu quả để tự quản lý các file cục bộ của bạn. Đây là mọi thứ bạn cần biết.

Sao lưu với rsync là một cách hiệu quả để tự quản lý các file cục bộ của bạn. Đây là mọi thứ bạn cần biết.

Bạn đã bao giờ lo lắng về việc mất dữ liệu của mình hoặc cảm thấy mệt mỏi với việc thực hiện sao lưu thủ công hàng ngày hoặc hàng tuần? Hãy sử dụng lệnh rsyncvà tự động đồng bộ hóa các file cục bộ của bạn với máy chủ từ xa. Xin lưu ý, hướng dẫn này yêu cầu quyền truy cập vào máy chủ Linux từ xa (ví dụ: AWS) và sử dụng Ubuntu 20.04 (mặc dù bạn có thể áp dụng nó trên bất kỳ bản phân phối Linux nào). 

Cài đặt rsync

Trước hết, hãy kiểm tra xem rsyncđã được cài đặt hay chưa. Trên cả PC cục bộ và máy chủ web của bạn, hãy chạy lệnh:

rsync --version

Nếu kết quả hiển thị phiên bản rsync hiện tại, thì bạn đã sẵn sàng cho bước tiếp theo. Ngược lại, nếu bạn nhận được lỗi command not found (không tìm thấy lệnh), bạn có thể cài đặt rsyncbằng lệnh này:

sudo apt-get -y install rsync

Tạo khóa SSH

Chúng tôi sẽ sử dụng khóa SSH để xác thực kết nối giữa PC cục bộ và máy chủ từ xa. Để tạo khóa SSH mới trên PC cục bộ của bạn trong terminal, hãy chạy lệnh:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/rsync.key

Khi được nhắc nhập mật khẩu, hãy để trống và nhấn phím Enter hai lần. Thao tác này sẽ tạo ra hai tệp mới trong thư mục ~/.ssh/có tên rsync.keylà khóa riêng tư và rsync.key.publà khóa công khai.

Thiết lập máy chủ từ xa

Mặc dù không bắt buộc, đối với hướng dẫn này, chúng tôi sẽ tạo một người dùng mới trên máy chủ từ xa cho các kết nối rsync và để lưu trữ tất cả các tệp sao lưu. Đăng nhập vào máy chủ từ xa qua SSH và chạy lệnh này:

sudo useradd -m rsync

Ví dụ trên sử dụng tên người dùng rsync, nhưng bạn có thể thay đổi nó thành bất kỳ thứ gì bạn muốn. Tùy chọn -m này chỉ đơn giản là yêu cầu Linux tạo một thư mục chính (home directory) cho người dùng mới của chúng ta.

Để cho phép PC cục bộ của bạn xác thực, khóa SSH công khai đã được tạo trong phần trước cần được sao chép sang máy chủ từ xa. Mở file /~.ssh/rsync.key.pub trong trình soạn thảo văn bản và bạn sẽ thấy một dòng trông giống như sau.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDNhyYKsjcGGdXmzOM3742+c+TzMLFdZtrMPj1q6JWNWzgY/gTGVy1C72kw6BcTYSG8B8kLQlaBRl16m2Gm8Ra/U1wl0TYSufOnRKjGq2glnBPysWNzR6i9qd4h/byKa4ptNH/ieYkT+BnSJVo8fT0iboYwEaL9D0jPtYxFzZes2ctsGZ/zi78VlX9N224YBtoZcrxK6gzKtcIVrplsXt4MbMCPc0hfr9f2VMt0HignLphTDLQWKwF3sGi4OHDPzNTRkjyHazsIOFIKDLQgdsIJv7b2VMs028YDqPnXHZZl4Ix5vg8ssqE+s/J+rzS0B6gwj2b/f6vJMI9DmTk8SO5LKWtSl4lXjLpQ1eP+xjf3SeMFWWkk2tPpGBo6d+8VJT6htj9Ga927qx3bYJ3FDdqjoE/28yBzMsg3wKI8lobiQGIbF0B0jZmSeq42ds7dh76iU/LOraWJWJhKPIjCYHdaVqj5rgxSulUW6oqr/LOxMNwsj5NLpyKygr5/RVjCUpxQLw5G7AClmW5nOZDFUgtI1CAOzhG8oYQes7jE7ZbQKmMf9IGquNV1BCRGX2mbcYad77UE2IjzPqSG8pFGb7ekZA6ukUk61fqoheL4Zl2jmhhWoXQ09LZE9FNfr1UwIoZ+GwUcip8NPIZPSo+Z4yMB/5VNF7J0o76eTNwh0gZlEw== user@host

Dòng này là khóa SSH công khai. Sao chép nó vào khay nhớ tạm (clipboard) của bạn và trong máy chủ từ xa chạy các lệnh sau:

sudo su rsync
mkdir -m 0700 $HOME/.ssh
echo "ssh-rsa AAAAB... user@host" > $HOME/.ssh/authorized_keys
chmod 0644 $HOME/.ssh/authorized_keys

Trong lệnh cuối cùng thứ hai, hãy thay thế văn bản giữa dấu ngoặc kép bằng dòng khóa SSH công khai đó. Vậy là xong, PC cục bộ của bạn bây giờ đã có thể xác thực với máy chủ từ xa của bạn.

Định cấu hình tệp cấu hình ssh

Hãy thêm mục nhập (entry) vào file ~/.ssh/config trên PC cục bộ của bạn để dễ dàng kết nối với máy chủ từ xa. Mở tệp này trên PC cục bộ của bạn bằng lệnh.

nano $HOME/.ssh/config

Trong tệp, hãy thêm một mục nhập cho máy chủ từ xa, chẳng hạn như:

host backup_server
    hostname 192.168.0.24
    user rsync
    IdentityFile ~/.ssh/rsync

Thay đổi tên máy chủ thành địa chỉ IP của máy chủ từ xa của bạn và nếu bạn sử dụng tên người dùng không phải “rsync”, hãy thay đổi điều đó. Bạn có thể sử dụng bất kỳ thứ gì bạn muốn cho máy chủ lưu trữ, nhưng đối với ví dụ này, “backup_server” đã được sử dụng. Lưu và đóng tệp bằng cách nhấn Ctrl + X, sau đó nhấn phím “Y” và Enter.

Kiểm tra kết nối SSH của bạn với máy chủ từ xa bằng lệnh.

ssh backup_server

Giả sử mọi thứ được thiết lập chính xác, bây giờ bạn sẽ đăng nhập vào máy chủ từ xa của mình thông qua SSH. Đóng kết nối bằng lệnh.

exit

Đồng bộ hóa tệp của bạn

Bây giờ, hãy kiểm tra chức năng rsync.Ví dụ, để đồng bộ hóa thư mục Documents trên PC cục bộ của bạn, hãy chạy lệnh:

rsync -avz --progress ~/Documents/ backup_server:~/Documents

Từ ~/Documents/đầu tiên chỉ định tệp hoặc thư mục cục bộ để đồng bộ hóa, backup_servertương ứng với mục nhập được thêm vào tệp ~/.ssh/configvà :~/Documentsở cuối dòng ra lệnh tải mọi thứ lên thư mục / Documents của máy chủ từ xa liên quan đến thư mục chính.

Đăng nhập vào máy chủ từ xa và bạn sẽ thấy thư mục Documents mới đồng bộ với thư mục PC cục bộ của bạn. Mỗi lần bạn chạy lệnh trên, chỉ các tệp đã được sửa đổi kể từ lần trước mới được tải lên, vì vậy bạn không phải tải lên liên tục toàn bộ nội dung của thư mục.

Tự động hóa qua Crontab

Giờ đây, mọi thứ đã được kiểm tra và hoạt động bình thường, chúng ta có thể dễ dàng tự động hóa toàn bộ quy trình bằng cách thêm một lệnh crontab vào PC cục bộ. Để tự động việc đồng bộ hóa thư mục cục bộ của bạn với máy chủ từ xa cứ sau 15 phút, hãy chạy lệnh sau trong terminal.

(crontab -l; echo "*/15 * * * * rsync -avz --progress ~/Documents/ backup_server:~/Documents > /dev/null 2>&1";) | crontab

Bạn có thể nhận được thông báo “no crontab for user” (không có crontab cho người dùng) và bạn có thể bỏ qua nó. Thay đổi thư mục Documents thành bất kỳ thứ gì bạn muốn sao lưu, nhưng đảm bảo để lại dấu gạch chéo cho các thư mục nếu không chúng sẽ không sao lưu đúng cách.

Kiểm tra để đảm bảo lệnh crontab đã được thêm thành công.

crontab -l

Nếu bạn thấy lệnh crontab vừa được thêm vào, thì mọi thứ đã sẵn sàng. Chờ 15 phút, kiểm tra máy chủ từ xa của bạn và tất cả các tệp cần thiết sẽ ở đó. Bắt đầu từ bây giờ, tất cả các thay đổi được thực hiện đối với tệp của bạn sẽ được tự động tải lên máy chủ từ xa sau mỗi 15 phút.

Tải xuống từ Máy chủ Từ xa

Bạn cũng có thể sử dụng rsyncđể tải xuống các tệp từ máy chủ từ xa và đồng bộ hóa chúng với PC cục bộ của mình. Sử dụng ví dụ về thư mục /Documents ở trên, trong terminal hãy chạy lệnh:

rsync -chavzP backup_server:~/Documents/ ~/Documents

Thư mục~./Documentstrên PC cục bộ của bạn sẽ trở thành một “tấm gương phản chiếu” của máy chủ từ xa.

Bao gồm và loại trừ các mẫu (pattern)

Nếu bạn chỉ cần đồng bộ hóa các tệp phù hợp với một mẫu nhất định, chẳng hạn như các tệp có đuôi.html, bạn có thể sử dụng mẫu –include. Trong terminal chạy lệnh: 

rsync -avz --include "*.html" --progress ~/mysite/ backup_server:~/public_html

Kiểm tra máy chủ từ xa và bạn sẽ chỉ thấy các tệp có đuôi .html từ thư mục cục bộ /mysite/ đã được tải lên thư mục /public_html/ từ xa. Tương tự, bạn cũng có thể đồng bộ hóa mọi thứ ngoại trừ một số tệp nhất định với tùy chọn–exclude. Ví dụ: lệnh sau sẽ đồng bộ hóa tất cả các tệp ngoại trừ những tệp có đuôi.txt.

rsync -avz --exclude "*.txt" --progress ~/mysite/ backup_server:~/public_html

Đồng bộ hóa hai thư mục cục bộ

Nếu cần, bạn cũng có thể đồng bộ hai thư mục cục bộ bằng lệnh:

rsync -zvr ~/source/directory ~/destination/directory

Lệnh này hoạt động giống hệt như khi đồng bộ hóa với máy chủ từ xa, điểm khác biệt duy nhất là hai thư mục đều là cục bộ.

Kết luận

Trong bài viết này, bạn đã tìm hiểu vềrsync, cách tạo và cài đặt khóa SSH, xác định máy chủ trong tệp ~./.ssh/config, đồng bộ hóa thư mục cục bộ và từ xa cũng như tự động hóa toàn bộ quy trình thông qua crontab. Từ nay sau, tất cả các tệp cần thiết sẽ luôn được đồng bộ hóa với máy chủ từ xa của bạn chỉ sau 15 phút.

Dịch từ: https://www.makeuseof.com/automatically-backup-files-to-with-rsync/

Vân Nguyễn

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
Chat với FUNiX GPT ×

yêu cầu gọi lại

error: Content is protected !!