aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Anderson <micah@riseup.net>2013-09-20 16:36:09 -0400
committerMicah Anderson <micah@riseup.net>2013-09-20 16:48:13 -0400
commit54ec07be55b8bc151983e9648c4bdf3e0f7baa34 (patch)
tree432bc454c14b40ec114a48d7c978911fe78b3d98
parent373c6bcced00b8b61e4eadae99c5d4f8ec6439b2 (diff)
downloadbackupninja-54ec07be55b8bc151983e9648c4bdf3e0f7baa34.tar.gz
backupninja-54ec07be55b8bc151983e9648c4bdf3e0f7baa34.tar.bz2
add additional sys backup options to provide the ability to backup the MBR for every device found, and to backup the BIOS (if the flashrom program is installed, and the mainboard is supported)
-rw-r--r--examples/example.sys15
-rw-r--r--handlers/sys.helper.in6
-rw-r--r--handlers/sys.in60
3 files changed, 81 insertions, 0 deletions
diff --git a/examples/example.sys b/examples/example.sys
index fe34646..39d70bd 100644
--- a/examples/example.sys
+++ b/examples/example.sys
@@ -33,6 +33,15 @@
#
# (6) LVM metadata for every detected volume group, if "lvm = yes"
#
+# (7) a copy of each device's MBR, if "mbr = yes". A master boot record
+# (MBR) is the 512-byte boot sector that is the first sector of a
+# partitioned data storage device of a hard disk. To restore the MBR
+# one could do something like: dd if=sda.mbr of=/dev/sda
+# (MAKE SURE YOU PASS THE CORRECT DEVICE AS of= !!!)
+# WARNING: Restoring the MBR with a mismatching partition table will
+# make your data unreadable and nearly impossible to recover
+#
+# (8) a copy of the BIOS, if "bios = yes" and flashrom is installed
# here are the defaults, commented out:
@@ -65,6 +74,12 @@
# lvm = no
+# mbr = no
+
+# note: to backup your BIOS, you need the program 'flashrom' installed, and your
+# mainboard needs to be supported, see http://flashrom.org/Supported_hardware#Supported_mainboards
+# bios = no
+
# If vservers = yes in /etc/backupninja.conf then the following variables can
# be used:
# vsnames = all | <vserver1> <vserver2> ... (default = all)
diff --git a/handlers/sys.helper.in b/handlers/sys.helper.in
index 8a2fb07..7272f48 100644
--- a/handlers/sys.helper.in
+++ b/handlers/sys.helper.in
@@ -20,6 +20,8 @@ sys_wizard() {
hardware="hardware = no"
luksheaders="luksheaders = no"
lvm="lvm = no"
+ mbr="mbr = no"
+ bios="bios = no"
for opt in $result; do
case $opt in
'"packages"') packages="packages = yes";;
@@ -28,6 +30,8 @@ sys_wizard() {
'"hardware"') hardware="hardware = yes";;
'"luksheaders"') luksheaders="luksheaders = yes";;
'"lvm"') lvm="lvm = yes";;
+ '"mbr"') mbr="mbr = yes";;
+ '"bios"') bios="bios = yes";;
esac
done
get_next_filename $configdirectory/10.sys
@@ -38,6 +42,8 @@ $sfdisk
$hardware
$luksheaders
$lvm
+$mbr
+$bios
# packagesfile = /var/backups/dpkg-selections.txt
# selectionsfile = /var/backups/debconfsel.txt
diff --git a/handlers/sys.in b/handlers/sys.in
index 9b03778..4ce18fc 100644
--- a/handlers/sys.in
+++ b/handlers/sys.in
@@ -33,6 +33,15 @@
#
# (6) LVM metadata for every detected volume group, if "lvm = yes"
#
+# (7) a copy of each device's MBR, if "mbr = yes". A master boot record
+# (MBR) is the 512-byte boot sector that is the first sector of a
+# partitioned data storage device of a hard disk. To restore the MBR
+# one could do something like: dd if=sda.mbr of=/dev/sda
+# (MAKE SURE YOU PASS THE CORRECT DEVICE AS of= !!!)
+# WARNING: Restoring the MBR with a mismatching partition table will
+# make your data unreadable and nearly impossible to recover
+#
+# (8) a copy of the BIOS, if "bios = yes" and flashrom is installed
if [ -f /etc/debian_version ]
then
@@ -100,6 +109,12 @@ getconf VGS `which vgs`
getconf VGCFGBACKUP `which vgcfgbackup`
getconf lvm no
+getconf mbr no
+getconf mbrfile $parentdir/mbr.__star__.bin
+
+getconf FLASHROM `which flashrom`
+getconf bios no
+
getconf vsnames all
# If vservers are configured, check that the ones listed in $vsnames are running.
@@ -139,6 +154,20 @@ if [ "$lvm" == "yes" ]; then
fi
fi
+if [ "$mbr" == "yes" ]; then
+ if [ ! -x "$DD" ]; then
+ warning "can't find dd, skipping backup of MBR."
+ mbr="no"
+ fi
+fi
+
+if [ "$bios" == "yes" ]; then
+ if [ ! -x "$FLASHROM" ]; then
+ warning "can't find flashrom, skipping backup of BIOS."
+ mbr="no"
+ fi
+fi
+
## PACKAGES ##############################
#
@@ -633,6 +662,25 @@ if [ "$luksheaders" == "yes" ]; then
done
fi
+if [ "$mbr" == "yes" ]; then
+ devices=`LC_ALL=C $SFDISK -l 2>/dev/null | grep "^Disk /dev" | @AWK@ '{print $2}' | cut -d: -f1`
+ if [ "$devices" == "" ]; then
+ warning "No harddisks found"
+ fi
+ for dev in $devices; do
+ debug "Will try to backup MBR tables for device $dev"
+ [ -b $dev ] || continue
+ label=${dev#/dev/}
+ label=${label//\//-}
+ outputfile=${mbrfile//__star__/$label}
+ debug "$DD if=$dev of=$outputfile bs=512 count=1 2>/dev/null"
+ $DD if=$dev of=$outputfile bs=512 count=1 2>/dev/null
+ if [ $? -ne 0 ]; then
+ warning "The MBR for $dev could not be saved."
+ fi
+ done
+fi
+
## LVM ####################################
# returns 0 on success, 1 on error, 2 if not tried
@@ -692,3 +740,15 @@ if [ "$lvm" == "yes" ]; then
;;
esac
fi
+
+## BIOS ####################################
+
+if [ "$bios" == "yes" ]; then
+ debug "Trying to backup BIOS"
+ debug "$FLASHROM -r ${parentdir}/bios --programmer internal >/dev/null 2>&1"
+ $FLASHROM -r ${parentdir}/bios --programmer internal >/dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ warning "The BIOS could not be saved."
+ fi
+fi
+