W ake/ s leep b ac k u p - 'Wakes Up' USB Drive و Rsyncs و Powers Off
WSBKP هو برنامج نصي غلاف Shell لإنشاء نسخ احتياطية "غير متصلة" رخيصة وسهلة (جزئيًا). يتم إنشاء النسخ الاحتياطية على مستوى الملف عن طريق مواجهة البيانات على قرص خارجي (USB) باستخدام RSYNC. إن وجود القرص عبر الإنترنت فقط أثناء النسخ الاحتياطي يمكن أن يوفر فوائد مثل عزل البيانات وحماية (بعض) ضد خزانات التشفير.
من المفترض أن يعمل على 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 ، قم بتشغيل: ./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 الصحيح.
الافتراضي هو النسخ الاحتياطي للنظام الاحتياطي (/') واستبعاد بعض dirs. من الممكن أيضًا تحديد واحد أو أكثر من dirs إلى النسخ الاحتياطي. مثال: BKP_DIRS="/etc/ /root/ /home/ /opt/ /usr/local/bin/"
3) الاختبار والجدول الزمني:
قم بتشغيل البرنامج النصي يدويًا للتحقق من الإعدادات الصحيحة. في حالة القضايا OUT=/dev/stdout لإظهار الإخراج من RSYNC (التقدم/السرعة وما إلى ذلك).
قد تكون إضافة ARGS RSYNC هذه مفيدة أيضًا: --verbose و/أو --dry-run .
إذا كان كل شيء على ما يرام ، فحدد جدولة البرنامج النصي لتشغيله كل أسبوع على سبيل المثال. راجع تكوينات cron و systemd أدناه (نسخ/لصق إلى shell).
قم بتشغيل البرنامج النصي كجذر:
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