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
fiKommt 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.