สำรองข้อมูลแบบเข้ารหัสด้วย restic พร้อมตั้งเวลาอัตโนมัติ
การสำรองข้อมูลที่ดีต้องตอบได้สามข้อ ข้อมูลอยู่คนละเครื่องกับต้นฉบับ ข้อมูลถูกเข้ารหัสก่อนออกจากเครื่อง และเคยซ้อมกู้คืนจริงแล้ว การใช้ tar ร่วมกับ rsync ตอบข้อแรกได้ แต่ข้อสองต้องจัดการเอง และมักกินพื้นที่มากเพราะสำรองทั้งก้อนทุกครั้ง
restic ตอบทั้งสามข้อในเครื่องมือเดียว มันเข้ารหัสทุกอย่างก่อนส่งออก เก็บเฉพาะส่วนที่เปลี่ยน และมีคำสั่งตรวจสอบความถูกต้องของข้อมูลสำรองในตัว
สิ่งที่ต้องเตรียม
- Linux Server ที่ต้องการสำรองข้อมูล
- ปลายทางเก็บข้อมูล เลือกอย่างใดอย่างหนึ่ง เซิร์ฟเวอร์อื่นที่เข้าผ่าน SFTP ได้ หรือ Object Storage ที่รองรับ S3
- ที่เก็บรหัสผ่านของที่เก็บข้อมูลอย่างปลอดภัย เพราะหากลืมจะกู้ข้อมูลไม่ได้เลย
# Ubuntu / Debian
sudo apt install -y restic
# AlmaLinux / Rocky Linux
sudo dnf install -y restic
restic version
ขั้นตอนที่ 1: เตรียมข้อมูลการเชื่อมต่อ
sudo mkdir -p /root/.restic
sudo nano /root/.restic/env
สำหรับ S3 หรือ Object Storage
export RESTIC_REPOSITORY="s3:https://s3.example.com/backup-web1"
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export RESTIC_PASSWORD_FILE="/root/.restic/password"
สำหรับ SFTP ไปเซิร์ฟเวอร์อื่น
export RESTIC_REPOSITORY="sftp:[email protected]:/srv/backups/web1"
export RESTIC_PASSWORD_FILE="/root/.restic/password"
สร้างรหัสผ่านของที่เก็บข้อมูล
openssl rand -base64 48 | sudo tee /root/.restic/password > /dev/null
sudo chmod 600 /root/.restic/password /root/.restic/env
คัดลอกรหัสผ่านนี้ไปเก็บนอกเครื่องทันที เช่นในโปรแกรมจัดการรหัสผ่านขององค์กร หากเครื่องพังและไม่มีรหัสผ่านนี้ ข้อมูลสำรองทั้งหมดจะเปิดไม่ได้อย่างถาวร
ขั้นตอนที่ 2: สร้างที่เก็บข้อมูล
source /root/.restic/env
sudo -E restic init
ตรวจว่าสร้างสำเร็จ
sudo -E restic snapshots
ขั้นตอนที่ 3: สำรองข้อมูลครั้งแรก
sudo -E restic backup \
--exclude-caches \
--exclude='/var/www/*/storage/logs' \
--exclude='*.tmp' \
/etc /var/www /home /root
ครั้งแรกจะใช้เวลานานเพราะต้องส่งข้อมูลทั้งหมด ครั้งถัดไปจะเร็วมากเพราะส่งเฉพาะส่วนที่เปลี่ยน
สร้างไฟล์รายการยกเว้นเพื่อดูแลง่าย
sudo nano /root/.restic/excludes.txt
/proc
/sys
/dev
/run
/tmp
/var/tmp
/var/cache
/var/lib/mysql
*.sock
node_modules
.git
ยกเว้น /var/lib/mysql ไว้เสมอ การคัดลอกไฟล์ฐานข้อมูลขณะที่ระบบทำงานอยู่จะได้ไฟล์ที่เสียหาย ให้สำรองฐานข้อมูลด้วย mysqldump ลงไฟล์ก่อน แล้วค่อยให้ restic เก็บไฟล์นั้นไป
ขั้นตอนที่ 4: เขียนสคริปต์สำรองข้อมูล
sudo nano /usr/local/bin/restic-backup.sh
#!/bin/bash
set -euo pipefail
source /root/.restic/env
DUMP=/var/backups/mysql
mkdir -p "$DUMP"
# 1) ดัมป์ฐานข้อมูลก่อน
mysqldump --single-transaction --routines --all-databases \
| gzip > "$DUMP/all.sql.gz"
# 2) สำรองทั้งหมดขึ้นที่เก็บข้อมูล
restic backup \
--exclude-file=/root/.restic/excludes.txt \
--exclude-caches \
--tag automated \
/etc /var/www /home /root "$DUMP"
# 3) เก็บย้อนหลังตามนโยบาย แล้วคืนพื้นที่
restic forget \
--keep-daily 14 \
--keep-weekly 8 \
--keep-monthly 12 \
--prune
# 4) ตรวจความถูกต้องของข้อมูลบางส่วน
restic check --read-data-subset=5%
sudo chmod +x /usr/local/bin/restic-backup.sh
sudo /usr/local/bin/restic-backup.sh
นโยบายในขั้นที่ 3 แปลว่าเก็บรายวัน 14 ชุด รายสัปดาห์ 8 ชุด และรายเดือน 12 ชุด ซึ่งครอบคลุมทั้งกรณีลบไฟล์ผิดเมื่อวาน และกรณีที่เพิ่งพบว่าข้อมูลเสียหายมาหลายเดือนแล้ว
ขั้นตอนที่ 5: ตั้งเวลาอัตโนมัติ
sudo nano /etc/systemd/system/restic-backup.service
[Unit]
Description=สำรองข้อมูลด้วย restic
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7
sudo nano /etc/systemd/system/restic-backup.timer
[Unit]
Description=สำรองข้อมูลทุกวัน
[Timer]
OnCalendar=*-*-* 01:30:00
RandomizedDelaySec=900
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
systemctl list-timers | grep restic
ขั้นตอนที่ 6: กู้คืนข้อมูล
source /root/.restic/env
# ดูรายการสำรองข้อมูลทั้งหมด
sudo -E restic snapshots
# ค้นหาไฟล์ว่าอยู่ในชุดไหนบ้าง
sudo -E restic find 'wp-config.php'
# กู้ทั้งชุดไปยังโฟลเดอร์ชั่วคราว
sudo -E restic restore latest --target /tmp/restore
# กู้เฉพาะบางเส้นทาง
sudo -E restic restore latest --target /tmp/restore --include /var/www/example.com
# กู้จากชุดใดชุดหนึ่ง
sudo -E restic restore 3f8a2b1c --target /tmp/restore
กู้ลงโฟลเดอร์ชั่วคราวก่อนเสมอ แล้วค่อยคัดลอกทับของจริง การกู้ทับตรง ๆ เสี่ยงที่จะทับไฟล์ที่ยังใช้งานได้อยู่
วิธีที่สะดวกที่สุดสำหรับการหาไฟล์คือเมานต์ข้อมูลสำรองเป็นโฟลเดอร์
sudo mkdir -p /mnt/restic
sudo -E restic mount /mnt/restic
# เปิดอีก Terminal แล้วเดินดูใน /mnt/restic/snapshots/
ขั้นตอนที่ 7: ซ้อมกู้คืนตามรอบ
ข้อมูลสำรองที่ไม่เคยกู้คืนคือข้อมูลสำรองที่ยังพิสูจน์ไม่ได้ว่าใช้ได้ ตั้งรอบซ้อมทุกไตรมาส
sudo -E restic check --read-data
sudo -E restic restore latest --target /tmp/drill --include /var/www
diff -r /var/www/example.com /tmp/drill/var/www/example.com | head
บันทึกผลการซ้อมไว้เป็นหลักฐาน ทั้งเวลาที่ใช้และปัญหาที่พบ เวลาที่ใช้กู้คืนจริงคือตัวเลขที่ต้องรู้ก่อนเกิดเหตุ
ปัญหาที่พบบ่อย
Fatal: unable to open config file
ที่เก็บข้อมูลยังไม่ถูกสร้าง หรือค่า RESTIC_REPOSITORY ผิด ตรวจว่า source /root/.restic/env แล้วหรือยัง เพราะ sudo ไม่ส่งตัวแปรสภาพแวดล้อมให้โดยค่าเริ่มต้น ต้องใช้ sudo -E
สำรองข้อมูลช้ามาก
ครั้งแรกช้าเป็นปกติ หากครั้งถัดไปยังช้า ให้ดูว่ามีไฟล์ขนาดใหญ่ที่เปลี่ยนทั้งไฟล์ทุกวันหรือไม่ เช่น ไฟล์ดัมป์ฐานข้อมูลที่บีบอัดแล้ว ลองไม่บีบอัดก่อนให้ restic เก็บ เพราะ restic แยกส่วนต่างได้ดีกว่ากับไฟล์ที่ไม่ถูกบีบอัด
พื้นที่ปลายทางไม่ลดลงหลัง forget
ต้องมี --prune ด้วย คำสั่ง forget เฉย ๆ แค่ลบป้ายชื่อของชุดสำรอง ไม่ได้ลบข้อมูลจริง
ที่เก็บข้อมูลถูกล็อกค้าง
เกิดเมื่อกระบวนการก่อนหน้าถูกฆ่ากลางคัน ตรวจว่าไม่มีงานค้างอยู่จริงแล้วปลดล็อกด้วย sudo -E restic unlock
ต้องการวางแผนสำรองข้อมูลและ DR Site ที่มีทีมวิศวกรดูแล ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








