[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Review ZFS Backup Script
[Thread Prev] | [Thread Next]
- Subject: Review ZFS Backup Script
- From: Raphael Eiselstein <rabe@xxxxxxxxx>
- Date: Fri, 29 Mar 2013 23:45:41 +0100
- To: uugrn@xxxxxxxxxxxxxxx
Hallo ZFS-Freaks, ich bastel gerade an einem auf ZFS Snapshots basierendem Backup fuer den Vereinsserver. Da ich noch nicht arg viel Erfahrung mit ZFS habe, benoetige ich mal euer Feedback dazu: == Das Script == .........|.........|.........|.........|.........|.........|.........|.. #! /bin/sh set -x NOW="$(date +%Y%m%d%H%M%S)" FS=zroot/home SRC="${FS}" DST="tank/backup/uugrn.org/top3/${FS}@${NOW}" OLD="${SRC}@backup_old" # snapshot last successfull backup CURRENT="${SRC}@backup_current" # create working snapshot (NOW!) # zroot/home@backup_working_YYYYMMDDHHMMSS WORK="${SRC}@backup_working_${NOW}" zfs snapshot "${WORK}" # send incremental snapshot to destination zfs send -i "${CURRENT}" "${WORK}" | buffer -m 20m | zfs receive -F "${DST}" && ( zfs destroy "${OLD}" ; # @backup_old zfs rename -r "${CURRENT}" "${OLD}" && # @backup_current --> @backup_old zfs rename "${WORK}" "${CURRENT}" # @backup_work* --> @backup_current ) .........|.........|.........|.........|.........|.........|.........|.. == Das Ergebnis == Wenn das Script erfolgreich (paarmal) durchgelaufen ist, dann ergibt das folgende Snapshots: [root@top3 ~]# zfs list -Ht snapshot | grep home | awk '{print $1;}' tank/backup/uugrn.org/top3/zroot/home@20130329222410 tank/backup/uugrn.org/top3/zroot/home@20130329223631 tank/backup/uugrn.org/top3/zroot/home@20130329223759 tank/backup/uugrn.org/top3/zroot/home@20130329223834 tank/backup/uugrn.org/top3/zroot/home@20130329230014 tank/backup/uugrn.org/top3/zroot/home@20130329230912 tank/backup/uugrn.org/top3/zroot/home@20130329231022 zroot/home@backup_old zroot/home@backup_current == Was noch fehlt == Was das Script bisher nicht kann: Pruefen, ob zroot/home@backup_current existiert und falls nicht einen initialen snapshot erzeugen und nicht-inkrementell (zfs send ohne "-i") nach tank/backup/uugrn.org/top3/zroot/home@YYYYMMDDHHMMSS zu schieben und bei Erfolg diesen nicht-inkrementellen snapshot dann umbennen nach zroot/home@backup_current == Meine Strategie == 1) An der Quelle (zroot/*) werden zu Backup-Zwecken nur maximal 2 Snapshots rollierend angelegt (current, old) und langfristig aufbewahrt, ich erspare mir eine Loeschtaktik und irgendwelche Script-Konstrukte auf Timestamp-Snapshots. 2) Am Ziel (tank/backup/uugrn.org/top3/zroot/) bekomm ich diese Snapshots archiviert, es werden (vorerst) keine alten Snapshots geloescht (wenn hier der Platz eng wird muss ich mir was ausdenken) 3a) Im Falle eines Full-Restore wuerde ich den erforderlichen Stand zB tank/backup/uugrn.org/top3/zroot/home@20130329230912 kopieren nach zroot/home@20130329230912 und anschliessend ein "zfs rollback" auf diesen Snapshot ausfuehren. 3b) Im Falle eines partiellen restores wuerde ich die erforderlichen Dateien einfach per rsync oder sonstwie kopieren von tank/home nach zroot/home. == Fragen == 1) Kann ich irgendwie innerhalb von ZFS an zroot/home@backup_current eine Freitext-Information einfuegen, in der tank/backup/uugrn.org/top3/zroot/home@20130329231022 steht? Damit waere es moeglich zu den nicht-historisierten Snapshots (current, old) den jeweiigen Historisierungs-Stand zu "merken": Q: Wohin wurde das letzte Backup geschrieben? A: zroot/home@backup_current::Freitext-Property Q: Wohin das Backup davor? A: zroot/home@backup_old::Freitext-Property Bitte mit Beispiel. 2) Was ist das *sinnvollste* Command um die Existenz eines Snapshots (zB zroot/home@backup_current) zu pruefen? zfs get? Ich benoetige das um zu erkennen, ob "zfs send" inkrementell erfolgen kann oder nicht. 3) Hier geht es erstmal darum, zroot nach tank/backup zu sichern, Traffic spielt hier kaum eine Rolle (lokale pipes). Allerdings sollen die Snapshots auch auf andere Server ueberrtagen werden (via ssh). Wie kann ich *vor* einem "zfs send" ermitteln, wieviele Daten (in MBytes/GBytes) uebertragen werden? Ich will hier eine Sollbruchstelle einbauen, dass eine remote-Sicherung von Snapshots nur dann automatisiert erfolgt, wenn die Datenmenge nicht zu gross ist. == Kritik erwuenscht == * Gibt es prinzipiell bessere Methoden, Best practises? * Wird mein Konstrukt irgendwann vor die Wand laufen? + mit welchen Auswirkungen? * Koennte mein Konstrukt wie oben einen Restore gefaehrden? Danke und Gruss Raphael -- Raphael Eiselstein <rabe@xxxxxxxxx> http://rabe.uugrn.org/ xmpp:freibyter@xxxxxx | https://www.xing.com/profile/Raphael_Eiselstein GnuPG: E7B2 1D66 3AF2 EDC7 9828 6D7A 9CDA 3E7B 10CA 9F2D .........|.........|.........|.........|.........|.........|.........|.. -- UUGRN e.V. http://www.uugrn.org/ http://mailman.uugrn.org/mailman/listinfo/uugrn Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste Archiv: http://lists.uugrn.org/