เป็น shell script ที่จะ import samba container จาก folder data_backup
- สร้างไฟล์
touch data_restore.sh - ใส่เนื้อหา
#!/bin/bash # Configuration with Defaults VOLUME_NAME="${1:-ad-samba-data}" BACKUP_DIR="${2:-./data_backup}" echo "==========================================" echo " Samba AD DC Restore Utility" echo "==========================================" echo "Volume Name: $VOLUME_NAME" echo "Backup Dir : $BACKUP_DIR" echo "------------------------------------------" # List available backups echo "Available Backups:" ls -1 "$BACKUP_DIR"/*.tar.gz 2>/dev/null if [ $? -ne 0 ]; then echo "❌ No backup files found in $BACKUP_DIR" exit 1 fi echo "------------------------------------------" # Ask user for backup file to restore read -p "Enter backup filename to restore (e.g., ad_samba_backup_2026...tar.gz): " BACKUP_FILENAME FULL_BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILENAME}" if [ ! -f "$FULL_BACKUP_PATH" ]; then echo "❌ Error: Backup file not found: $FULL_BACKUP_PATH" exit 1 fi echo "⚠️ WARNING: This will OVERWRITE existing data in volume '$VOLUME_NAME'!" read -p "Are you sure you want to continue? (y/N): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then echo "Restore cancelled." exit 0 fi echo "Restoring from: $FULL_BACKUP_PATH" # 1. Stop the container first echo "Stopping container..." docker compose stop if [ $? -ne 0 ]; then echo "❌ Failed to stop container. Restore aborted." exit 1 fi # 2. Restore using a temporary alpine container # - Mount the volume to /target_volume # - Mount the backup directory to /backup_dir # - Wipe the volume # - Extract the backup file echo "Wiping volume and extracting backup..." docker run --rm \ -v "$VOLUME_NAME":/target_volume \ -v "$(pwd)/$BACKUP_DIR":/backup_dir \ alpine \ sh -c "rm -rf /target_volume/* && tar xzf /backup_dir/$BACKUP_FILENAME -C /target_volume" RESTORE_STATUS=$? # 3. Start the container again echo "Starting container..." docker compose start # 4. Check Result if [ $RESTORE_STATUS -eq 0 ]; then echo "✅ Restore successful." else echo "❌ Restore failed!" exit 1 fi - ให้สิทธิ์
chmod +x data_restore.sh
restore
สามารถทำได้ง่าย ๆ โดยคำสั่ง
./data_restore.sh
จะนำไฟล์ Backup ล่าสุด ( หรือที่ระบุ ) กลับเข้าไปใน Volume ( ข้อมูลเดิมจะถูกลบ )
options
- VOLUME_NAME=”${1:-ad-samba-data}”
- หน้าที่ในสคริปต์ Restore: กำหนดชื่อ Volume “ปลายทาง” ที่เราต้องการจะเอาข้อมูลไปใส่คืน ( Restore ลงไป )
- การทำงาน: รับค่าจาก Argument ตัวที่ 1 (
$1) หากผู้ใช้รันสคริปต์แล้วไม่ได้ระบุชื่อ Volume มา ระบบจะใช้ค่าเริ่มต้นคือad-samba-data
- BACKUP_DIR=”${2:-./data_backup}”
- หน้าที่ในสคริปต์ Restore: กำหนดโฟลเดอร์ “ต้นทาง” ที่เก็บไฟล์แบ็คอัพเอาไว้ เพื่อให้สคริปต์วิ่งไปค้นหาไฟล์ที่จะนำมากู้คืน
- การทำงาน: รับค่าจาก Argument ตัวที่ 2 (
$2) หากไม่ระบุ ระบบจะมองหาไฟล์แบ็คอัพจากโฟลเดอร์data_backupที่อยู่ใน Directory ปัจจุบัน (./)
ตัวอย่างการนำสคริปต์ไปรันใช้งานจริง
- กู้คืนโดยใช้ค่า Default ทั้งหมด
./data_restore.sh
( ผลลัพธ์: สคริปต์จะไปหาไฟล์แบ็คอัพในโฟลเดอร์./data_backupเพื่อนำมากู้คืนลงใน Volume ที่ชื่อad-samba-data) - กู้คืนลง Volume อื่น แต่หาไฟล์จากที่เดิม
./data_restore.sh test-samba-volume
( ผลลัพธ์: สคริปต์จะหาไฟล์แบ็คอัพใน./data_backupแต่นำไปกู้คืนลงใน Volume ใหม่ที่ชื่อtest-samba-volumeแทน ) - ระบุใหม่ทั้ง Volume ปลายทาง และแหล่งเก็บไฟล์ต้นทาง
./data_restore.sh ad-samba-data /mnt/usb/old_backups
( ผลลัพธ์: สคริปต์จะไปดึงไฟล์แบ็คอัพจาก Flash Drive หรือโฟลเดอร์/mnt/usb/old_backupsเพื่อนำมากู้คืนลงในad-samba-data)
อ่านเพิ่มเติม