สำรองข้อมูล VPS ขึ้น Cloud ด้วย Rclone
Rclone คือเครื่องมือบรรทัดคำสั่งที่ช่วยซิงค์และคัดลอกข้อมูลไปยัง cloud storage ที่หลากหลาย เช่น Google Drive, AWS S3, Azure Blob, Backblaze B2, Dropbox, OneDrive และอื่น ๆ ถ้าคุณต้องการสำรองข้อมูล VPS ไปยัง cloud ที่ปลอดภัยและอัตโนมัติ Rclone เป็นตัวเลือกที่หนักแน่น เร็ว และมีให้เลือกมากมาย
ติดตั้ง Rclone บน VPS
# ติดตั้งโดยใช้ install script อย่างเป็นทางการ
curl https://rclone.org/install.sh | bash
# หรือใช้ apt (Ubuntu/Debian)
sudo apt update
sudo apt install rclone -y
# ตรวจสอบการติดตั้ง
rclone version
คำสั่งแรกจะดาวน์โหลด binary ล่าสุด คำสั่ง apt อาจไม่ใช่เวอร์ชันล่าสุด แต่เพียงพอสำหรับการใช้งานส่วนใหญ่
ตั้งค่า Rclone Remote (Cloud Storage)
Rclone ใช้คำว่า "remote" เพื่ออ้างถึง cloud service ที่คุณต้องการเชื่อมต่อ รันคำสั่ง config เพื่อตั้งค่าแบบโต้ตอบ:
rclone config
Rclone จะถามคำถามต่าง ๆ:
- Name: ตั้งชื่อ remote (เช่น "mydrive", "s3backup", "b2")
- Type: เลือก cloud service (Google Drive = drive, AWS S3 = s3, Backblaze = b2 เป็นต้น)
- Authentication: เลือกวิธีการยืนยันตัวตน (OAuth token, API key, username/password)
ตัวอย่างการตั้งค่า Google Drive:
name> mydrive
type> drive
scope> 1 # ให้อ่าน-เขียน Google Drive ทั้งหมด
token> (เว้นว่าง และ rclone จะเปิด browser ให้อนุญาต)
ตัวอย่างการตั้งค่า Backblaze B2:
name> b2backup
type> b2
account_id> [your-account-id]
app_key> [your-app-key]
hard_delete> true # ลบถาวร (ไม่ใช่ soft delete)
สำหรับ AWS S3 Compatible (เช่น Cloudflare R2, DigitalOcean Spaces):
name> s3
type> s3
provider> 1 # AWS
access_key_id> [your-key]
secret_access_key> [your-secret]
region> us-east-1 # หรือ region ที่ใช้
rclone listremotes
ทดสอบการเชื่อมต่อ Remote
# ดูรายการไฟล์ใน remote root
rclone lsd mydrive:
# ดูรายละเอียดไฟล์
rclone ls mydrive:
# ดูขนาดทั้งหมด
rclone size mydrive:
ถ้าคำสั่งทำงานได้ แสดงว่า authentication สำเร็จแล้ว
ซิงค์ข้อมูลไปยัง Cloud
คำสั่ง rclone sync ส่งเฉพาะไฟล์ที่เปลี่ยนแปลง ไม่ส่งทั้งหมดทุกครั้ง:
# Sync ไฟล์ท้องถิ่นไปยัง cloud
rclone sync /var/www/html/ mydrive:backup/webroot/
# Sync database backup
rclone sync /backup/mysql/ b2backup:backup/database/
# Sync พร้อมแสดงความคืบหน้า
rclone sync /var/www/html/ mydrive:backup/webroot/ --progress
# Sync และแสดง file ที่เปลี่ยนแปลง
rclone sync /var/www/html/ mydrive:backup/webroot/ -v
ความแตกต่างระหว่าง sync กับ copy:
rclone sync— ลบไฟล์ใน destination ถ้าไฟล์นั้นไม่มีใน source (หลักการ mirror)rclone copy— คัดลอกเฉพาะไฟล์ใหม่ โดยไม่ลบไฟล์เก่า
สำหรับ backup ควรใช้ copy เพื่อรักษาประวัติ เก็บแต่ละรอบไว้คนละ folder ตามวันที่ (ไม่ลบของเก่า จึงย้อนกลับไป restore เวอร์ชันก่อนหน้าได้เสมอ แต่ต้องระวัง storage ใช้เยอะขึ้นเรื่อย ๆ):
# Copy เก็บทุกรอบแยกโฟลเดอร์ตามวันที่ (ไม่ลบของเก่า)
rclone copy /backup/mysql/ b2backup:backup/$(date +%Y%m%d)/
ตั้งค่า Cron Job สำหรับ Backup อัตโนมัติ
สร้าง script backup:
#!/bin/bash
# /usr/local/bin/rclone-backup.sh
set -euo pipefail
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/rclone-backup.log"
{
echo "[$(date)] Starting Rclone backup..."
# Backup MySQL database
mysqldump -u root -p"${MYSQL_PASS}" --all-databases --single-transaction \
| gzip > "/backup/database-${DATE}.sql.gz"
echo "[$(date)] Database backup done"
# Sync to cloud
rclone sync /var/www/html/ b2backup:backup/webroot/ --progress --delete-during
echo "[$(date)] Web files sync done"
rclone sync /backup/database-*.sql.gz b2backup:backup/database/ --progress --delete-during
echo "[$(date)] Database sync done"
# Clean old local backups (older than 7 days)
find /backup -name "database-*.sql.gz" -mtime +7 -delete
echo "[$(date)] Old backups cleaned"
echo "[$(date)] Backup completed successfully"
} >> "$LOG_FILE" 2>&1
บันทึกเป็น executable:
chmod +x /usr/local/bin/rclone-backup.sh
เพิ่มใน crontab ให้รันอัตโนมัติ:
# บรรทัด crontab (รันเวลา 02:00 ทุกคืน)
0 2 * * * MYSQL_PASS="yourpassword" /usr/local/bin/rclone-backup.sh
แก้ไข crontab ด้วย:
sudo crontab -e
หรือสำหรับผู้ใช้ root:
sudo crontab -e -u root
--bwlimit เพื่อจำกัดความเร็วในการอัพโหลด เช่น --bwlimit 5M เพื่อไม่ให้กิน bandwidth ของผู้ใช้ทั่วไป
ตรวจสอบว่า Rclone ทำงานถูกต้อง
# ดูไฟล์ที่ upload สำเร็จ
rclone lsd b2backup:backup/
# ตรวจสอบการซิงค์ (dry run)
rclone sync /var/www/html/ b2backup:backup/webroot/ --dry-run
# ดูไฟล์ที่เปลี่ยนแปลง
rclone check /var/www/html/ b2backup:backup/webroot/
# ดู log ของ cron
sudo tail -50 /var/log/rclone-backup.log
# ตรวจสอบว่า cron ทำงาน
grep CRON /var/log/syslog | tail -10
แก้ปัญหาที่พบบ่อย
Error: "403 Forbidden" หรือ "Access Denied" เมื่อ upload
Token หรือ API key หมดอายุ ให้ re-authenticate:
rclone config reconnect b2backup:
# หรือลบและตั้งค่าใหม่
rclone config delete b2backup
rclone config
Error: "Timeout" เมื่อ sync
Network ไม่เสถียรหรือไฟล์ใหญ่เกินไป ลองใช้ retry และ timeout ที่นาน:
rclone sync /var/www/html/ b2backup:backup/webroot/ \
--retries 5 \
--low-level-retries 10 \
--timeout 10m
Rclone รันช้า
ใช้ parallel transfer:
rclone sync /var/www/html/ b2backup:backup/webroot/ \
--transfers 4 \
--checkers 8
ไฟล์ที่ลบไปแล้วในเว็บรูท แต่ยังค้างอยู่บน cloud (orphaned files)
ตรวจสอบว่า source ลบไฟล์นั้นไปจริง ๆ แล้วให้ซิงค์ด้วย flag --delete-during เพื่อลบไฟล์เดียวกันใน destination ด้วย:
rclone sync /var/www/html/ b2backup:backup/webroot/ --delete-during --dry-run
# (ลบ --dry-run ถ้าแน่ใจ)
Rclone ใน cron ไม่ทำงาน แต่รันด้วยมือได้
ปัญหาอาจเป็นเพราะตัวแปร environment ที่ขาดหาย ตรวจสอบ:
# ตรวจสอบว่า Rclone config อยู่ที่ไหน
rclone config file
# หากต้องการให้ cron ใช้ config ที่อื่น ตั้งค่าด้วย RCLONE_CONFIG_FILE
0 2 * * * RCLONE_CONFIG_FILE=/root/.config/rclone/rclone.conf /usr/local/bin/rclone-backup.sh
คำถามที่พบบ่อย
ควรใช้ Rclone sync หรือ copy สำหรับ backup?
ใช้ copy ถ้าต้องการเก็บประวัติไฟล์เก่า โดยแต่ละวันเก็บใน folder แยก (เช่น `/backup/2026-07-08/`) ใช้ sync ถ้าต้องการให้ cloud เป็น mirror ของเซิร์ฟเวอร์เท่านั้น
Cloud storage ไหนถูกและดีที่สุด?
Backblaze B2 และ Cloudflare R2 ถูกที่สุด R2 ไม่คิดค่า egress (download) ดี B2 มี free tier 10 GB หากต้องการ restore บ่อย R2 ประหยัดกว่า
จะ restore ไฟล์บางอันจาก cloud ได้อย่างไร?
ใช้ rclone copy เพื่อดาวน์โหลด:
rclone copy b2backup:backup/webroot/index.html /tmp/restored/
Rclone มีความยืดหยุ่นสูง และปลอดภัยในการสำรองข้อมูล VPS ขึ้น cloud ทำการตั้งค่าครั้งแรกให้ถูกต้อง แล้วปล่อยให้ cron ทำงานอัตโนมัติ คุณก็นอนสบายได้ทั้งคืนโดยรู้ว่าข้อมูล VPS ของคุณปลอดภัยอยู่ใน cloud
ในการสำรองข้อมูล VPS ควรตรวจสอบสุขภาพเซิร์ฟเวอร์และโดเมนเป็นประจำด้วย เครื่องมือเช่น dnsxray.com ช่วยตรวจสอบ SSL, DNS, Security Headers และปัญหาอื่น ๆ ได้ฟรี เพื่อจะได้รู้ว่าเซิร์ฟเวอร์ของคุณมีสุขภาพดีก่อนเริ่มทำ backup
สำหรับผู้ที่หาเซิร์ฟเวอร์ VPS ในไทยที่มี uptime guarantee และ support ที่ดี ลองดู บริการ VPS ของ asiagb.com ที่มีทั้ง Linux และ Windows พร้อม backup policy ที่ชัดเจน