Khi nào bạn cần rclone?
Mình từng mất sạch dữ liệu một lần vì đĩa SSD của VPS hỏng đột ngột — không có snapshot, không có backup. Sau lần đó, mình không dám để dữ liệu quan trọng ở một chỗ nữa. Vấn đề là rsync hay scp chỉ đồng bộ được giữa các máy Linux với nhau. Muốn đẩy lên Google Drive hay S3 thì cần thứ khác.
rclone giải quyết đúng bài toán này. Nó là công cụ dòng lệnh mã nguồn mở, hỗ trợ hơn 70 provider cloud storage — Google Drive, Amazon S3, OneDrive, Backblaze B2, Dropbox, SFTP và còn nhiều nữa. Cú pháp gần giống rsync, nhưng thay vì đồng bộ giữa hai máy, target là cloud.
Ba khái niệm cốt lõi trước khi bắt đầu
Nếu bỏ qua phần này, bạn sẽ bị lạc ngay từ lệnh đầu tiên. Hiểu ba thứ sau là đủ:
- Remote: Tên bạn đặt cho một kết nối cloud (ví dụ:
gdrive:,mys3:). Coi như mounting point vậy. - Path: Đường dẫn thư mục trong remote.
gdrive:backups/vps1nghĩa là thư mụcbackups/vps1trong Google Drive của bạn. - Config file: Rclone lưu thông tin xác thực tại
~/.config/rclone/rclone.conf. Mọi remote bạn tạo đều nằm ở đây.
Ba lệnh bạn sẽ dùng nhiều nhất:
rclone copy— copy file từ nguồn sang đích, không xóa file cũ ở đíchrclone sync— đồng bộ hoàn toàn, xóa file ở đích nếu nguồn không còn nữarclone ls/rclone lsd— liệt kê file/thư mục trong remote
Cài đặt rclone trên Linux
Script cài chính thức, chạy được trên mọi distro:
curl https://rclone.org/install.sh | sudo bash
Ubuntu/Debian thì có thể dùng apt cho tiện:
sudo apt update && sudo apt install rclone -y
Kiểm tra sau khi cài xong:
rclone version
Thực hành: Cấu hình từng loại Cloud
1. Google Drive
Chạy lệnh cấu hình tương tác:
rclone config
Làm theo các bước sau trong menu:
- Nhấn
nđể tạo remote mới - Đặt tên:
gdrive - Chọn loại storage: nhập
drive(hoặc số tương ứng Google Drive) - Để trống
client_idvàclient_secret— dùng default của rclone là ổn - Scope: chọn
1(full access) - VPS không có trình duyệt? Chọn
nở bước Use auto config. Rclone in ra một URL, bạn mở trên máy local, xác thực Google, rồi dán token trả về vào terminal VPS.
Sau khi xong, kiểm tra bằng cách liệt kê thư mục trong Drive:
rclone lsd gdrive:
2. Amazon S3
S3 xác thực bằng Access Key + Secret Key, không qua OAuth như Google. Tạo IAM user trên AWS Console trước — gán quyền AmazonS3FullAccess, rồi lấy credentials. Xong mới chạy:
rclone config
- Tạo remote mới tên
mys3 - Chọn storage type:
s3 - Provider:
AWS - Nhập
access_key_idvàsecret_access_key - Region: ví dụ
ap-northeast-1(Tokyo) hoặcap-southeast-1(Singapore) - Các bước còn lại nhấn Enter để dùng mặc định
Kiểm tra kết nối:
rclone lsd mys3:ten-bucket-cua-ban
3. Microsoft OneDrive
rclone config
- Tạo remote tên
onedrive - Storage type:
onedrive - Để trống client_id/secret
- Xác thực qua browser — flow tương tự Google Drive
- Chọn loại account:
onedrive(personal) hoặcbusiness(Microsoft 365)
Các lệnh backup thực tế
Copy thư mục lên cloud
# Copy /var/www/html lên Google Drive (thư mục backups/web)
rclone copy /var/www/html gdrive:backups/web --progress
# Copy database dump lên S3
rclone copy /backup/db.sql.gz mys3:my-backup-bucket/db/ --progress
Sync hoàn toàn — cẩn thận với lệnh này
# Sync /home/ubuntu/data lên OneDrive
rclone sync /home/ubuntu/data onedrive:vps-backup/data --progress
# Luôn chạy --dry-run trước để xem sẽ làm gì, không thực hiện thật
rclone sync /home/ubuntu/data onedrive:vps-backup/data --dry-run
Sau 3 năm quản lý hơn 10 VPS, mình rút ra một bài học đắt: luôn chạy --dry-run trước khi dùng rclone sync thật. Lệnh sync xóa file ở đích nếu nguồn không có — mình từng suýt xóa nhầm cả bucket S3 vì hoán đổi nhầm nguồn và đích. Cái cảm giác tim đập nhanh đó không muốn trải qua lần hai.
Lọc file, loại trừ thư mục
# Chỉ copy file .sql và .gz
rclone copy /backup gdrive:backups --include "*.{sql,gz}" --progress
# Loại trừ node_modules và .git — tiết kiệm đáng kể dung lượng
rclone copy /var/www/myapp gdrive:backups/myapp \
--exclude "node_modules/**" \
--exclude ".git/**" \
--progress
Kiểm tra trước và sau backup
# Liệt kê file trong remote
rclone ls gdrive:backups/web
# So sánh local vs remote — phát hiện file bị thiếu hoặc khác nhau
rclone check /var/www/html gdrive:backups/web
Tự động hóa với cron
Tạo script backup gọn gàng:
cat > /usr/local/bin/backup-to-cloud.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d)
LOG="/var/log/rclone-backup.log"
echo "[$(date)] Bắt đầu backup..." >> $LOG
# Dump database
mysqldump -u root -p"$MYSQL_PASS" mydb > /tmp/mydb-$DATE.sql
gzip /tmp/mydb-$DATE.sql
# Upload lên cloud
rclone copy /tmp/mydb-$DATE.sql.gz gdrive:backups/db/ >> $LOG 2>&1
rclone sync /var/www/html gdrive:backups/web/ >> $LOG 2>&1
# Dọn file cũ hơn 7 ngày
find /tmp -name "mydb-*.sql.gz" -mtime +7 -delete
echo "[$(date)] Xong!" >> $LOG
EOF
chmod +x /usr/local/bin/backup-to-cloud.sh
Thêm vào crontab để chạy mỗi ngày lúc 2 giờ sáng — khung giờ traffic thấp, không ảnh hưởng server:
crontab -e
# Thêm dòng sau:
0 2 * * * /usr/local/bin/backup-to-cloud.sh
Một số tip hữu ích
- Bandwidth limit: Backup ban ngày dễ làm nghẽn mạng. Thêm
--bwlimit 10Mđể giới hạn 10MB/s — server vẫn phục vụ bình thường trong lúc backup chạy ngầm. - Transfers song song: Mặc định rclone copy 4 file cùng lúc. Nếu backup nhiều file nhỏ (dưới 1MB), tăng lên
--transfers 16sẽ nhanh hơn đáng kể. - Mount cloud như ổ đĩa:
rclone mount gdrive: /mnt/gdrive --daemon— sau lệnh này, Google Drive xuất hiện như một folder bình thường,ls /mnt/gdrivelà thấy file. - Mã hóa trước khi upload: Remote type
cryptmã hóa file trước khi đẩy lên cloud. Kể cả nhà cung cấp cũng không đọc được — hữu ích khi backup dữ liệu nhạy cảm lên S3 hay Drive của công ty.
Kết luận
rclone đã cứu mình khỏi mấy tình huống căng thẳng — không chỉ backup VPS mà còn migration dữ liệu giữa các cloud provider mà không cần download về máy local. Cú pháp rõ ràng, hỗ trợ nhiều provider, script hóa hoàn toàn. Nếu bạn đang quản lý VPS mà chưa có backup offsite, đây là thứ nên cài ngay hôm nay. Bắt đầu với rclone config, kết nối một remote, thử rclone copy --dry-run — vậy là an toàn rồi.
