backup-script/backup.sh
Laborratte5 86c20d84b4
Clarify source and destination input parameters
Add prompt after input check

Allow user to double check their input by waiting
for their action after printing information of
2023-08-14 22:17:01 +02:00

57 lines
1.6 KiB
Bash
Executable file

#!/bin/bash
read -p "Drive to backup: " DRIVE_TO_BACKUP
read -p "Location of backup: " BACKUP_LOCATION
DEVICE_NAME=$(basename $DRIVE_TO_BACKUP)
# Create empty dir
empty_dir=$(mktemp -d)
BACKUP_LOCATION="${BACKUP_LOCATION}-$(date +'%Y-%m-%d').sqsh"
CHECKSUM_FILE="$DEVICE_NAME.img.cksum"
echo
echo Backup source: $DRIVE_TO_BACKUP
echo Backup destination: $BACKUP_LOCATION
echo
echo Check if your input is correct
echo Double check the correct usage of source and destination
echo \"Backup source\" is the drive you want to backup
echo \"Backup destination\" is where the backup will be stored
read -n1 -r -s -p $"Press space to continue..."
mksquashfs $empty_dir $BACKUP_LOCATION -p "$DEVICE_NAME.img f 444 root root dd if=$DRIVE_TO_BACKUP bs=4M" -p "$CHECKSUM_FILE f 444 root root dd if=$DRIVE_TO_BACKUP | cksum"
# Check Backup integrity by mounting and recalculating checksum from img and dev and compare to .img .img.cksum dev
echo
echo Checking Backup integrity ...
echo
BACKUP_MNT=$(mktemp -d)
mount -o ro $BACKUP_LOCATION $BACKUP_MNT
# Recalculate checksums
DRIVE_CKSUM=$(dd if=$DRIVE_TO_BACKUP | cksum)
# Compare checksums
diff <(echo $DRIVE_CKSUM) <(cat $BACKUP_MNT/$CHECKSUM_FILE)
if [ $? -ne 0 ]; then
echo -e "\e[1;41m Backup not consistent! \e[0m"
exit 1
fi
# Recalculate checksums
IMG_CKSUM=$(dd if=$BACKUP_MNT/$DEVICE_NAME.img | cksum)
# Compare checksums
diff <(echo $IMG_CKSUM) <(cat $BACKUP_MNT/$CHECKSUM_FILE)
if [ $? -ne 0 ]; then
echo -e "\e[1;41m Backup not consistent! \e[0m"
exit 1
fi
umount $BACKUP_LOCATION
echo -e "\e[1;42m Backup complete \e[0m"