Security

Dùng rclone backup VPS lên Google Drive

Vấn đề: backup VPS thủ công mất thời gian, dễ quên

Chạy VPS production, bạn cần sao lưu thường xuyên. Backup ra ổ ngoài hoặc FTP cũ được, nhưng Google Drive miễn phí dung lượng lớn (15 GB miễn phí, hoặc mua thêm 100 GB giá rẻ), lại truy xuất từ bất kỳ đâu. rclone là công cụ CLI mạnh mẽ, hỗ trợ 40+ cloud provider, cho phép sync, copy, encrypt dữ liệu. Bài này dùng rclone backup VPS lên Google Drive trên Ubuntu 24.04, bạn dùng Debian, AlmaLinux cũng làm tương tự.

Thực tế: sau khi thuê một VPS giá rẻ chạy web hoặc database, việc đầu tiên là thiết lập backup tự động. Rclone giúp bạn tránh mất dữ liệu do lỗi ổ đĩa, xóa nhầm, hoặc cài lại OS.

Yêu cầu trước khi bắt đầu

  • Một VPS Linux (Ubuntu 24.04 LTS khuyến nghị) có root hoặc sudo access.
  • Tài khoản Google Drive cá nhân (miễn phí) hoặc Google Workspace (nếu cần dung lượng >15 GB).
  • Client ID + Client Secret từ Google Cloud Console (rclone sẽ yêu cầu khi cấu hình OAuth).
  • Sẵn sàng dùng SSH và command line.

Bước 1 - Cài đặt rclone trên VPS

rclone có sẵn trong repo chính thức. Chạy lệnh sau:

sudo apt update && sudo apt install rclone -y

Sau khi cài, kiểm tra phiên bản:

rclone version

Output mong đợi: rclone v1.68.x (hoặc mới hơn). Nếu repo cũ, bạn có thể tải binary mới nhất từ rclone.org/downloads.

Bước 2 - Lấy Client ID và Client Secret từ Google Cloud Console

rclone dùng OAuth 2.0 để kết nối Google Drive. Bạn cần tạo một project trên Google Cloud Console:

  1. Truy cập console.cloud.google.com.
  2. Tạo project mới (hoặc chọn project có sẵn).
  3. Vào APIs & Services > Library, bật Google Drive API.
  4. Vào APIs & Services > Credentials > Create Credentials > OAuth client ID.
  5. Chọn Application type = Desktop app, nhập tên (vd: "rclone-backup-vps").
  6. Sau khi tạo, copy Client IDClient Secret. Giữ bí mật.

Lưu ý: Nếu bạn dùng rclone với --config tự tạo, vẫn cần client ID/secret. Không dùng mặc định vì giới hạn rate limit.

Bước 3 - Cấu hình rclone kết nối Google Drive

Chạy lệnh tạo remote mới:

rclone config

rclone sẽ hỏi từng bước. Trả lời như sau:

  • Chọn n (new remote).
  • Name: gdrive (hoặc tên bạn muốn).
  • Storage: chọn 13 (Google Drive).
  • client_id: paste Client ID bạn vừa tạo.
  • client_secret: paste Client Secret.
  • scope: nhập drive (full access) hoặc drive.file (chỉ file do app tạo). Khuyến nghị drive.
  • root_folder_id: để trống (dùng thư mục gốc).
  • service_account_file: để trống.
  • Edit advanced config: n (no).
  • Use auto config: n (no), vì SSH không có màn hình.

Sau đó rclone sẽ in link OAuth. Copy link đó, mở ở máy local (trình duyệt trên máy tính), đăng nhập Google, xác thực, lấy mã xác thực. Paste mã đó vào terminal SSH.

Kết quả: remote gdrive đã được tạo.

Kiểm tra thử:

rclone ls gdrive:

Nếu thấy danh sách file/folder trong Google Drive, bạn đã cấu hình thành công.

Bước 4 - Tạo script backup tự động

Tạo script /usr/local/bin/backup-vps.sh với nội dung:

#!/bin/bash
# Backup VPS to Google Drive via rclone
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/tmp/backup-${TIMESTAMP}"
mkdir -p ${BACKUP_DIR}

# Backup các thư mục quan trọng
tar -czf ${BACKUP_DIR}/etc.tar.gz /etc
tar -czf ${BACKUP_DIR}/var-www.tar.gz /var/www
# Nếu có database MySQL/MariaDB:
mysqldump -u root --all-databases > ${BACKUP_DIR}/all-databases.sql 2>/dev/null

# Sync lên Google Drive, xóa local, giữ 30 ngày trên Drive
rclone move ${BACKUP_DIR} gdrive:backup-vps/ --log-file=/var/log/rclone-backup.log --delete-empty-src-dirs

# Cleanup log cũ (giữ 7 ngày)
find /var/log/rclone-backup.log* -mtime +7 -delete

Giải thích: script tạo thư mục tạm, nén /etc (cấu hình hệ thống) và /var/www (dữ liệu web), dump toàn bộ database. Dùng rclone move để copy lên Drive rồi xóa local, tránh đầy ổ.

Phân quyền script:

sudo chmod +x /usr/local/bin/backup-vps.sh

Bước 5 - Thiết lập lịch chạy tự động với crontab

Chạy lệnh để mở crontab của root:

sudo crontab -e

Thêm dòng sau để chạy backup mỗi ngày lúc 3h sáng:

0 3 * * * /usr/local/bin/backup-vps.sh

Kiểm tra crontab đã kích hoạt:

sudo crontab -l

Output phải hiển thị dòng bạn vừa thêm.

Khuyến nghị: Chạy thử script lần đầu để verify:

sudo /usr/local/bin/backup-vps.sh

Sau đó kiểm tra log:

cat /var/log/rclone-backup.log

Vào Google Drive, xem thư mục backup-vps có file backup không.

Bước 6 - Bảo mật token rclone

File config rclone mặc định tại ~/.config/rclone/rclone.conf. File này chứa token OAuth có quyền đọc/ghi toàn bộ Drive của bạn. Cần bảo vệ:

chmod 600 ~/.config/rclone/rclone.conf

Nếu bạn backup có database, dùng .my.cnf riêng với mật khẩu root, chứ không viết trực tiếp trong script. Hoặc dùng biến môi trường.

Xử lý lỗi thường gặp khi dùng rclone backup VPS lên Google Drive

Lỗi: "Failed to create file system for "gdrive:": couldn't find key in config"

Nguyên nhân: file config bị thiếu hoặc sai cú pháp. Chạy rclone config file để biết đường dẫn chính xác. Đảm bảo file tồn tại và có quyền đọc.

Lỗi: "Google Drive API rate limit exceeded"

Giới hạn 10 yêu cầu/giây cho mỗi user. Nếu có nhiều file nhỏ, dùng --tpslimit 5 để giảm tốc. Hoặc dùng client ID riêng thay vì public.

Lỗi: rclone không tự động refresh token

rclone tự động refresh nếu có client_secret. Kiểm tra log: tail -f /var/log/rclone-backup.log. Nếu token hết hạn, chạy lại rclone config reconnect gdrive:.

Mẹo nâng cao

  • Mã hóa trước khi upload: dùng crypt remote: rclone config > type crypt. Rclone sẽ mã hóa file trên client trước khi gửi lên Drive.
  • Giới hạn băng thông: thêm flag --bwlimit 2M để không ảnh hưởng tới ứng dụng.
  • Chạy trên các distro khác: Debian/AlmaLinux cũng dùng apt install rclone hoặc dnf install rclone tương tự.
  • Kiểm tra dung lượng VPS: trước khi backup, dùng df -h xem còn đủ chỗ cho file tạm không. VPS NVMe dung lượng nhỏ (25-50 GB) rất dễ đầy nếu backup thường xuyên. Nếu bạn dùng VPS Linux với ổ NVMe 50 GB, nên backup trực tiếp lên Drive mà không giữ local lâu.

Câu hỏi thường gặp

rclone backup có bảo mật không?

Dữ liệu gửi qua HTTPS (TLS). File cấu hình chứa token, bạn nên set quyền 600. Nếu cần bảo mật thêm, dùng crypt remote để mã hóa đầu cuối.

Bao nhiêu dung lượng Google Drive miễn phí?

15 GB miễn phí. Dùng Google Workspace (Business Starter) có 30 GB/người với giá ~6 USD/tháng. Hoặc dùng Drive cá nhân mua thêm 100 GB giá 2-3 USD/tháng.

Có thể backup nhiều VPS vào cùng một Drive không?

Có. Tạo thư mục riêng cho từng VPS trong script (ví dụ gdrive:backup-vps/node1/). Dùng timestamp để tránh trùng tên.

rclone có hỗ trợ backup database trực tiếp không?

Không trực tiếp. Bạn cần dùng mysqldump/pg_dump xuất ra file SQL trước, rồi dùng rclone upload file đó.

Làm sao để khôi phục từ bản backup?

Dùng rclone copy gdrive:backup-vps/et…tar.gz /tmp/ rồi tar -xzf. Với database: import file SQL qua mysql CLI.

Làm sao để tránh backup trùng file?

Dùng rclone sync thay rclone move. Sync chỉ upload file mới/thay đổi, không upload lại file cũ. Kết hợp --backup-dir để giữ phiên bản cũ.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.