#!/bin/sh
#
# chown root:root /usr/local/bin/backupBootSD2USB-SDA
# chmod 755       /usr/local/bin/backupBootSD2USB-SDA
# ln -s           /usr/local/bin/backupBootSD2USB-SDA /etc/cron.daily/backupBootSD2USB-SDA
#
#set -x
#

DISK2CLONE="mmcblk0"
SRC_DEV="/dev/"$DISK2CLONE
DST_DEV="/dev/sda"
uSD_PART=$SRC_DEV"p2"
ROOT_FS=$(/usr/bin/df -H / | /usr/bin/awk '!/Filesystem/ {print $1}' )
BAD_SECTORS_LOG="/var/log/eulink/badsectors_"$DISK2CLONE".log"
NO_BAK_FLAG="/etc/eulink/noCloneBoot2USB.flag"
#
# Check 'Verbose mode' command line args
if [ "$1" = "-v" ]; then VERBOSE_MODE=1; SYSLOGGER='/usr/bin/logger -s'; CP_OPT="-v"; else VERBOSE_MODE=0; SYSLOGGER='/usr/bin/logger'; CP_OPT=""; fi

if [ -f $NO_BAK_FLAG ]; then $SYSLOGGER "Flag "$NO_BAK_FLAG" found, exiting"; exit 4; fi

if [ "$ROOT_FS" = "$uSD_PART" ]; then
	if [ -b $DST_DEV ]; then
		# Umount /mnt/sda* if not empty
		if [ "$(ls -A /mnt/sda1)" ]; then /usr/bin/umount /mnt/sda1; fi
		if [ "$(ls -A /mnt/sda2)" ]; then /usr/bin/umount /mnt/sda2; fi
		if [ "$(ls -A /mnt/sda3)" ]; then /usr/bin/umount /mnt/sda3; fi
		
		if [ -s $BAD_SECTORS_LOG ]; then
			if [ -x /usr/local/bin/backupDBs2USB-SDA ]; then /usr/local/bin/backupDBs2USB-SDA $CP_OPT; fi
			$SYSLOGGER "The source disk "$DISK2CLONE" contains bad sectors, cannot clone it reliably, exiting..."
			exit 3
		fi
		$SYSLOGGER "Backup microSD to SDA started"
		/usr/bin/dd if=$SRC_DEV bs=4M of=$DST_DEV
		$SYSLOGGER "Backup microSD to SDA completed"
		
		for idx in 1 2 3; do
			if [ -b $DST_DEV$idx ]; then
				$SYSLOGGER "Checking sda"$idx" for filesystem errors"
				if [ $VERBOSE_MODE -eq 0 ]; then
					/usr/sbin/fsck -y $DST_DEV$idx > /dev/null 2>&1
				else
					/usr/sbin/fsck $DST_DEV$idx
				fi
				retval=$?
				if   [ $retval -ge 8 ]; then $SYSLOGGER "Operational or syntax fsck error for sda"$idx
				elif [ $retval -ge 4 ]; then $SYSLOGGER "Uncorrected errors left on sda"$idx
				elif [ $retval -ge 2 ]; then $SYSLOGGER "System should be rebooted due to a problem with sda"$idx
				elif [ $retval -eq 1 ]; then $SYSLOGGER "Filesystem errors on sda"$idx" have been corrected"
				else                         $SYSLOGGER "No errors found on sda"$idx", filesystem clean"
				fi
			fi
		done
	else
		$SYSLOGGER "Backup microSD to SDA failed, target "$DST_DEV" device missing"
		exit 1
	fi
else
	$SYSLOGGER "Root filesystem "$ROOT_FS" is not on microSD, cloning unnecessary"
fi
