Ich habe selbst ein kleines Shellscript programmiert um von meinen drei Rechnern Backups auf Wechselfestplatte zu machen.
Du kannst es ja mal anschaunen und an deine Bedürfnisse anpassen:
Du mußt entsprechend diesem Artikel noch eine paar Einstellungen vornehmen , um die Passwortabfrage bei der ssh-Verbindung zu umgehen:
http://www.jdmz.net/ssh/
Dukannst dieses Shellscript eventuell rsync-backup nennen.
Nickles löscht leider alle Tabulatoren aus dem originalen Shellscript heraus.
#!/bin/bash
#Dieses Shellscript sichert ausgewählte Verzeichnisse vom drei Rechnern sichern
VERZEICHNISSE_WINKLER="/home /root /etc /boot /usr/local"
VERZEICHNISSE_WINKLER2="/home /root /etc /boot /usr/local"
VERZEICHNISSE_WINKLER3="/home /root /etc /boot /usr/local"
#eventuell Löschen von alten Backup-Dateien
if [ $# -eq 1 ] ; then
if [ "$1" != "--delete" ] ; then
echo
echo "usage: $0 --> Alte Backup-Dateien werden nicht gelöscht !"
echo "usage: $0 --delete --> Alte Backup-Dateien werden gelöscht !"
echo
exit 1
fi
fi
#Default -- alte Backup-Dateien nicht löschen
DELETE=""
#alte Backup-Dateien löschen
if [ "$1" = "--delete" ] ; then
DELETE="--delete"
fi
BACKUP_WINKLER=/winkler
BACKUP_WINKLER2=/winkler2
BACKUP_WINKLER3=/winkler3
RSYNC=/usr/bin/rsync
ID=/usr/bin/id
MOUNT=/bin/mount
UMOUNT=/bin/umount
MOUNT_DEVICE=/dev/hde1
MOUNT_POINT=/wechselfestplatte
SSH=/usr/bin/ssh
KEY=/root/rsync-key/rsync-key
RUSER=root
RHOST_WINKLER2=192.168.1.3
RHOST_WINKLER3=192.168.1.5
TEMPFILE=/tmp/rsync.err
MAXIMUM_MOUNT_COUNT=25
rm -f $TEMPFILE
touch $TEMPFILE
echo >> $TEMPFILE
echo >> $TEMPFILE
echo >> $TEMPFILE
echo "Verzeichnisse , die nicht gesichert werden konnten:" >> $TEMPFILE
echo >> $TEMPFILE
if [ `$ID -u` != 0 ] ; then
echo
echo "Dieses Shellscript braucht root-Rechte !"
echo
exit 1
fi
# Check MOUNT_DEVICE
mount_count=`tune2fs -l $MOUNT_DEVICE | grep "Mount count"`
#tune2fs liefert 3 Wöter zurück. Anzahl ist 3. Wort.
for wort in $mount_count ; do
anzahl=$wort
done
#Debug
#echo "Anzahl Mount count: $anzahl"
#exit 1
if [ $anzahl -ge $MAXIMUM_MOUNT_COUNT ] ; then
$UMOUNT $MOUNT_POINT 2>/dev/null
echo "Prüfe $MOUNT_DEVICE ..."
e2fsck -f $MOUNT_DEVICE
if [ $? != 0 ] ; then
echo "Fehler auf $MOUNT_DEVICE !"
echo "$0 wird beendet !"
exit 1
fi
fi
mount | grep $MOUNT_DEVICE
if [ $? != 0 ] ; then
$MOUNT -t ext3 -o rw $MOUNT_DEVICE $MOUNT_POINT
if [ $? != 0 ] ; then
echo
echo "Konnte $MOUNT_DEVICE nicht unter $MOUNT_POINT readwrite mounten !"
exit 1
fi
else
$MOUNT -t ext3 -o remount,rw $MOUNT_DEVICE $MOUNT_POINT
if [ $? != 0 ] ; then
echo
echo "Konnte $MOUNT_DEVICE nicht unter $MOUNT_POINT readwrite remounten !"
exit 1
fi
fi
#Backup Winkler
if [ ! -d $MOUNT_POINT$BACKUP_WINKLER ] ; then
mkdir $MOUNT_POINT$BACKUP_WINKLER
fi
for verzeichnis in $VERZEICHNISSE_WINKLER ; do
echo
echo "Sichere Verzeichnis $verzeichnis von Rechner Winkler..."
$RSYNC -av $DELETE --progress $verzeichnis $MOUNT_POINT$BACKUP_WINKLER
#debug
#echo "MOUNT_POINTBACKUP_WINKLER: $MOUNT_POINT$BACKUP_WINKLER"
if [ $? != 0 ] ; then
echo "$verzeichnis von Winkler konnte nicht gesichert werden" >> $TEMPFILE
fi
done
#Backup Winkler2 über Netzwerk
if [ ! -d $MOUNT_POINT$BACKUP_WINKLER2 ] ; then
mkdir $MOUNT_POINT$BACKUP_WINKLER2
fi
for verzeichnis in $VERZEICHNISSE_WINKLER2 ; do
echo
echo "Sichere Verzeichnis $verzeichnis von Rechner Winkler2 ..."
$RSYNC -av $DELETE --progress -e "$SSH -i $KEY" $RUSER@$RHOST_WINKLER2:$verzeichnis $MOUNT_POINT$BACKUP_WINKLER2
if [ $? != 0 ] ; then
echo "$verzeichnis von Winkler2 konnte nicht gesichert werden" >> $TEMPFILE
fi
done
#Backup Winkler3 über Netzwerk
if [ ! -d $MOUNT_POINT$BACKUP_WINKLER3 ] ; then
mkdir $MOUNT_POINT$BACKUP_WINKLER3
fi
for verzeichnis in $VERZEICHNISSE_WINKLER3 ; do
echo
echo "Sichere Verzeichnis $verzeichnis von Rechner Winkler3 ..."
$RSYNC -av $DELETE --progress -e "$SSH -i $KEY" $RUSER@$RHOST_WINKLER3:$verzeichnis $MOUNT_POINT$BACKUP_WINKLER3
if [ $? != 0 ] ; then
echo "$verzeichnis von Winkler3 konnte nicht gesichert werden" >> $TEMPFILE
fi
done
#Wechselfestplatte readonly mounten
$MOUNT -t ext3 -o remount,ro $MOUNT_DEVICE $MOUNT_POINT
if [ $? != 0 ] ; then
echo "Konnte $MOUNT_DEVICE nicht unter $MOUNT_POINT readonly remounten !"
fi
#Fehlerausgabe
ausgabe=`wc -l $TEMPFILE`
add=0
#wc -l liefert auch den Dateinamen zurück
for wort in $ausgabe ; do
if [ $add = 0 ] ; then
add=1
zeilen=$wort
fi
done
if [ $zeilen -gt 2 ] ; then
cat $TEMPFILE
fi
exit 0
Du kannst es noch anpassen . Das ist nur ein ganz einfaches Shellscript.