ubuntuusers.de

Sicherung über LAN; Skript korrekt?

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

adca1

Anmeldungsdatum:
14. Juni 2009

Beiträge: 215

Ich habe bisher die Einstellungen und Musikdaten meines Musikservers vor Ort mit einer externen USB-HD gesichert, möchte dies inskünftig aber vom PC aus auf eine dort angehängte HD erledigen.

Im Trockenlauf hat die gewünschte Sicherung mit folgenden Befehle das gewünschte Ergebnis gezeitigt:

rsync -avb -P -e "ssh -m hmac-sha1-96" --delete root@SERVER-IP:/audio /media/MUSIKBACKUP --backup-dir=/media/MUSIKBACKUP/old
rsync -avb -P -e "ssh -m hmac-sha1-96" --delete root@SERVER-IP:/data/db /media/MUSIKBACKUP --backup-dir=/media/MUSIKBACKUP/old
rsync -avb -P -e "ssh -m hmac-sha1-96" --delete root@SERVER-IP:/data/cddb2 /media/MUSIKBACKUP --backup-dir=/media/MUSIKBACKUP/old

Da mir jegliche Erfahrung mit Skripten fehlt, habe ich das rsync-Skript aus dem Wiki genommen und wie folgt angepasst (8-ung: ohne Codeblock, da sonst die fett hervorgehobenen Änderungen nicht eindeutig erkennbar wären):

#!/bin/bash
# Simple backup with rsync
# sources and target MUST end WITH slash
SOURCES="/audio /data/db /data/cddb2"
TARGET="/media/MUSIKBACKUP"

# mountpoint must end WITHOUT slash
#MOUNTPOINT="/media/MUSIKBACKUP"

LOGFILE="/home/adca1/backup.log"
EXPIREDAYS=0
RSYNC=" -b --delete --backup-dir=/media/MUSIKBACKUP/old"

#PACKAGES="/tmp/packages.list"
#MAILREC="root@localhost"

#SSHUSER="root"
#SSHHOST="SERVER-IP"
#SSHPORT=22 

### do not edit ###

/bin/date > $LOGFILE

MOUNTED=$(/bin/mount | /bin/fgrep "$MOUNTPOINT");
if [ -z "$MOUNTPOINT" ] || [ -n "$MOUNTED" ]; then

  if [ -e $TARGET ]; then
    LASTBACKUP=$(/bin/ls -d $TARGET[[:digit:]]* 2>> $LOGFILE | /usr/bin/sort -r | /usr/bin/head -1)
  fi

  TODAY=$(/bin/date +%y%m%d)

  if [ $EXPIREDAYS -gt 0  ]; then
    EXPIRED=$(/usr/bin/find $TARGET[[:digit:]]* -maxdepth 0 -ctime +$EXPIREDAYS  2>> $LOGFILE)
    for EX in $(/bin/echo $EXPIRED)
    do
      /bin/echo  "rm -rf $EX " >> $LOGFILE
      /bin/rm -rf $EX
    done
  fi

  for SOURCE in $(/bin/echo $SOURCES)
  do
    if [ "$LASTBACKUP" ]; then
      INC="--link-dest=$LASTBACKUP$SOURCE"
    fi

    if [ "$SSHUSER" ] && [ "$SSHHOST" ] && [ "$SSHPORT" ]; then
      SSH="ssh '-m hmac-sha1-96' $SSHPORT -l $SSHUSER";
      SOURCEDIR="$SSHHOST:$SOURCE";
    else
      SOURCEDIR=$SOURCE;
    fi
    /bin/mkdir -P $TARGET$TODAY$SOURCE >> $LOGFILE 2>> $LOGFILE;
    echo "/usr/bin/rsync -e \"$SSH\" -avP $SOURCEDIR $RSYNC $INC $TARGET$TODAY$SOURCE "  >> $LOGFILE 2>> $LOGFILE;
    /usr/bin/rsync -e "$SSH" -avP $SOURCEDIR $RSYNC $INC $TARGET$TODAY$SOURCE  >> $LOGFILE 2>> $LOGFILE;
  done

  if [ -n "$PACKAGES" ]; then
    if [ -z "$SSHUSER" ] || [ -z "$SSHHOST" ] || [ -z "$SSHPORT" ] ; then
      echo "dpkg --get-selections | awk '!/deinstall|purge|hold/' > $PACKAGES" >> $LOGFILE 2>> $LOGFILE
      dpkg --get-selections | awk '!/deinstall|purge|hold/' > $PACKAGES 2>> $LOGFILE
      echo -e "/bin/mv $PACKAGES $TARGET$TODAY \n" >> $LOGFILE 2>> $LOGFILE
      /bin/mv $PACKAGES $TARGET$TODAY 2>> $LOGFILE
    fi
  fi

  /bin/date >> $LOGFILE
  /bin/cp $LOGFILE $TARGET$TODAY/backup-$(/bin/date +%H%M%S).log 2>> $LOGFILE

else
  /bin/echo "$MOUNTPOINT not mounted" >> $LOGFILE
fi

if [ -n "$MAILREC" ];then
  /bin/echo -e 'Backup is finished!\n'$(/bin/date)  | /usr/bin/mutt -s "Backup" -a $LOGFILE -- $MAILREC
  /bin/rm $LOGFILE
fi

Kommt das hin? Ich möchte nicht durch ein unbedachtes Laufenlassen des Skripts einen Datenverlust provozieren.

Wenn ich im Übrigen MAILREC nutzen möchten, kann ich da auch meine normale e-mail-Adresse angeben?

Danke für Hinweise auf Unebenheiten im Skriptentwurf.

Bearbeitet von redknight:

Forensyntax eingefügt. Einmal wäre der Marker sinnvoll und dann wird er nicht benutzt, es ist zum heulen. Das kann doch nicht dein Ernst gewesen sien, so einen Brocken hier einfach hinzuwerfen und dann noch Hilfe zu erwarten.

Moderiert von redknight:

Ins korrekte Subforum verschoben.

Antworten |