From 37b822e3b52a3fe177ccb966d9ed000666f9dae7 Mon Sep 17 00:00:00 2001 From: Laborratte5 <49961317+Laborratte5@users.noreply.github.com> Date: Mon, 14 Aug 2023 21:22:58 +0200 Subject: [PATCH] Create backup script --- backup.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 backup.sh diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..94c7a76 --- /dev/null +++ b/backup.sh @@ -0,0 +1,49 @@ +#!/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 Backup: $DRIVE_TO_BACKUP +echo To: $BACKUP_LOCATION + +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" +