Geschichte/Server/top3/Backup

Aus UUGRN
< Geschichte‎ | Server‎ | top3

Das aktuelle Backup-Konzept von top3offline sieht vor, dass alle Daten vom zroot-Pool inkrementell per zfs send gesichert werden.

Dazu wird per cron täglich ein rekursiver Snapshot im Format zroot@YYYYMMDDHHMMSS erzeugt und per zfs send als Delta zum vorigen Snapshot auf den tank-Pool gelegt, hier /tank/backup/uugrn.org/top3/top3_zroot@YYYYMMDDHHMMSS.

Die so erzeugten ZFS-Dumps können dann entweder im tank-Pool eingelesen werden oder per Filetransfer auf higgsBeta oder einen anderen failover-Server kopiert (oder von dort abgeholt) und dort abgelegt oder in einen zpool importiert werden.

Annahmen[Bearbeiten]

  • Es wird angenommen, dass immer ein ZFS-Dump vom Vortag existiert. Existiert dieser nicht, wird ein neuer, initialer Dump erzeugt. FIXME: Die Namen der Dump-Files sollten diese Unterscheidung ermöglichen, etwa indem im Filename für Deltas beide Snapshots enthalten sind oder im Falle eines Initial-Dumps dieser Umstand aus dem Namen hervorgeht (siehe Diskussionsseite)


Fallstricke[Bearbeiten]

  • Es gib aktuell keinen Automatismus, der nicht mehr benötigte Dumps rekursiv entsorgt, d.h. zroot wird vollaufen, da keine Daten gelöscht werden. FIXME: Löschjob schreiben (siehe Diskussionsseite)


Restore-Möglichkeiten[Bearbeiten]

Verlorene Daten oder Inhalte können rekonstruiert werden aus:

  • noch vorhandene Snapshots im zroot, zB /jails/uugrn.org/foo/.zfs/snapshots/YYYYMMDDHHMMSS/etc/passwd
  • aus der Langzeit-Archivierten read-only-Kopie im lokalen tank-Pool zB /tank/backup/uugrn.org/top3/zroot/jails/uugrn.org/foo/.zfs/snapshots/YYYYMMDDHHMMSS/etc/passwd
  • aus der Langzeit-Archivierten read-only-Kopie auf higgsBeta, zB unter /tank/backup/top3.uugrn.org/zroot/jails/uugrn.org/foo/.zfs/snapshots/YYYYMMDDHHMMSS/etc/passwd
  • aus komprimierten ZFS-Dumps aus OfflineBackupMedien (Tape, USB-Disk, DVD-Split, …)

Script[Bearbeiten]

#! /bin/sh

set -x
NOW="$(date +%Y%m%d%H%M%S)"

DOM="uugrn.org"
HOST="top3"
POOL="zroot"


SNAPDIR="/tank/backup/${DOM}/${HOST}/"
SNAP="${POOL}@${NOW}"
SNAPFILE="${SNAPDIR}/${HOST}_${SNAP}"

LASTSNAP="$(find "${SNAPDIR}" -name "${HOST}_${POOL}@*" | sort -r | head -n 1 | grep -o "${POOL}@[0-9]*$")"


zfs snapshot -r "${SNAP}"
if [ -n "${LASTSNAP}" ]; then
        # inkrementellen dump erzeugen
        zfs send -v -D -R -I "${LASTSNAP}" "${SNAP}" > "${SNAPFILE}.tmp" && mv -v "${SNAPFILE}.tmp" "${SNAPFILE}"
else
        # initialen snapshot erzeugen
        # ACHTUNG, VIEL!
        zfs send -v -D -R "${SNAP}" > "${SNAPFILE}.tmp" && mv -v "${SNAPFILE}.tmp" "${SNAPFILE}"
fi