สำรองข้อมูลแบบเข้ารหัสด้วย restic พร้อมตั้งเวลาอัตโนมัติ

สำรองข้อมูลแบบเพิ่มส่วนต่างและเข้ารหัสตั้งแต่ต้นทาง เก็บไว้บนเซิร์ฟเวอร์อื่นหรือ Object Storage พร้อมนโยบายเก็บย้อนหลังและการซ้อมกู้คืน

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 11 นาที เข้าชม 4 ครั้ง

แชร์FacebookXLINELinkedIn
restic — สำรองข้อมูลแบบเข้ารหัสด้วย restic พร้อมตั้งเวลาอัตโนมัติ
สำรองข้อมูลแบบเข้ารหัสด้วย restic พร้อมตั้งเวลาอัตโนมัติ

คำตอบสั้น ๆ: สำรองข้อมูลแบบเพิ่มส่วนต่างและเข้ารหัสตั้งแต่ต้นทาง เก็บไว้บนเซิร์ฟเวอร์อื่นหรือ Object Storage พร้อมนโยบายเก็บย้อนหลังและการซ้อมกู้คืน

คู่มือนี้อธิบาย 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

บันทึกผลการซ้อมไว้เป็นหลักฐาน ทั้งเวลาที่ใช้และปัญหาที่พบ เวลาที่ใช้กู้คืนจริงคือตัวเลขที่ต้องรู้ก่อนเกิดเหตุ

ปัญหาที่พบบ่อยเกี่ยวกับ restic

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/

ทำความเข้าใจ restic ก่อนเริ่ม

เครื่องมือสำรองข้อมูลที่เข้ารหัสตั้งแต่ต้นทางแก้ปัญหาที่การคัดลอกไฟล์ธรรมดาแก้ไม่ได้ คือการเก็บสำเนาไว้นอกองค์กรโดยไม่ต้องไว้ใจผู้ให้บริการพื้นที่ เพราะข้อมูลถูกเข้ารหัสก่อนออกจากเครื่องเสมอ อีกคุณสมบัติที่สำคัญไม่แพ้กันคือการเก็บเฉพาะส่วนที่เปลี่ยน ทำให้สำรองทุกวันได้โดยพื้นที่ไม่บานปลาย ข้อแลกเปลี่ยนที่ต้องรับผิดชอบคือรหัสผ่านของที่เก็บ ถ้าหายไปก็ไม่มีใครกู้ข้อมูลกลับมาได้ รวมทั้งตัวคุณเอง

สิ่งที่ต้องเตรียมก่อนใช้งาน restic

  • ที่เก็บปลายทาง ซึ่งควรอยู่คนละเครื่องกับข้อมูลต้นทาง และควรมีอย่างน้อยหนึ่งชุดอยู่นอกสถานที่
  • รหัสผ่านของที่เก็บ พร้อมที่เก็บรหัสผ่านที่ปลอดภัยและแยกจากเครื่องที่สำรอง
  • รายการไดเรกทอรีที่ต้องสำรองจริง และรายการที่ควรยกเว้น เช่น แคชและไฟล์ชั่วคราว

ตรวจสอบว่า restic ทำงานถูกต้องแล้ว

  1. ดูรายการสำเนาย้อนหลังแล้วเห็นรายการล่าสุดตามรอบที่ตั้งไว้
  2. ตรวจความถูกต้องของข้อมูลในที่เก็บอย่างน้อยเดือนละครั้ง
  3. กู้ไฟล์จริงกลับมาหนึ่งไฟล์แล้วเปิดใช้งานได้ ซึ่งเป็นการทดสอบเดียวที่พิสูจน์ได้ว่าระบบสำรองใช้งานได้จริง

ข้อควรรู้และข้อจำกัดของ restic

  • เก็บรหัสผ่านของที่เก็บไว้คนละที่กับเครื่องที่สำรอง ถ้าเครื่องเสียพร้อมรหัสผ่าน สำเนาที่มีอยู่จะไร้ประโยชน์ทันที
  • ตั้งนโยบายเก็บย้อนหลังให้ชัด เช่น รายวันเจ็ดชุด รายสัปดาห์สี่ชุด รายเดือนสิบสองชุด แล้วล้างส่วนเกินตามรอบ
  • ยึดหลักสำเนาสามชุด บนสื่อสองแบบ และหนึ่งชุดอยู่นอกสถานที่ ซึ่งยังเป็นแนวปฏิบัติที่ดีที่สุดจนถึงวันนี้

คำถามที่พบบ่อยเกี่ยวกับ restic

ลืมรหัสผ่านของที่เก็บ กู้ข้อมูลได้ไหม

ไม่ได้ครับ ข้อมูลถูกเข้ารหัสด้วยรหัสผ่านนั้น ไม่มีช่องทางกู้คืนสำรองใด ๆ ซึ่งเป็นทั้งจุดแข็งและความรับผิดชอบที่มาคู่กัน

สำรองขณะฐานข้อมูลกำลังทำงานอยู่ได้หรือไม่

ไม่ควรสำรองไฟล์ฐานข้อมูลตรง ๆ ขณะทำงาน ให้สั่งให้ฐานข้อมูลส่งออกข้อมูลเป็นไฟล์ก่อน แล้วค่อยสำรองไฟล์นั้น

ที่เก็บโตขึ้นเรื่อย ๆ ทั้งที่เก็บเฉพาะส่วนที่เปลี่ยน

เพราะสำเนาย้อนหลังเก่ายังถูกอ้างถึงอยู่ ต้องล้างสำเนาที่พ้นนโยบายการเก็บและสั่งเก็บกวาดพื้นที่ จึงจะคืนพื้นที่จริง

อ่านเพิ่มเติมเกี่ยวกับ restic

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน