134 lines
4.1 KiB
Markdown
134 lines
4.1 KiB
Markdown
# Libvirt-VM-Backup und Restore
|
|
|
|
## Voraussetzungen
|
|
|
|
Auf dem Ubuntu-Host:
|
|
|
|
```bash
|
|
sudo apt install rsync libvirt-clients qemu-utils python3
|
|
```
|
|
|
|
Auf dem Debian-Ziel:
|
|
|
|
```bash
|
|
sudo apt install qemu-system-x86 qemu-utils libvirt-daemon-system \
|
|
libvirt-clients ovmf swtpm swtpm-tools rsync python3
|
|
```
|
|
|
|
## Backup
|
|
|
|
1. Windows vollständig herunterfahren.
|
|
2. BitLocker-Recovery-Keys separat sichern.
|
|
3. Backup-Datenträger einhängen.
|
|
4. Skript starten:
|
|
|
|
```bash
|
|
chmod +x libvirt-backup.sh libvirt-restore.sh
|
|
sudo ./libvirt-backup.sh /mnt/backup/libvirt-host
|
|
```
|
|
|
|
Prüfen:
|
|
|
|
```bash
|
|
cd /mnt/backup/libvirt-host
|
|
sha256sum -c metadata/SHA256SUMS
|
|
cat metadata/block-sources.txt
|
|
cat metadata/missing-files.txt
|
|
```
|
|
|
|
`block-sources.txt` muss leer sein, sofern keine LVM-/Block-Devices verwendet
|
|
werden. Enthaltene Blockgeräte sind zusätzlich separat zu sichern.
|
|
|
|
## Restore
|
|
|
|
Auf Debian zunächst libvirt/QEMU installieren und den Backup-Datenträger
|
|
einbinden:
|
|
|
|
```bash
|
|
sudo ./libvirt-restore.sh /mnt/backup/libvirt-host
|
|
```
|
|
|
|
Standardmäßig überschreibt das Skript keine vorhandenen Dateien oder
|
|
libvirt-Definitionen. Für eine bewusst erzwungene Wiederherstellung:
|
|
|
|
```bash
|
|
sudo OVERWRITE_FILES=1 REPLACE_DEFINITIONS=1 \
|
|
./libvirt-restore.sh /mnt/backup/libvirt-host
|
|
```
|
|
|
|
Autostart für importierte Objekte setzen:
|
|
|
|
```bash
|
|
sudo AUTOSTART_OBJECTS=1 ./libvirt-restore.sh /mnt/backup/libvirt-host
|
|
```
|
|
|
|
Exportierte Host-Interfaces/Bridges werden aus Sicherheitsgründen nicht
|
|
automatisch definiert. Das ist bewusst separat:
|
|
|
|
```bash
|
|
sudo RESTORE_INTERFACES=1 ./libvirt-restore.sh /mnt/backup/libvirt-host
|
|
```
|
|
|
|
Bei Bridges ist es häufig besser, die Netzwerkkonfiguration auf Debian mit
|
|
NetworkManager oder systemd-networkd neu aufzubauen.
|
|
|
|
## Wichtige Grenzen
|
|
|
|
- Offline-Backup: Die VMs müssen ausgeschaltet sein.
|
|
- File-basierte Images, UEFI-NVRAM und dateibasierte TPM-Zustände werden kopiert.
|
|
- LVM-LVs, ZFS-ZVOLs, Ceph/RBD, iSCSI und sonstige Block-/Netzwerk-Storage-
|
|
Quellen werden nur dokumentiert.
|
|
- Snapshot-Backing-Chains werden nicht automatisch aufgelöst. Referenzierte
|
|
Backing-Dateien müssen selbst als Disk-Quelle in der Konfiguration vorkommen
|
|
oder zusätzlich gesichert werden.
|
|
- Firmwarepfade können sich zwischen Ubuntu und Debian unterscheiden. Bei
|
|
OVMF-Fehlern das Domain-XML und die auf Debian installierten Firmwaredateien
|
|
prüfen.
|
|
- Nach dem Restore zuerst nur eine VM starten und insbesondere UEFI, virtuelles
|
|
TPM, Secure Boot, BitLocker und Netzwerk testen.
|
|
|
|
## PAW-Netzwerk aus `50-paw-install.yml` (Version 1.2)
|
|
|
|
Das Paket sichert jetzt zusätzlich die vom Playbook verwendete Konfiguration:
|
|
|
|
- `/etc/NetworkManager/system-connections/`
|
|
- `/etc/NetworkManager/dispatcher.d/`
|
|
- `/etc/libvirt/qemu/networks/`
|
|
- relevante sysctl-, UFW-, Routing- und `/hilden`-Dateien
|
|
- aktuelle MAC von `br-lan`
|
|
- permanente MACs und Hardwarepfade aller physischen Interfaces
|
|
- Zuordnung der Bridge-Ports zu `br-lan`
|
|
|
|
Das alte PAW-Profil bindet die Ports fest an `eth0` und `enp2s0f0`. Beim Restore
|
|
werden diese Namen anhand der gesicherten permanenten MAC-Adressen auf die unter
|
|
Debian tatsächlich vorhandenen Gerätenamen umgesetzt. Zusätzlich wird die
|
|
bisher dynamische MAC von `br-lan` als `bridge.mac-address` im
|
|
NetworkManager-Keyfile festgeschrieben.
|
|
|
|
Empfohlene Reihenfolge auf Debian:
|
|
|
|
```bash
|
|
# 1. 50-paw-install.yml ausführen
|
|
# 2. VM- und Netzwerk-Restore vorbereiten, NetworkManager noch nicht neu starten
|
|
sudo RESTORE_PAW_NETWORK=1 ./libvirt-restore.sh /mnt/backup/libvirt-host
|
|
|
|
# 3. Profile kontrollieren
|
|
sudo grep -R -E '^(interface-name|mac-address|master)=' \
|
|
/etc/NetworkManager/system-connections/
|
|
|
|
# 4. Nur lokal an der Konsole aktivieren
|
|
sudo RESTORE_PAW_NETWORK=1 APPLY_PAW_NETWORK=1 \
|
|
./libvirt-restore.sh /mnt/backup/libvirt-host
|
|
```
|
|
|
|
Alternativ kann nur der Netzwerkteil ausgeführt werden:
|
|
|
|
```bash
|
|
sudo ./paw-network-backup.sh /mnt/backup/paw-network
|
|
sudo ./paw-network-restore.sh /mnt/backup/paw-network
|
|
sudo APPLY_NETWORK=1 ./paw-network-restore.sh /mnt/backup/paw-network
|
|
```
|
|
|
|
Der Netzwerk-Restore startet NetworkManager standardmäßig **nicht** neu. Das
|
|
verhindert einen unbeabsichtigten Verbindungsabbruch bei einem Restore per SSH.
|