LVM Snapshot Backup

Backup mit LVM lässt sich schnell realisieren, wenn man viel Platz hat.

Zusätzliche Sicherungen sind zu empfehlen – für schnelle Test und Recovery Jobs gibt es aber eine einfache Methode. Meistens reichen 1 und 2 Wochen Rückblick aus und die mit etwa 50% der Gesamtkapazität des Logischen Laufwerks (LV).

Das Backupskript zum Ausführen (jede Woche einmal) /root/bin/lvm-snapshot-backup.sh:

#!/bin/bash
# Dieses Skript erzeugt lvm Snapshots über 2 Wochen

# Nur root erlaubt
if [[ $EUID -ne 0 ]]; then
  echo "You must be root!" 2>&1
  exit 1
fi

# Get scriptdir
#SDIR=`dirname $0`
SDIR=/root/bin

# Load config file
. ${SDIR}/lvm-snapshot-backup.cfg

[ "" = "${vg}" ] && (echo "Keine VG gesetzt - ENDE\!";exit 1;)

# Backup der Volumegruppe erstellen
echo "Erstelle Backup von den LVM Daten..."
vg1="/root/${vg}_1w"
vg2="/root/${vg}_2w"
[ -f "${vg2}" ] && rm ${vg2}
[ -f "${vg1}" ] && mv ${vg1} ${vg2}
/sbin/vgcfgbackup -f ${vg1} ${vg}

# über alle lvs
for lv in "${LVS[@]}"; do
        if [ ! -e "/dev/${vg}/${lv}" ]
        then
                echo "LV existiert nicht: ${vg}/${lv} - Mache ohne weiter..."
                continue
        fi
        echo "Verarbeite ${vg}/${lv}..."
        # 1 Woche
        lv1=${lv}_1w
        # 2 Wochen
        lv2=${lv}_2w
        # Größe des Snapshot
        real=$(/sbin/lvs|grep " ${lv} .*${vg}"|awk '{ print $4 }')
        size=${real%.*}
        # die Hälfte des ursprünglichen LVS verwenden
        size=$(expr $size / 2)
        unit=${real:(-1)}
        # Snapshots verschieben und neuen erstellen
        echo "Größe des LV: ${real} - Snapshot: ${size}${unit}"
        echo "1 Woche auf 2 Wochen verschieben..."
        (/sbin/lvs | grep " ${lv2} " >/dev/null) && (/sbin/lvremove -f ${vg}/${lv2};echo "${lv2} gelöscht...") || echo "${lv2} noch nicht vorhanden."
        (/sbin/lvs | grep " ${lv1} " >/dev/null) && (/sbin/lvrename ${vg}/${lv1} ${vg}/${lv2};echo "${lv2} in ${lv1} umbenannt...") || echo "${lv1} noch nicht vorhanden."
        echo "Erzeuge neuen 1 Woche Snapshot..."
        /sbin/lvcreate -s --name ${lv1} -L${size}${unit} ${vg}/${lv}
        echo ---
done

echo "Lvs:"
/sbin/lvs ${vg}
echo ------

Die Konfigurationsdatei /root/bin/lvm-snapshot-backup.cfg:

# die Liste der zu sichernden LVS wird hier übergeben
LVS=(Terminalserver Nagios TestServer)
# Volumegruppe
vg=vg0

Viel Spaß!

Nachtrag – Ein passender crontab Eintrag wäre:

# m h  dom mon dow   command
10 0 * * 6      /root/bin/lvm-snapshot-backup.sh
Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

cOCr2n

Bitte geben Sie den Text vor: