Proxmox

Physische Server mit Proxmox Backup Server sichern und als VM wiederherstellen

Physische Linux-Server mit dem proxmox-backup-client in einen PBS-Datastore sichern: Einrichtung, Backup-Skript mit Service-Handling und die Wiederherstellung als VM auf Proxmox VE.

Thomas 26. Juli 2026 5 Min. Lesezeit 2 Aufrufe 26. Juli 2026

Übersicht

Proxmox Backup Server (PBS) kann nicht nur VMs und Container sichern. Mit dem proxmox-backup-client lassen sich auch physische Linux-Server auf Datei- und Blockebene in einen PBS-Datastore sichern. Das Beste daran: Fällt die Hardware aus, kann das Backup direkt als VM auf einem Proxmox VE Host wiederhergestellt werden.

Ablauf: Physischer Host, PBS, Restore als VM auf PVE

Dieser Artikel zeigt die komplette Einrichtung: Benutzer und Berechtigungen auf dem PBS, Client-Installation auf dem Host, ein Backup-Skript mit sauberem Service-Handling und die Wiederherstellung als VM.

Beispielwerte im Artikel (an die eigene Umgebung anpassen):

Wert Beispiel
PBS-Server 192.168.1.20:8007
Datastore backup01
Backup-Benutzer backup@pbs
Zu sichernder Host webserver01
PVE ZFS-Pool / Storage rpool/data / local-zfs

1. Vorbereitung auf dem PBS

1.1 Backup-Benutzer anlegen

Der Benutzer wird im PBS-eigenen Realm @pbs angelegt, nicht als Linux-Benutzer mit useradd:

proxmox-backup-manager user create backup@pbs --password 'SicheresPasswort'

1.2 Berechtigung auf den Datastore setzen

Die Rolle DatastoreBackup erlaubt das Erstellen von Backups und das Lesen der eigenen Snapshots:

proxmox-backup-manager acl update /datastore/backup01 DatastoreBackup --auth-id backup@pbs

1.3 Zertifikats-Fingerprint notieren

Den Fingerprint braucht der Client später zur Verifizierung des Servers:

proxmox-backup-manager cert info | grep Fingerprint

2. PBS-Client auf dem Host installieren

Auf Debian 12 (Bookworm):

wget -qO- https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg \
  | gpg --dearmor -o /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

echo "deb http://download.proxmox.com/debian/pbs-client bookworm main" \
  > /etc/apt/sources.list.d/pbs-client.list

apt update
apt install proxmox-backup-client

Für Debian 13 (Trixie) einfach bookworm durch trixie ersetzen.

3. Konfiguration auf dem Host

3.1 Passwort-Datei anlegen

Das Passwort landet in einer eigenen Datei, die nur root lesen kann. Es gehört ausdrücklich nicht nach /etc/environment, denn diese Datei ist für alle Benutzer lesbar.

mkdir -p /etc/pbs
echo 'SicheresPasswort' > /etc/pbs/pwfile
chmod 600 /etc/pbs/pwfile

3.2 Verbindungsdaten anlegen

nano /etc/pbs/backup.env
PBS_REPOSITORY='backup@pbs@192.168.1.20:backup01'
PBS_FINGERPRINT='aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99'
chmod 600 /etc/pbs/backup.env

Das Repository-Format ist benutzer@realm@server:datastore. Ein abweichender Port wird als server:port:datastore angegeben.

3.3 Backup-Skript

Das Skript sichert standardmäßig das komplette Root-Dateisystem als root.pxar-Archiv. Optional kann zusätzlich ein Roh-Image der Disk gesichert werden. Dienste wie Datenbanken werden vorher gestoppt und danach wieder gestartet. Wichtig dabei: Der Neustart der Dienste läuft über einen trap und passiert damit auch dann, wenn das Backup fehlschlägt.

nano /usr/local/sbin/pbs-backup.sh
#!/usr/bin/env bash
set -euo pipefail

ENV_FILE='/etc/pbs/backup.env'
PWFILE='/etc/pbs/pwfile'

# Roh-Image der Disk sichern?
DO_IMAGE=false
DISK_DEVICE='/dev/sda'
DISK_IMAGE_NAME='disk-sda.img'

# Datei-Level-Backup aktivieren?
DO_FOLDER=true
FOLDER_PATHS=( "/" )

# Dienste vor dem Backup stoppen und danach wieder starten?
USE_SERVICES=true
SERVICES=( "nginx" "mariadb" )

usage() {
  cat <<EOF
Usage: $0 [OPTIONS]

  --image         Roh-Image von ${DISK_DEVICE} sichern
  --no-image      kein Roh-Image sichern
  --folder        Verzeichnis-Backup (${FOLDER_PATHS[*]})
  --no-folder     kein Verzeichnis-Backup
  --no-services   Dienste nicht stoppen/starten
  -h, --help      Hilfe anzeigen
EOF
  exit 1
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    --image)       DO_IMAGE=true ;;
    --no-image)    DO_IMAGE=false ;;
    --folder)      DO_FOLDER=true ;;
    --no-folder)   DO_FOLDER=false ;;
    --no-services) USE_SERVICES=false ;;
    -h|--help)     usage ;;
    *) echo "Unbekannte Option: $1" >&2; usage ;;
  esac
  shift
done

if ! $DO_IMAGE && ! $DO_FOLDER; then
  echo "FEHLER: weder Image- noch Verzeichnis-Backup aktiviert" >&2
  usage
fi

[[ -r $ENV_FILE ]] || { echo "FEHLER: $ENV_FILE nicht lesbar" >&2; exit 1; }
source "$ENV_FILE"

[[ -n ${PBS_REPOSITORY:-} ]] || { echo "FEHLER: PBS_REPOSITORY nicht gesetzt" >&2; exit 1; }
[[ -r $PWFILE ]] || { echo "FEHLER: $PWFILE nicht lesbar" >&2; exit 1; }
PBS_PASSWORD="$(<"$PWFILE")"
export PBS_PASSWORD PBS_REPOSITORY
if [[ -n ${PBS_FINGERPRINT:-} ]]; then
  export PBS_FINGERPRINT
fi

# Gestoppte Dienste werden auch bei einem Fehler im Backup wieder gestartet
STOPPED_SERVICES=()
start_services() {
  local svc
  for svc in "${STOPPED_SERVICES[@]}"; do
    systemctl start "$svc" || echo "WARNUNG: $svc konnte nicht gestartet werden" >&2
  done
  STOPPED_SERVICES=()
}
trap start_services EXIT

if $USE_SERVICES; then
  for svc in "${SERVICES[@]}"; do
    if systemctl is-active --quiet "$svc"; then
      systemctl stop "$svc"
      STOPPED_SERVICES+=("$svc")
      echo "Dienst gestoppt: $svc"
    fi
  done
fi

specs=()
opts=()

if $DO_FOLDER; then
  for path in "${FOLDER_PATHS[@]}"; do
    name="$(basename "$path" | tr '/' '-')"
    [[ -z $name || $name == "-" ]] && name="root"
    specs+=("${name}.pxar:${path}")
  done
  opts+=(
    --exclude /dev
    --exclude /proc
    --exclude /sys
    --exclude /run
    --exclude /tmp
    --exclude /var/tmp
    --exclude /var/cache
    --exclude /mnt
    --exclude /media
  )
fi

if $DO_IMAGE; then
  specs+=( "${DISK_IMAGE_NAME}:${DISK_DEVICE}" )
fi

echo "Starte Backup nach ${PBS_REPOSITORY}"
echo "Archive: ${specs[*]}"

proxmox-backup-client backup "${specs[@]}" "${opts[@]}"

echo "Backup abgeschlossen"
chmod +x /usr/local/sbin/pbs-backup.sh

Erster Testlauf:

/usr/local/sbin/pbs-backup.sh

3.4 Automatisieren per Cron

echo '0 3 * * * root /usr/local/sbin/pbs-backup.sh >>/var/log/pbs-backup.log 2>&1' > /etc/cron.d/pbs-backup

4. Ein Wort zur Konsistenz

Das Datei-Level-Backup (root.pxar) ist der Normalfall und liefert mit gestoppten Diensten konsistente Ergebnisse. Ein Roh-Image (--image) von einer gemounteten, aktiven Root-Partition ist dagegen prinzipbedingt nicht konsistent, auch wenn es in der Praxis oft funktioniert. Wer ein sauberes Image will, bootet den Host von einem Live-System und sichert die Disk im ungemounteten Zustand. Für die Wiederherstellung als VM reicht in den meisten Fällen aber das Datei-Level-Backup in Kombination mit einer frischen Partitionierung, oder eben ein Image-Backup mit dem Wissen um dessen Einschränkung.

5. Wiederherstellung als VM auf Proxmox VE

5.1 Snapshots auflisten

Auf dem PVE-Host (der proxmox-backup-client ist dort bereits installiert):

export PBS_REPOSITORY='backup@pbs@192.168.1.20:backup01'
export PBS_PASSWORD_FILE='/etc/pbs/pwfile'
proxmox-backup-client snapshot list

5.2 Zvol und VM anlegen

Die Größe muss mindestens der Original-Disk entsprechen:

zfs create -V 100G rpool/data/vm-300-disk-0

qm create 300 --name restored-webserver01 --memory 4096 --cores 2 \
  --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --onboot 0
qm set 300 --scsi0 local-zfs:vm-300-disk-0
qm set 300 --boot order=scsi0

Hat der physische Host mit UEFI gebootet, braucht die VM zusätzlich --bios ovmf und eine EFI-Disk.

5.3 Image auf das Zvol schreiben

export PBS_REPOSITORY='backup@pbs@192.168.1.20:backup01'
export PBS_PASSWORD_FILE='/etc/pbs/pwfile'

proxmox-backup-client restore \
  "host/webserver01/2026-07-20T03:00:00Z" \
  disk-sda.img - \
  | dd of=/dev/zvol/rpool/data/vm-300-disk-0 bs=4M status=progress oflag=direct

Der Snapshot-Pfad hat das Format host/<hostname>/<zeitstempel>, der Zeitstempel kommt aus snapshot list.

5.4 Datei-Level-Restore

Einzelne Verzeichnisse oder Dateien lassen sich aus dem pxar-Archiv wiederherstellen, ohne ein Image zu benötigen:

proxmox-backup-client restore "host/webserver01/2026-07-20T03:00:00Z" root.pxar /mnt/restore

Alternativ kann das Archiv mit proxmox-backup-client mount read-only eingehängt werden, um gezielt einzelne Dateien herauszukopieren.

Fazit

Mit einem Benutzer, zwei Konfigurationsdateien und einem Skript sichert der PBS auch physische Hosts, dedupliziert und verschlüsselbar wie bei VM-Backups. Der eigentliche Gewinn zeigt sich im Ernstfall: Statt neue Hardware zu beschaffen, läuft der Server nach wenigen Minuten als VM auf dem PVE weiter.

Kommentare

0

Noch keine Kommentare. Sei der Erste!

Kommentar schreiben

Kommentare werden vor der Veröffentlichung geprüft.