====== Backup Linux-Rechner Lotte ====== ===== Backup-Script ===== #!/bin/bash basedir= user=lotte mediadir=/media/$user mountdir=/mnt/$user/autobackup mediaids=( a134880c-d33e-4c70-8227-ea47e6341b1c de6ba9c3-cb24-41c0-aea8-a02be20ae30e ) sourcedirs2backup=( /home/lotte ) LOGFILE=/tmp/rsyncback.log LOG_MESSAGES=1 # -------------------------------------------------------- functions --- function message () { if [ ! -z $LOG_MESSAGES ]; then local msg=$1 echo `date +"%Y-%m-%d %H:%M:%S"` $msg fi echo `date +"%Y-%m-%d %H:%M:%S"` $msg 2>&1 >> $LOGFILE } # ------------------------------------------------------------- Main --- if [ ! -d $mediadir ]; then message "Error: Mediadir $mediadir does not exist. Exiting." exit 1 fi for mid in "${mediaids[@]}"; do echo mid $mid if [ -d $mediadir/$mid ]; then basedir=$mediadir/$mid device=$(mount | grep $mid | cut -d " " -f 1) if [ ! -z "$device" ]; then break fi fi done if [ -z "$basedir" ]; then message "No configured media mounted. Exiting" exit 1 fi message "Medium mounted. Basedir: $basedir Device: $device" lastdir=$(ls -1 $basedir | grep -v lost | tail -1) targetdir=$basedir/$(date +%Y-%m-%d) if [ ! -d $targetdir ]; then message "performing backup to $targetdir" if [ ! -z "$lastdir" ] && [ -d "$basedir/$lastdir" ]; then message "copying $lastdir to $targetdir" nice cp -al $basedir/$lastdir $targetdir else message "no dir for copying found in $basedir" fi rsyncopts="-a -h --numeric-ids --relative --delete --delete-excluded --hard-links --stats" rsyncexcludes="--exclude .cache/ --exclude Trash/ --exclude datareporting/archived/ --exclude *msf" message "starting rsync" for sourcedir in "${sourcedirs2backup[@]}"; do nice rsync $rsyncopts $sourcedir $targetdir done message "backup on $basedir done" else message "heute schon gebackupt" fi mount -o ro,remount $device $basedir # Local variables: # compile-command: "bash /home/springm/projekte/lotte/rsyncback.sh" # End: ===== Start des Skripts ===== Eine Stunde nach dem Einschalten, weil sonst nicht sichergestellt ist, dass mit der Anmeldung auch die Sicherungsplatte gemountet ist. Start über '''/etc/rc.local''' (neu anlegen, wenn die Datei nicht existiert, wird auch auf einem Ubuntu 22 trotz systemd ausgeführt). Start über rc.local ist nötig, damit das Skript als '''root''' ausgeführt hat und die Privilegien für den Dateizugriff und das mounten hat. #!/bin/bash if [ ! -f /var/run/rsyncbackup ]; then echo /home/lotte/bin/rsyncbackup.sh | at now+60min 2>&1 > /tmp/rc_local_rsyncbackup.log touch /var/run/rsyncbackup fi exit 0