Re: Geeignete Backupstrategie

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 9 Aug 2011 13:32:09 +0200 (CEST)

Timm Wimmers wrote:
> Am Montag, den 08.08.2011, 20:12 +0200 schrieb Manfred Lotz:
> >
> > Ich habe mir ein rsnapshot ähnliches Script geschrieben, dass mir sehr
> > gute Dienste leistet. Was nutzt du, wenn du die Situation hast, deine
> > Daten auf eine ext. Festplatte zu sichern, und möglichst platzsparend
> > (also mit Hardlinks) viele Generationen haben willst?
>
> Kann man das Script mal sehen? Oder hast du andere Hinweise/Quellen?
>
> Ich benutze ebenfalls RSYNC und muss dringend auf Hardlinks umstellen,
> weil der Platz knapp wird. Wir haben hier sieben Generationen (MO-SO) in
> einer Werbeagentur und die sind - was Dateigrößen angeht - einfach
> wahnsinnig!

Sowas kann man sich eigentlich in 'nem Dutzend Zeilen Shell-
Code zusammenzimmern. Bei mir sieht's im prinzip so aus
(ist nur das Grundgerüst; mein Skript ist komplexer):

   TODAY=$(date +%F)
   cd /backup
   LAST_BACKUP=$(ls -t | grep '^....-..-..$' | head -n 1)
   cpdup -H "$LAST" "$SOURCE" "$TODAY"

Damit wird das Dateisystem von "$SOURCE" (kann auch remote
sein; SYntax wie bei scp) in einem Unterverzeichnis unter
/backup gesichert, und zwar so, dass bei Dateien, die sich
seit dem letzten Backup nicht geändert haben, nur ein
Hardlink dorthin gesetzt wird. Wenn mehrere Dateisysteme
zu sichern sind, muss man entsprechend mehrere cpdup-
Kommandos verwenden. Das /backup-Verzeichnis sieht so aus:

   ...
   /backup/2011-08-06/...
   /backup/2011-08-07/...
   /backup/2011-08-08/...
   /backup/2011-08-09/...

Möchte man z.B. montags mit "frischen" inodes beginnen,
d.h. cpdup ohne -H laufen lassen, muss man folgend Fall-
unterscheidung machen:

   if [ $(date +%u) -eq 1 ]; then
           OPTS=""
   else
           OPTS="-H"
   fi
   cpdup $OPTS "$LAST" "$SOURCE" "$TODAY"

Wenn man nur die Backups für eine Woche aufheben möchte,
also die letzen sieben, dann kann man die älteren auch
recht einfach löschen:

   cd /backup
   NUM_ALL=$(ls | grep '^....-..-..$' | wc -l)
   NUM_OLD=$(( NUM_ALL - 7 ))
   for DIR in $(ls -t | tail -n $NUM_OLD); do
           rm -rf $"DIR" >/dev/null 2>&2
           if [ -d "$DIR" ]; then
                   chflags -R noschg "$DIR"
                   rm -rf "$DIR"
           fi
   done

Das ist dann sogar die Luxus-Version, die nötigenfalls das
Immutable-Flag zurücksetzt.

Man kann sich diese Zeilen an die eigenen Bedürfnisse
anpassen und das Ganze dann als cronjob z.B. um 0:01 Uhr
laufen lassen (und natürlich ausgiebig testen).
Wichtig ist, dass sich der Shell-Code an der mtime der
Backup-Verzeichnisse orientiert, um festzustellen, welches
das jüngste und welches die älteren Backup sind. Man
sollte es daher vermeiden, anderweitig die mtime zu
manipulieren.

Ich weise auch auf die Man-page von cpdup hin, die noch
einige andere nützliche Optionen bereitstellt, z.B. um
bestimmte Dateien oder Verzeichnisse vom Backup auszu-
nehmen.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
'Instead of asking why a piece of software is using "1970s technology,"
start asking why software is ignoring 30 years of accumulated wisdom.'
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 09 Aug 2011 - 13:32:30 CEST

search this site