[Anleitung] LXC Backup per User Script


Recommended Posts

Ein Kurzes simples Skript um (stark) komprimierte Backups der LXC Container zu erstellen.

 

Da @ich777 mit der Version 2023.07.30 eine Backup eingeführt hat, ist mein Skript in der ursprünglichen Form "überflüssig" geworden.

Nähere Informationen erhält man mit Folgenden Befehlen im Terminal:

lxc-autobackup -h
lxc-autosnapshot -h

Dahingehend habe ich mein Skript angepasst um mehre Container nacheinander zu Sichern:

 

Als Anfänger kann man sich grob an meiner Anleitung für das Pi Image Backup langhangeln.

 

Folgende Dinge sind vorab zu beachten:

-Backup Share oder Unterordner (falls gewünscht) im Share erstellen.

-Bitte nur die Variablen Anpassen:

  • LCX_CONT_NAMES: Alle zu sichernden Container durch Kommata getrennt eintragen
  • BACKUP_PATCH: Pfad zum Backup Share. Der Ordner muss vorher angelegt werden. Unterordner mit dem Namen des Containers werden automatisch erstellt.
  • COM_LVL: Stärker der Kompression.
    0 = niedrig, bis 9 = hoch. !!ACHTUNG!!! 7 bis 9 benötigt bis zu 12GB RAM!!
  • BACKUP_COUNT: Anzahl der zu erhaltenen Backups. Das älteste wird gelöscht.
  • CPU_THREADS: Anzahl der genutzten CPU Threads (nicht Kerne). Wer hier nicht weiß, was er tut, lässt den Wert auf "default" stehen. Bei "default" werden 50% der System-Threads genutzt.
  • USE_SNAPS:
    0 = Es wird eine Sicherung des Containerimage OHNE Snapshots gemacht. Der Container ist während des kompletten Sicherungsvorgang offline/gestoppt.
    1 = Der Container wird zur Erstellung einen Snapshots gestoppt. Danach wird der Container gestartet und der Snapshot wird gesichert. Das KANN den Vorteil haben, dass der Container schneller wieder gestartet wird/online geht.

 

!!ACHTUNG!!

Die Verwendung des Kompressions-Levels von 7 - 9 kann in einer hohen RAM Auslastung von bis zu 12GB resultieren!

Bitte mit Vorsicht nutzen!

 

#!/bin/bash

###LXC Container Backup###
###V1.2
###https://forums.unraid.net/topic/142807-anleitung-lxc-backup-per-user-script/
##########################



#variables
LXC_CONT_NAMES="CONTAINER1,CONTAINER2,CONTAINER3" #Name der zu sichernden Container getrennt durch ein Komma ohne Leerzeichen
BACKUP_PATH="/mnt/user/YOUR-BACKUP-SHARE"   #Pfad zum Backup Share
BACKUP_COUNT="5"    #Anzahl der zu erhaltenen Backups
COMP_LVL="6"    #Compressions Level (0 - 9 ACHTUNG! 7-9 benötigt bis zu 12GB RAM)
CPU_THREADS="default"   #Anzahl der zu nutzenden CPU Threads (0 = ALLE / default = haelfte)
USE_SNAP="1"    #Snapshot verwenden (1 = aktiviert, 0 = deaktiviert)

#splitt Containernames
IFS=',' read -ra CONTAINERS <<< "$LXC_CONT_NAMES"

#backup
for container in "${CONTAINERS[@]}"; do
  if [ "$USE_SNAP" -eq 1 ]; then
    if [ "$CPU_THREADS" = "default" ]; then
      lxc-autobackup -s -n="$container" -p="$BACKUP_PATH" -b="$BACKUP_COUNT" -c="$COMP_LVL"
    else
      lxc-autobackup -s -n="$container" -p="$BACKUP_PATH" -b="$BACKUP_COUNT" -c="$COMP_LVL" -t="$CPU_THREADS"
    fi
  else
    if [ "$CPU_THREADS" = "default" ]; then
      lxc-autobackup -n="$container" -p="$BACKUP_PATH" -b="$BACKUP_COUNT" -c="$COMP_LVL"
    else
      lxc-autobackup -n="$container" -p="$BACKUP_PATH" -b="$BACKUP_COUNT" -c="$COMP_LVL" -t="$CPU_THREADS"
    fi
  fi
done

 

Ursprüngliches Skript:

Spoiler

Der Inhalt des Backups ist der Container selbst, die erstellten Snapshots und die Config.

Das Skript lastet den Server recht stark aus, dafür ist die Komprimierung sehr platzsparend.

Hinzu kommt eine recht hohe RAM Auslastung von circa 12GB.

 

Als Anfänger kann man sich grob an meiner Anleitung für das Pi Image Backup langhangeln.

 

#!/bin/bash

###LXC Container Backup###
###V1.1
###https://forums.unraid.net/topic/142807-anleitung-lxc-backup-per-user-script/
##########################


#variables
LXC_CONT_NAME="CONTAINER NAME"				#LXC Container Name aus dem UI
BACKUP_PATH="/mnt/user/YOUR-BACKUP-SHARE"	#Pfad zum Backup Share
BACKUP_COUNT="5"							#Anzahl der zu erhaltenen Backups
CPU_THREADS="all" 							#Anzahl der zu nutzenden CPU Threads (Nummer oder "all")


#dont change
DATE="$(date +%Y%m%d)"
REAL_BACKUP_PATH="$(realpath -s ${BACKUP_PATH})"

#check LXC setup
LXC_PATH=$(cat /boot/config/plugins/lxc/lxc.conf | grep "lxc.lxcpath=" | cut -d '=' -f2-)

#stop + backup
lxc-stop -n ${LXC_CONT_NAME}
umount ${LXC_PATH}/${LXC_CONT_NAME}/rootfs 2>/dev/null
cd ${LXC_PATH}/${LXC_CONT_NAME}
mkdir -p ${REAL_BACKUP_PATH}/${LXC_CONT_NAME}
if [ ${CPU_THREADS} != "all" ]; then
  tar -cf - . | xz -9 --threads=${CPU_THREADS} > ${REAL_BACKUP_PATH}/${LXC_CONT_NAME}/${LXC_CONT_NAME}-${DATE}.tar.xz
else
  tar -cf - . | xz -9 --threads=$(nproc --all) > ${REAL_BACKUP_PATH}/${LXC_CONT_NAME}/${LXC_CONT_NAME}-${DATE}.tar.xz
fi

#delete old backups
pushd ${REAL_BACKUP_PATH}/${LXC_CONT_NAME}; ls -tr ${REAL_BACKUP_PATH}/${LXC_CONT_NAME}/${LXC_CONT_NAME}* | head -n -${BACKUP_COUNT} | xargs rm; popd

#restart
lxc-start -n ${LXC_CONT_NAME}

 

 

 

Backup wiederherstellen:

Öffne das Terminal und nutze folgenden Befehl um die autoback Funktion aufzulisten.

lxc-autobackup -h

Hier werden die Möglichkeiten und Beispiele für die Wiederherstellung angezeigt.

 

 

Danke an @ich777 für das LXC Plugin, Inspiration, Code-Schnipsel und Hilfe!

 

Bitte berücksichtig, dass ich selbst sehr wenig Erfahrung habe, daher bin ich für Feedback und Ergänzungen sehr dankbar!

Edited by sonic6
  • Like 2
Link to comment
  • 4 months later...
50 minutes ago, Anym001 said:

@sonic6 Wie würde denn das Wiederherstellen eines solchen backups funktionieren?

 

schreib mal folgenden Command ins Terminal:

lxc-autobackup -h

@ich777 hat hier an auch an einen simplen restore per lxc-autobackup Funktion gedacht

 

 

Falls du aber ein manuell machen möchtest, hätte ich noch die Holzhammer-Methode (not-recommended):

Spoiler

Den Inhalt der .tar einfach in den Ordner des Container innerhalb deine LXC shares entpacken.
Dann würde der Container genau dem Ursprung entsprechen.

 

Du kannst aber auch einen neuen Ordner erstellen und dann die config in der .tar anpassen um einen anderen Container aus dem Backup zu erstellen.

 

Schau dir einfach mal den Inhalt deines Backup an und dem in deinem LXC share, dann wirst du recht schnell verstehen, wie simple die Wiederherstellung ist.

 

  • Like 2
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.