Backups

Backup of MiniPc

bash shell procedure : backup-minipc within folder ~/utils

#!/bin/bash
# only run as root
if [ "$(id -u)" != '0' ]
then
        echo "this script has to be run as root"
        exit 1
fi
#
ARGS=4
E_BADARGS=65
if [ $# -ne "$ARGS" ]
then
   echo "==================================================================================="
   echo -e "Hoe gebruiken ?"
   echo -e "  Script vereist naast `basename $0` vier argumenten"
   echo -e "  arg1 : je_backup_volume_naam"
   echo    "         - /run/media/ulefr01/Hitachi1/ voor Inspiron"
   echo    "         - /myssd2_data/              voor Inspiron"
   echo    "         - /media/ulefr01/Hitachi1/   voor Inspiron"
   echo    "         - /media/ulefr01/Hitachi4/   voor Latitude_E5440"
   echo    "         - /media/ulefr01/Hitachi3/   voor Latitude_E7440"
   echo    "         - /mybackups                 voor minipc"
   echo -e "  arg2 : je_os_device_naam /dev/sda, /dev/sdb, /dev/nvme0n1" 
   echo -e "  arg3 : prefix log bestandsnaam"
   echo    "         - Inspiron_myssd2_data"
   echo    "         - Inspiron_Hitachi1"
   echo    "         - Latitude_E5440_Hitachi4"
   echo    "         - Latitude_E7440_Hitachi3"
   echo    "         - Minipc_mybackups"
   echo -e "  arg4 : laptop naam"
   echo    "         - Inspiron"
   echo    "         - Latitude_E5440"
   echo    "         - Latitude_E7440"
   echo    "         - Minipc_UM790"
   echo    "  Voorbeeld : sudo ./backup-inspiron /run/media/ulefr01/Hitachi1/ /dev/sda Inspiron_Hitachi1 Inspiron"
   echo "==================================================================================="
   exit $E_BADARGS
fi
VOL=$1
DEV=$2
LOG=$3
LAPTOP=$4
DIR="dir.lst"
DIR2="dir2.lst"
RES=3
DATUM="$(date +%Y%m%d)"
LF=$LAPTOP_$LOG'_'$DATUM'.log'
echo "LF is " $LF

if ! cd $VOL
then
        echo "volume niet actief $VOL"
        exit 2
fi
echo "backup volume is $PWD"

if ! [ -e $VOL$DIR ]
then
   echo $VOL$DIR ' bestaat niet !'
   exit $RES
fi
RES=4
if [ -e $VOL$DIR ]
then
   if [ -e $VOL$DIR2 ]
   then
      rm $VOL$DIR2 -v >>$VOL$LF 2>&1 3>&1
   fi
   echo "Maak eerst een kopie van $VOL$DIR, cp $VOL$DIR $VOL$DIR2"
   echo "Maak eerst een kopie van $VOL$DIR, cp $VOL$DIR $VOL$DIR2" >>$VOL$LF 2>&1 3>&1
   cp $VOL$DIR $VOL$DIR2 -v >>$VOL$LF 2>&1 3>&1
fi
BKUPS=$(cat $VOL$DIR | wc -l)
echo "er worden $BKUPS backups gemaakt op volume $VOL"
echo "er worden $BKUPS backups gemaakt op volume $VOL" >>$VOL$LF 2>&1
# lees laatste lijn
line=$(tail -n 1 $VOL$DIR)
echo "lijn :" $line
echo "datum :" $DATUM
if [ $line == $DATUM ]
then
    cp $VOL$DIR2 $VOL$DIR -v >>$VOL$LF 2>&1 3>&1
    echo "deze backup is vandaag al eens gedaan !!  Exit"
    exit $RES
fi
#
DATUM="$(date +%Y%m%d)"
LF=$LAPTOP_$LOG'_'$DATUM'.log'
echo "LF is " $LF

RES=5
echo $DATUM >>$VOL$DIR
echo "datum $DATUM toegevoegd in $DIR"
echo "datum $DATUM toegevoegd in $DIR" >>$VOL$LF 2>&1 3>&1
# lees eerste lijn uit $DIR
line=$(head -n 1 $VOL$DIR)
echo "line is " $line
if [ $line -ne $DATUM ]
then
   # verwijder alle backups gemaakt op datum $line
   rm -v $VOL*$line* >>$VOL$LF 2>&1 3>&1
   # verwijder de eerste lijn uit $DIR
   sed -i 1d $VOL$DIR
   echo "eerste lijn = $line is uit $VOL$DIR"
   echo "eerste lijn = $line is uit $VOL$DIR" >>$VOL$LF 2>&1 3>&1
fi

echo " inxi " >>$VOL$LF 2>&1 3>&1
echo "------" >>$VOL$LF 2>&1 3>&1
/usr/bin/inxi -FazGISZMxxxpu
/usr/bin/inxi -FazGISZMxxxpu >>$VOL$LF 2>&1 3>&1
echo -e " lsblk "
echo " lsblk " >>$VOL$LF 2>&1 3>&1
echo "-------" >>$VOL$LF 2>&1 3>&1
lsblk -o +FSTYPE,PARTLABEL,FSAVAIL,FSSIZE
lsblk -o +FSTYPE,PARTLABEL,FSAVAIL,FSSIZE >>$VOL$LF 2>&1 3>&1
if [ -b /dev/sda ]
   then {
      echo -e " gdisk /dev/sda "
      echo " gdisk /dev/sda " >>$VOL$LF 2>&1 3>&1
      echo "----------------" >>$VOL$LF 2>&1 3>&1
      gdisk -l /dev/sda
      gdisk -l /dev/sda >>$VOL$LF 2>&1 3>&1
   }
fi
if [ -b /dev/sdb ]
   then {
      echo -e " gdisk /dev/sdb "
      echo " gdisk /dev/sdb " >>$VOL$LF 2>&1 3>&1
      echo "----------------" >>$VOL$LF 2>&1 3>&1
      gdisk -l /dev/sdb
      gdisk -l /dev/sdb >>$VOL$LF 2>&1 3>&1
   }
fi
if [ -b /dev/nvme0n1 ]
   then {
      echo -e " gdisk /dev/nvme0n1 "
      echo " gdisk /dev/nvme0n1" >>$VOL$LF 2>&1 3>&1
      echo "----------------" >>$VOL$LF 2>&1 3>&1
      gdisk -l /dev/nvme0n1
      gdisk -l /dev/nvme0n1 >>$VOL$LF 2>&1 3>&1
   }
fi

if [ -b /dev/sda ]
   then {
      echo -e " parted /dev/sda "
      echo " parted /dev/sda " >>$VOL$LF 2>&1 3>&1
      parted /dev/sda print
      parted /dev/sda print >>$VOL$LF 2>&1 3>&1
   }
fi 
if [ -b /dev/sdb ]
   then {     
      echo -e " parted /dev/sdb "
      echo " parted /dev/sdb " >>$VOL$LF 2>&1 3>&1
      parted /dev/sdb print
      parted /dev/sdb print >>$VOL$LF 2>&1 3>&1
    }
fi   
if [ -b /dev/nvme0n1 ]
   then {     
      echo -e " parted /dev/nvme0n1 "
      echo " parted /dev/nvme0n1 " >>$VOL$LF 2>&1 3>&1
      parted /dev/nvme0n1 print
      parted /dev/nvme0n1 print >>$VOL$LF 2>&1 3>&1
    }
fi    
echo -e " blkid "
echo " blkid " >>$VOL$LF 2>&1 3>&1
echo "-------" >>$VOL$LF 2>&1 3>&1
blkid
blkid >>$VOL$LF 2>&1 3>&1
echo -e " pvs "
echo " pvs " >>$VOL$LF 2>&1 3>&1
echo "-----" >>$VOL$LF 2>&1 3>&1
pvs
pvs >>$VOL$LF 2>&1 3>&1
echo -e " vgs "
echo " vgs " >>$VOL$LF 2>&1 3>&1
echo "-----" >>$VOL$LF 2>&1 3>&1
vgs
vgs >>$VOL$LF 2>&1 3>&1
echo -e " lvs "
echo " lvs " >>$VOL$LF 2>&1 3>&1
echo "-----" >>$VOL$LF 2>&1 3>&1
lvs
lvs >>$VOL$LF 2>&1 3>&1
lvs -a -o +devices
lvs -a -o +devices >>$VOL$LF 2>&1 3>&1
if [ -b /dev/sda ]
   then {
      echo -e "eerste 2047 sectoren van /dev/sda"
      echo "eerste 2047 sectoren van /dev/sda" >>$VOL$LF 2>&1 3>&1
      echo "---------------------" >>$VOL$LF 2>&1 3>&1
      echo "dd if=/dev/sda of=sda2047.mbr bs=512 count=2047"
      echo "dd if=/dev/sda of=sda2047.mbr bs=512 count=2047" >>$VOL$LF 2>&1 3>&1
      dd if=/dev/sda of=$VOL/sda2047_${DATUM}.mbr bs=512 count=2047
      echo "eerste sector van /dev/sda"
      echo "eerste sector van /dev/sda" >>$VOL$LF 2>&1 3>&1
      echo "---------------------" >>$VOL$LF 2>&1 3>&1
      echo "dd if=/dev/sda of=sda.mbr bs=512 count=1"
      echo "dd if=/dev/sda of=sda.mbr bs=512 count=1" >>$VOL$LF 2>&1 3>&1
      dd if=/dev/sda of=$VOL/sda_${DATUM}.mbr bs=512 count=1
   }
fi         
if [ -b /dev/sdb ]
   then {
      echo -e "eerste 2047 sectoren van /dev/sdb"
      echo "eerste 2047 sectoren van /dev/sdb" >>$VOL$LF 2>&1 3>&1
      echo "---------------------" >>$VOL$LF 2>&1 3>&1
      echo "dd if=/dev/sdb of=sdb2047.mbr bs=512 count=2047"
      echo "dd if=/dev/sdb of=sdb2047.mbr bs=512 count=2047" >>$VOL$LF 2>&1 3>&1
      dd if=/dev/sdb of=$VOL/sdb2047_${DATUM}.mbr bs=512 count=2047
      echo "eerste sector van /dev/sdb"
      echo "eerste sector van /dev/sdb" >>$VOL$LF 2>&1 3>&1
      echo "---------------------" >>$VOL$LF 2>&1 3>&1
      echo "dd if=/dev/sdb of=sdb.mbr bs=512 count=1"
      echo "dd if=/dev/sdb of=sdb.mbr bs=512 count=1" >>$VOL$LF 2>&1 3>&1
      dd if=/dev/sdb of=$VOL/sdb_${DATUM}.mbr bs=512 count=1
   }
fi  

if [ -b /dev/nvme0n1 ]
   then {
      echo -e "eerste 2047 sectoren van /dev/nvme0n1"
      echo "eerste 2047 sectoren van /dev/nvme0n1" >>$VOL$LF 2>&1 3>&1
      echo "---------------------" >>$VOL$LF 2>&1 3>&1
      echo "dd if=/dev/nvme0n1 of=nvme0n12047.mbr bs=512 count=2047"
      echo "dd if=/dev/nvme0n1 of=nvme0n12047.mbr bs=512 count=2047" >>$VOL$LF 2>&1 3>&1
      dd if=/dev/nvme0n1 of=$VOL/nvme0n12047_${DATUM}.mbr bs=512 count=2047
      echo "eerste sector van /dev/nvme0n1"
      echo "eerste sector van /dev/nvme0n1" >>$VOL$LF 2>&1 3>&1
      echo "---------------------" >>$VOL$LF 2>&1 3>&1
      echo "dd if=/dev/nvme0n1 of=nvme0n1.mbr bs=512 count=1"
      echo "dd if=/dev/nvme0n1 of=nvme0n1.mbr bs=512 count=1" >>$VOL$LF 2>&1 3>&1
      dd if=/dev/nvme0n1 of=$VOL/nvme0n1_${DATUM}.mbr bs=512 count=1
   }
fi  

SECONDS=0
/home/ulefr01/utils/backup-lv $VOL$LF myssd6 boot backup-boot
ELAPSED="Elapsed: $(($SECONDS / 3600)) hrs $((($SECONDS / 60) % 60)) min $(($SECONDS % 60)) sec"
echo "duur backup-boot = " $ELAPSED
echo "duur backup-boot = " $ELAPSED >>$VOL$LF 2>&1 3>&1
TSEC=$(($TSEC + $SECONDS))

SECONDS=0
/home/ulefr01/utils/backup-lv $VOL$LF myssd6 root backup-root
ELAPSED="Elapsed: $(($SECONDS / 3600)) hrs $((($SECONDS / 60) % 60)) min $(($SECONDS % 60)) sec"
echo "duur backup-root = " $ELAPSED
echo "duur backup-root = " $ELAPSED >>$VOL$LF 2>&1 3>&1
TSEC=$(($TSEC + $SECONDS))

SECONDS=0
/home/ulefr01/utils/backup-lv $VOL$LF myssd6 home backup-home
ELAPSED="Elapsed: $(($SECONDS / 3600)) hrs $((($SECONDS / 60) % 60)) min $(($SECONDS % 60)) sec"
echo "duur backup-home = " $ELAPSED
echo "duur backup-home = " $ELAPSED >>$VOL$LF 2>&1 3>&1
TSEC=$(($TSEC + $SECONDS))

SECONDS=0
# echo "udisksctl unmount -b /run/media/ulefr01/data"
# echo "============================================"
# udisksctl unmount -b /run/media/ulefr01/data
/home/ulefr01/utils/backup-lv $VOL$LF myssd6 data backup-data Photos PDF
ELAPSED="Elapsed: $(($SECONDS / 3600)) hrs $((($SECONDS / 60) % 60)) min $(($SECONDS % 60)) sec"
echo "duur backup-data = " $ELAPSED
echo "duur backup-data = " $ELAPSED >>$VOL$LF 2>&1 3>&1
TSEC=$(($TSEC + $SECONDS))

SECONDS=0
/home/ulefr01/utils/backup-dev  $VOL$LF backup-bootefi ${DEV}p1
ELAPSED="Elapsed: $(($SECONDS / 3600)) hrs $((($SECONDS / 60) % 60)) min $(($SECONDS % 60)) sec"
echo "duur backup-bootefi = " $ELAPSED
echo "duur backup-bootefi = " $ELAPSED >>$VOL$LF 2>&1 3>&1
TSEC=$(($TSEC + $SECONDS))


# sudo /home/ulefr01/utils/backup-dev backup-efi /dev/sdb1

# sudo /home/ulefr01/utils/backup-dev backup-boot /dev/sdb2

ELAPSED="Elapsed: $(($TSEC / 3600)) hrs $((($TSEC / 60) % 60)) min $(($TSEC % 60)) sec"

echo -e "totale duur = " $ELAPSED 
echo "totale duur = " $ELAPSED >>$VOL$LF 2>&1 3>&1
exit ${RES}

Backup-lv

bash shell procedure : backup-lv within folder ~/utils

#!/bin/bash
#
SNAPVOL='mysnap'                 # name of the snapshot to create
SNAPSIZ='49G'                     # space to allocate for the snapshot in the volume group
FSAOPTS='-Z11 -j8 -s 1000'                # options to pass to fsarchiver
# ----------------------------------------------------------------------------------------------

PATH="${PATH}:/usr/sbin:/sbin:/usr/bin:/bin"
TIMESTAMP="$(date +%Y%m%d-%Hh%M)"

ARGS=4
E_BADARGS=65
if [ $# -lt "$ARGS" ]
then
   echo "Usage: `basename $0` log volumegroup logicalvolume backnam exclude "
   exit $E_BADARGS
fi

RES=1
log=$1
volumegroup=$2
logvol=$3
backnam=$4
exclude=$5
exclud2=$6

# ----------------------------------------------------------------------------------------------
echo 'backup_lv'
echo '---------'
echo "volumegroup =" $volumegroup
echo "logical volume =" $logvol
echo "backnam =" $backnam
echo '---------'
echo 'backup_lv' >>$log
echo '---------' >>$log
echo "volumegroup =" $volumegroup >>$log
echo "logical volume =" $logvol >>$log
echo "backnam =" $backnam >>$log
echo '---------' >>$log
# ----------------------------------------------------------------------------------------------

# only run as root
if [ "$(id -u)" != '0' ]
then
        echo "this script has to be run as root"
        exit 1
fi
#
VOLGROP=$volumegroup
ORIGVOL=$logvol
# check that the snapshot does not already exist
if [ -e "/dev/${VOLGROP}/${SNAPVOL}" ]
then
        echo "the lvm snapshot already exists, please destroy it by hand first"
        echo "the lvm snapshot already exists, please destroy it by hand first" >>$log
        exit 1
fi 

# create the lvm snapshot
if lvcreate -L ${SNAPSIZ} -s -n ${SNAPVOL} /dev/${VOLGROP}/${ORIGVOL}
then
        echo "lvcreate -L ${SNAPSIZ} -s -n ${SNAPVOL} /dev/${VOLGROP}/${ORIGVOL}"
        echo "lvcreate -L ${SNAPSIZ} -s -n ${SNAPVOL} /dev/${VOLGROP}/${ORIGVOL}" >>$log
else
        echo "creation of the lvm snapshot failed"
        echo "creation of the lvm snapshot failed" >>$log
        exit 1
fi
echo "creation of the lvm snapshot was successfull"
echo "creation of the lvm snapshot was successfull" >>$log

echo "mount -o remount,acl,user_xattr /dev/${VOLGROP}/${SNAPVOL}"
echo "mount -o remount,acl,user_xattr /dev/${VOLGROP}/${SNAPVOL}" >>$log
mount -o remount,acl,user_xattr /dev/${VOLGROP}/${SNAPVOL}

if [[ -z "$exclude" ]] 
then
        echo "NULL"
        echo "fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL}"
        if fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL}
        then
                echo "fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL} done"
                echo "fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL} done" >>$log
                RES=0
        else
                echo "fsarchiver failed"
                echo "fsarchiver failed" >>$log
                RES=1
        fi
else    
        echo "fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL} --exclude=${exclude} --exclude=${exclud2}"
        if fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL} --exclude=${exclude} --exclude=${exclud2}
        then
                echo "fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL} --exclude=${exclude} --exclude=${exclud2} done"
                echo "fsarchiver savefs -A -a -L${ORIGVOL} ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa /dev/${VOLGROP}/${SNAPVOL} --exclude=${exclude} --exclude=${exclud2} done" >>$log
                RES=0
        else
                echo "fsarchiver failed"
                echo "fsarchiver failed" >>$log
                RES=2
        fi
fi

#
sync
#

# remove the snapshot
# if ! lvremove -vf /dev//${VOLGROP}/${SNAPVOL} >/dev/null 2>&1
# if [ -e "/run/media/ulefr01/data/" ]
# then
#         sudo umount /run/media/ulefr01/data
# fi
if lvremove -vf /dev//${VOLGROP}/${SNAPVOL}
then
        echo "lvremove -vf /dev//${VOLGROP}/${SNAPVOL}"
        echo "lvremove -vf /dev//${VOLGROP}/${SNAPVOL}" >>$log
else
        echo "cannot remove the lvm snapshot"
        echo "cannot remove the lvm snapshot" >>$log
        RES=1
fi
#
echo "fsarchiver archinfo ${backnam}-${TIMESTAMP}.fsa 2>${backnam}-${TIMESTAMP}.info "
echo "fsarchiver archinfo ${backnam}-${TIMESTAMP}.fsa 2>${backnam}-${TIMESTAMP}.info " >>$log
fsarchiver archinfo ${backnam}-${TIMESTAMP}.fsa 2>${backnam}-${TIMESTAMP}.info
exit ${RES}

Backup-dev

bash shell procedure : backup-dev within folder ~/utils

#!/bin/bash
#
FSAOPTS='-Z11 -j8 -s 1000'                # options to pass to fsarchiver

# ----------------------------------------------------------------------------------------------

PATH="${PATH}:/usr/sbin:/sbin:/usr/bin:/bin"
TIMESTAMP="$(date +%Y%m%d-%Hh%M)"

ARGS=3
E_BADARGS=65
if [ $# -lt "$ARGS" ]
then
   echo "Usage: `basename $0` log backnam device "
   exit $E_BADARGS
fi

RES=1
log=$1
backnam=$2
device=$3

# ----------------------------------------------------------------------------------------------
echo 'backup-dev'
echo '---------'
echo "backnam =" $backnam
echo "device =" $device
echo '---------'
echo 'backup-dev' >>$log
echo '---------' >>$log
echo "backnam =" $backnam >>$log
echo "device =" $device >>$log
echo '---------' >>$log
# ----------------------------------------------------------------------------------------------

# only run as root
if [ "$(id -u)" != '0' ]
then
        echo "this script has to be run as root"
        exit 1
fi
#


echo "fsarchiver savefs -A ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa ${device}"
echo "fsarchiver savefs -A ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa ${device}" >>$log

if fsarchiver savefs -A ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa ${device}
then
        echo "fsarchiver savefs -A ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa ${device} done"
        echo "fsarchiver savefs -A ${FSAOPTS} ${backnam}-${TIMESTAMP}.fsa ${device} done" >>$log
        RES=0
else
        echo "fsarchiver failed"
        echo "fsarchiver failed" >>$log
        RES=1
fi

#
sync
#

#
echo "fsarchiver archinfo ${backnam}-${TIMESTAMP}.fsa 2>${backnam}-${TIMESTAMP}.info "
echo "fsarchiver archinfo ${backnam}-${TIMESTAMP}.fsa 2>${backnam}-${TIMESTAMP}.info " >>$log
fsarchiver archinfo ${backnam}-${TIMESTAMP}.fsa 2>${backnam}-${TIMESTAMP}.info

exit ${RES}