w ake/ s leep b ac k u p - 'wakes up' drive, rsyncs และพลังปิด
WSBKP เป็นสคริปต์เชลล์ wrapper เพื่อสร้างการสำรองข้อมูลแบบออฟไลน์ 'แบบออฟไลน์' ราคาถูกและง่าย) การสำรองข้อมูลระดับไฟล์ถูกสร้างขึ้นโดยการรับข้อมูลไปยังดิสก์ภายนอก (USB) โดยใช้ RSYNC การมีดิสก์ออนไลน์ในขณะที่สำรองข้อมูลสามารถให้ประโยชน์เช่นการแยกข้อมูลและการป้องกัน (บาง) การป้องกันล็อกเกอร์ crypto
มันหมายถึงการทำงานบน Linux และนอกเหนือจาก RSYNC ใช้ HDPARM และ UDISKSCTL โปรดทราบว่าการควบคุมและไดรฟ์ USB ทั้งหมดไม่รับประกันว่าจะทำงานได้
เมื่อดำเนินการแล้วผลลัพธ์จะเป็นแบบนี้:
root@host: ~ # wsbkp.sh
[2020-01-01 17:58:20] Powering on drive (UUID=abc12345-1234-1234-1234-aaaabbbbcccc)...
- INFO: Resetting devices from /sys/bus/pci/drivers/ehci-pci...
- INFO: Resetting devices from /sys/bus/pci/drivers/ohci-pci...
[2020-01-01 17:58:28] Using backup device " /dev/sdb5 " (UUID=abc12345-1234-1234-1234-aaaabbbbcccc)
- INFO: Mounted " /dev/sdb5 " " /mnt/bkp "
* Command: " rsync -aA --info=flist0,name0,progress2,stats2 --progress --stats "
* Dir(s): " / "
* Target drive: " /dev/sdb5 " mounted on " /mnt/bkp " (UUID=abc12345-1234-1234-1234-aaaabbbbcccc)
* Exclude:
/proc/
/sys/
/lost+found/
/mnt/
/run/
/tmp/
[2022-03-26 17:58:28] Backup SOURCE DIR: " / " to DESTINATION: " /mnt/bkp/ "
* Syncing complete, listing " /mnt/bkp " ...
total 100
drwxr-xr-x 26 root root 4096 Mar 11 06:11 .
drwxr-xr-x 14 root root 4096 Apr 26 2021 ..
drwxrwxr-x 2 root root 4096 Jan 28 06:54 bin
drwxr-xr-x 4 root root 4096 Mar 11 06:15 boot
drwxr-xr-x 17 root root 4096 Mar 26 17:29 dev
drwxr-xr-x 194 root root 12288 Mar 26 14:30 etc
< -- CUT -- >
[2021-0-01 18:24:57] Done. Powering off
Wake/Sleep Backup
-----------------
SYNOPSIS: wake up usb drive, rsync, power off
USAGE: wsbkp.sh -[o|p][w|s][m|u][l][f] [dirs to backup]
OPTIONS: [-p]|[-o] power on | power off
[-w]|[-s] wakeup | sleep
[-m]|[-u] mount | umount
[-l] list drive info
[-d] skip dev detection
[dirs to backup] overwrites setting in script
นอกจากนี้ Args เหล่านี้จะถูกส่งผ่านไปยัง RSYNC: --verbose , --dry-run , --force , --ignore-errors และตัวเลือกทั้งหมด --delete
หากต้องการทำความสะอาดโดยการลบ dirs/ไฟล์พิเศษบน DST, Run: ./wsbkp.sh --delete -y
สคริปต์สามารถวางไว้ในสถานที่ใด ๆ เช่น '/usr/local/sbin' (แนะนำ)
ตรวจสอบให้แน่ใจว่ามีการติดตั้ง RSYNC, HDPARM และ UDISKSCTL (UDISKS2)
อุปกรณ์สำรองเป้าหมายควรใช้งานกับระบบไฟล์ UUID ที่เขียนได้และพื้นที่ดิสก์ฟรีเพียงพอ
เรียกใช้เป็นรูท ไม่จำเป็นต้องใช้อาร์กิวเมนต์บรรทัดคำสั่งตัวเลือกทั้งหมดจะถูกตั้งค่าภายในสคริปต์ ไฟล์บันทึกจะถูกสร้างขึ้นที่นี่: '/var/log/wsbkp.log'
ตัวเลือกที่แสดงภายใต้ 'การใช้งาน' มีความหมายในกรณีที่เช่นไดรฟ์ไม่สามารถปิดเครื่องได้โดยอัตโนมัติหลังจากการสำรองข้อมูลเสร็จสิ้น หากสิ่งนั้นเกิดขึ้นให้ลองอีกครั้งด้วย wsbkp.sh -o
อีกทางเลือกหนึ่งคือการสำรองข้อมูลหนึ่งครั้งของไดเรกทอรีต้นฉบับที่แตกต่างจากการกำหนดค่า:
wsbkp.sh /home/user/important /root/more_stuff
หากต้องการกู้คืนไฟล์หนึ่งไฟล์ขึ้นไปให้เรียกใช้ wsbkp.sh -p ก่อนเพื่อขับเคลื่อนบนไดรฟ์และ wsbkp.sh -m เพื่อเมานต์
เมื่อทำเสร็จแล้ว "ปลดการเชื่อมต่อ" ไดรฟ์ด้วย wsbkp.sh -u ไปยัง umount จากนั้น wsbkp.sh -o เพื่อเปิดเครื่อง
1) รับ UUID ของไดรฟ์สำรอง:
เรียกใช้ wsbkp.sh -l ควรแสดงรายละเอียดไดรฟ์หรือเพียงแค่เรียกใช้ blkid
root@host:~# blkid
/dev/sdb1: UUID="bc12345-1234-1234-1234-aaaabbbbcccc" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="ab1c2345-01"
2) เปลี่ยนการตั้งค่าภายในสคริปต์:
DST_UUID= " abc12345-1234-1234-1234-aaaabbbbcccc " # uuid of backup device
DST_MNT= " /mnt/bkp " # dst/target path
BKP_DIRS= " / " # dirs to backup
EXCL_DIRS= "
--exclude=/proc/
--exclude=/sys/
--exclude=/lost+found/
--exclude=/mnt/
--exclude=/run/
--exclude=/tmp/
"ตรวจสอบให้แน่ใจว่า DST_UUID ถูกตั้งค่าเป็น UUID ที่ถูกต้อง
ค่าเริ่มต้นคือการสำรองข้อมูลทั้งไฟล์ ('/') และยกเว้น DIR บางอย่าง นอกจากนี้ยังเป็นไปได้ที่จะระบุ DIR หนึ่งตัวขึ้นไปเพื่อสำรองข้อมูล ตัวอย่าง: BKP_DIRS="/etc/ /root/ /home/ /opt/ /usr/local/bin/"
3) ทดสอบและกำหนดเวลา:
เรียกใช้สคริปต์ด้วยตนเองเพื่อตรวจสอบการตั้งค่าที่ถูกต้อง ในกรณีของปัญหาที่กำหนด OUT=/dev/stdout เพื่อแสดงผลลัพธ์จาก RSYNC (ความคืบหน้า/ความเร็ว ฯลฯ )
การเพิ่ม rsync args เหล่านี้อาจมีประโยชน์: --verbose และ/หรือ --dry-run
หากทุกอย่างเป็นไปด้วยดีกำหนดเวลาสคริปต์ให้ทำงานทุกสัปดาห์ ดู cron และ systemd configs ด้านล่าง (คัดลอก/วางไปยังเชลล์)
เรียกใช้สคริปต์เป็นรูท:
echo ' 0 3 * * 1 root /usr/local/sbin/wsbkp.sh >/dev/null 2>&1 ' > /etc/cron.d/wsbkpในการเรียกใช้เป็นตัวจับเวลา SystemD ก่อนอื่นให้สร้างไฟล์หน่วย:
cat << EOF >/lib/systemd/system/wsbkp.service
[Unit]
Description=WakeSleep backup
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/wsbkp.sh
EOF
cat << EOF >/lib/systemd/system/wsbkp.timer
[Unit]
Description=WakeSleep backup scheduled to run every week
[Timer]
OnCalendar=weekly
[Install]
WantedBy=timers.target
EOF จากนั้นเปิดใช้งานตัวจับเวลา: systemctl enable --now wsbkp.timer
และในที่สุดก็โหลด Systemd: systemctl daemon-reload
สำหรับรายละเอียดโปรดดู https://www.freedesktop.org/software/systemd/man/systemd.timer.html