N'Abend,
ich habe meine Daten-Platte an die Dockstar gehängt, um alle
Aufnahmen, Video, Musik etc. im Heimnetz zu sharen.
Meine Überlegung war, was ist wenn die Platte mal irgendwann nicht
mehr macht ?
Erste Idee war ein mirrored Software-Raid1, was sich aber bei weiteren Überlegungen
als nicht so toll rausstellte:
- einzelne Platte OHNE Formatierung nur schwer
um eine 2te zu erweitern und als Raid1 'umzuwandeln'
- versehentliches Löschen von Dateien -> Weg ist Weg !
- Ist eine Platte schrott, ist es nicht ganz so einfach,
die noch funktionierende Platte allein an jedem Rechner zu mounten
(Filesystem Linux Raid Auto ...)
Darum habe ich mich für folgende Weg entschieden:
- Platte 1 (Datenplatte) lassen, wie sie ist
- Platte 2 (Backup-Platte) andocken und mit RSYNC 1x am Tag (nachts) per cron synchronisieren lassen
- Gelöschte Dateien von Platte 1 erst nach 30 Tagen auf Platte 2
löschen
Vorteile:
- Beide Platte lassen sich jederzeit an jedem anderen Rechner mounten
- Vorhaltezeit von 30 Tagen für gelöschte Dateien
- Integration der Platte 2 im laufendem Betrieb möglich
Wie läßt sich das ganze realisieren ?
Am besten per Skript
Ich habe hier etwas schönes gefunden.
Quelle- & Zielordner angeben, Vorhaltezeit für Dateien im Tagen angeben,
sprich nach wieviel Tage sie gelöscht werden sollen, und schon rennt es los
Bei mir kopiert er gerade den gesamten Inhalt von Platte 1, so wie er soll.
Nur ich habe gerade gesehen, daß er alle Dateien in einen Unterordner kopiert.
Der Ordner trägt als Namen das Datum von heute.
Schön wäre, wenn er das ganze mit den Unterordnern wegläßt und Platte 2
quasi nur ein Mirror von Platte 1 ist (mit den noch nicht gelöschten Dateien natürlich)
Hat jemand ähnliches realisiert und kann mir ein wenig unter die Arme greifen ?
cron sollte dabei kein Problem sein ...
Gruß, Tommes
#!/bin/bash
# Simple backup with rsync
# sources and target MUST end WITH slash
SOURCES="/mnt/USB-Daten-Platte/"
TARGET="/mnt/USB-Backup-Platte/"
# mountpoint must end WITHOUT slash
#MOUNTPOINT="/media/server"
LOGFILE="/var/log/backup.log"
EXPIREDAYS=30
RSYNC="--delete"
#PACKAGES="/tmp/packages.list"
#MAILREC="root@localhost"
#SSHUSER=""
#SSHHOST=""
#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 -p $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\" -av $SOURCEDIR $RSYNC $INC $TARGET$TODAY$SOURCE " >> $LOGFILE 2>> $LOGFILE;
/usr/bin/rsync -e "$SSH" -av $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
Alles anzeigen