Ubuntu 26.04 / Ubuntu-Konfiguration, Paketbestände und Benutzerdaten sichern

Ein Ubuntu-Backup benötigt einen definierten Umfang, einen Speicher, der unabhängig vom Ausfall der Quelle ist, und eine getestete Wiederherstellung. Eine Paketliste oder VM-Snapshot allein reichen nicht aus. Diese Lektion plant den Backup-Umfang und demonstriert die Wiederherstellung in ein separates Verzeichnis, ohne die Quelle zu überschreiben.

Entscheiden, was wiederhergestellt werden muss

Ziel Was beibehalten und überprüft werden soll
Konfiguration Geänderte /etc-Dateien, Gründe und Service-Versionen; Zugriff auf Zertifikate/Private Keys einschränken
Benutzerdateien Tatsächliche Home-/Share-Pfade, UID/GID und erforderliche Modi, ACLs und erweiterte Attribute
Anwendungsdaten Datenbank-Dumps, Volumes, Uploads, Anwendungs-Versionen und Konsistenzverfahren
Pakete Manuelle APT-Liste, vollständige Versionen, Snap-Inventory und Repository-Informationen
Wiederherstellungszugang Installationsmedien, Konsole, Entsperr-/Entschlüsselungsschlüssel und Verantwortlichkeit für die Aufbewahrung

Ein einfaches Tar einer Live-Datenbank kann Daten aus verschiedenen Zeitpunkten vermischen. Verwenden Sie einen anwendungsunterstützten Dump oder ein koordiniertes Stop-/Freeze-Verfahren und identifizieren Sie Speicher, die zusammen wiederhergestellt werden müssen. Testen Sie separat die Sicherung und Wiederherstellung von ACLs und erweiterten Attributen, wenn erforderlich.

Pakete und Konfigurationsorte aufzeichnen

Diese Befehle erstellen ein neues Inventarverzeichnis im Home-Verzeichnis des aktuellen Benutzers, ohne Pakete zu installieren oder zu entfernen. Beschränken Sie den Zugriff, da Inventare Betriebsdetails enthalten können. Sie enthalten nicht die tatsächliche Konfiguration oder Inhalte von Benutzerdateien.

(
set -eu
umask 077
inventory_dir=$(mktemp -d "$HOME/ubuntu-inventory.XXXXXX")
apt-mark showmanual > "$inventory_dir/apt-manual.txt"
dpkg-query -W -f='${binary:Package}\t${Version}\n' > "$inventory_dir/dpkg-versions.tsv"
if command -v snap >/dev/null 2>&1; then
    snap list > "$inventory_dir/snap-list.txt"
fi
cat /etc/os-release > "$inventory_dir/os-release.txt"
printf "%s\n" "$inventory_dir"
)

Überprüfen Sie vor der Wiederherstellung, welche Pakete und Repositories auf der Zielversion unterstützt und benötigt werden, anstatt die gesamte Liste blind neu zu installieren. Unterscheiden Sie Konfigurationssicherungen von maschinenspezifischen Identitäten wie machine-id, SSH-Host-Schlüsseln und statischen Adressen. Die Wiederherstellung desselben Servers unterscheidet sich vom Klonen eines anderen Servers.

Führen Sie eine kleine Backup- und Wiederherstellungsrunde durch

Speichern Sie das vollständige Skript als ~/backup-roundtrip-lab.sh und führen Sie bash ~/backup-roundtrip-lab.sh aus. Es erfordert tar, sha256sum und cmp, verwendet kein sudo und verändert nur neu erstellte Beispieldateien in einem temporären Verzeichnis. Diese Übung auf derselben Festplatte ersetzt keinen unabhängigen Backup-Speicher.

set -eu
umask 077
lab_dir=$(mktemp -d)
mkdir "$lab_dir/source" "$lab_dir/restored"
printf "original data\n" > "$lab_dir/source/note with spaces.txt"
tar -C "$lab_dir/source" -cpf "$lab_dir/data.tar" .
(
    cd "$lab_dir"
    sha256sum data.tar > data.tar.sha256
    sha256sum -c data.tar.sha256
)
tar -tf "$lab_dir/data.tar"
tar -C "$lab_dir/restored" -xpf "$lab_dir/data.tar"
cmp "$lab_dir/source/note with spaces.txt" "$lab_dir/restored/note with spaces.txt"
printf "Round trip passed: %s\n" "$lab_dir"

Die Prüfsumme überprüft, ob das Archiv mit den aufgezeichneten Bytes übereinstimmt, und das tar-Listing überprüft die Mitgliedsnamen. Ein erfolgreiches cmp gefolgt von „Round trip passed“ bestätigt die Wiederherstellung des Dateiinhalts dieses Beispiels. Es testet weder Verschlüsselung, Zugriffskontrollen noch das Starten von Anwendungen. Extrahieren Sie keine unbekannten Archive als Administrator; beginnen Sie die tatsächliche Wiederherstellung in einem isolierten leeren Verzeichnis.

Sichern Sie die echte Nginx-Konfiguration und einen Benutzerordner

Verwenden Sie /etc/nginx nach dem Nginx-Website-Konfigurations-Labor und einen gewöhnlichen Dokumentenordner in Ihrem Home-Verzeichnis. Identifizieren Sie den Ordner und pausieren Sie Bearbeitungen, Synchronisierung und Anwendungs-Schreibvorgänge für Konsistenz. Dies ersetzt keine Datenbank-Dumps oder koordinierte Volume-Backups. Notieren Sie den Mountpunkt/UUID der separaten Backup-Festplatte aus der Persistent-Mount-Lektion und überprüfen Sie, dass er vom Quellgerät unabhängig ist.

Speichern Sie das komplette Skript als ~/backup-course-data.sh. Es erfordert Bash, GNU tar, util-linux findmnt und coreutils realpath/sha256sum. Übergeben Sie den Benutzer-Datenordner, den Backup-Dateisystem-Mountpunkt und die tatsächliche UUID. Passen Sie bash ~/backup-course-data.sh "$HOME/Documents/course-data" /srv/backup TATSÄCHLICHE_UUID an verifizierte lokale Werte an.

set -eu
umask 077
if [ "$#" -ne 3 ]; then
    printf 'Usage: bash backup-course-data.sh SOURCE_DIR BACKUP_MOUNT EXPECTED_UUID\n' >&2; exit 2
fi
source_dir=$(realpath -- "$1")
backup_mount=$(realpath -- "$2")
expected_uuid=$3
case "$source_dir" in
    "$HOME"/*) ;;
    *) printf 'Choose a specific ordinary-data folder inside your home.\n' >&2; exit 1 ;;
esac
test -d "$source_dir"
if [ -z "$expected_uuid" ] || [ "$expected_uuid" = REPLACE_WITH_VERIFIED_UUID ]; then
    printf 'Record the actual backup filesystem UUID first.\n' >&2; exit 1
fi
actual_uuid=$(findmnt -rn --mountpoint "$backup_mount" -o UUID || true)
if [ "$actual_uuid" != "$expected_uuid" ]; then
    printf 'Expected backup filesystem is not mounted; stop.\n' >&2; exit 1
fi
for original in "$source_dir" /etc/nginx; do
    original_uuid=$(findmnt -rn --target "$original" -o UUID)
    if [ -z "$original_uuid" ] || [ "$original_uuid" = "$actual_uuid" ]; then
        printf 'Use a separate verified backup filesystem.\n' >&2; exit 1
    fi
done
case "$backup_mount/" in
    "$source_dir/"*) printf 'Backup must be outside the source tree.\n' >&2; exit 1 ;;
esac
sudo test -d /etc/nginx
df -h "$source_dir" "$backup_mount"
set_dir=$(sudo mktemp -d "$backup_mount/ubuntu-course-backup.XXXXXX")
sudo chmod 0700 "$set_dir"
sudo tar --acls --xattrs --numeric-owner -C / -cpf "$set_dir/nginx.tar" etc/nginx
sudo tar --acls --xattrs --numeric-owner -C "$source_dir" -cpf "$set_dir/user-data.tar" .
sudo sh -c 'cd "$1" && sha256sum nginx.tar user-data.tar > SHA256SUMS && sha256sum -c SHA256SUMS' sh "$set_dir"
printf 'Backup set: %s\n' "$set_dir"

Ein fehlender oder nicht übereinstimmender Mount stoppt vor der Archiv-Erstellung. Bei Erfolg sehen Sie den Pfad des Backup-Satzes und zwei OK-Ergebnisse der Prüfsummenprüfung. Der Modus 0700 des Backup-Verzeichnisses beschränkt den Zugriff auf root, schützt aber nicht vor einem Ausfall des Datenträgers. Planen Sie Speicherung/Verschlüsselung separat und testen Sie die Wiederherstellung von ACL/xattr auf den tatsächlichen Dateisystemen.

In einen leeren separaten Speicherort wiederherstellen und vergleichen

Verwenden Sie nur das gerade erstellte vertrauenswürdige Set. Speichern Sie dies als ~/restore-course-data.sh und führen Sie bash ~/restore-course-data.sh BACKUP_SET_DIRECTORY aus. Es extrahiert nur in ein neues /var/tmp-Verzeichnis und bewahrt die laufende Konfiguration und die Originale der Benutzer. Überprüfen Sie zuerst Kapazität und UID/GID-Zuordnungen.

set -eu
if [ "$#" -ne 1 ]; then
    printf 'Usage: bash restore-course-data.sh BACKUP_SET_DIRECTORY\n' >&2; exit 2
fi
set_dir=$(realpath -- "$1")
sudo test -f "$set_dir/SHA256SUMS"
sudo sh -c 'cd "$1" && sha256sum -c SHA256SUMS' sh "$set_dir"
restore_dir=$(sudo mktemp -d /var/tmp/ubuntu-course-restore.XXXXXX)
sudo chmod 0700 "$restore_dir"
sudo mkdir "$restore_dir/config" "$restore_dir/data"
sudo tar --acls --xattrs --same-owner -C "$restore_dir/config" -xpf "$set_dir/nginx.tar"
sudo tar --acls --xattrs --same-owner -C "$restore_dir/data" -xpf "$set_dir/user-data.tar"
sudo ls -ldn "$restore_dir/config/etc/nginx" "$restore_dir/data"
printf 'Isolated restore: %s\n' "$restore_dir"

Ersetzen Sie den gedruckten Wiederherstellungspfad und vergleichen Sie ihn mit einer unveränderten Quelle. Ein stiller Diff mit Exit 0 bedeutet, dass der Inhalt übereinstimmt; Exit 1 meldet Unterschiede. Änderungen an der Quelle nach der Sicherung begründen für sich allein keine Beschädigung. Untersuchen Sie Berechtigungen und fehlende Dateien auf andere Fehler.

restore_dir=/var/tmp/REPLACE_WITH_PRINTED_RESTORE_DIRECTORY
source_dir="$HOME/Documents/course-data"
sudo diff --no-dereference -r /etc/nginx "$restore_dir/config/etc/nginx"
sudo diff --no-dereference -r "$source_dir" "$restore_dir/data"

Vergleichen Sie wichtige Inhalte, numerische Besitzer/Modi von ls -ln und erforderliche ACLs/xattrs mit getfacl/getfattr; installieren Sie acl/attr bei Bedarf. Die Extraktion allein vervollständigt die Dienstwiederherstellung nicht. Validieren Sie Konfiguration und Anwendungsfunktionen auf einem separaten Wiederherstellungsserver vor der echten Wiederherstellung. Reinigen Sie nur das identifizierte Vergleichsverzeichnis, wenn Sie fertig sind.

Bereiten Sie unabhängigen Speicher und Fehlererkennung vor

Für eine externe Festplatte oder einen anderen Host beweist ein vorhandenes Zielverzeichnis nicht, dass der Speicher verbunden ist. Vergleichen Sie die SOURCE/UUID des Ziel-Mounts aus findmnt mit der aufgezeichneten Identität und stoppen Sie bei Abweichungen. Das Schreiben in ein nicht eingehängtes Verzeichnis kann die Systemfestplatte füllen. Planen Sie Kapazität, Entschlüsselungszugriff und externe oder offline Generationen entsprechend dem Wiederherstellungsbedarf.

Ubuntus Shell-Backup-Anleitung enthält Beispiele mit tar und die Wiederherstellung in ein anderes Verzeichnis.

Automatisieren, nachdem eine manuelle Wiederherstellung erfolgreich war. Erfassen Sie den Exit-Status, den letzten Erfolg, aufbewahrte Generationen und Speicherfehler und testen Sie den Benachrichtigungsweg. Ein neben einem beschreibbaren Archiv gespeicherter Hash bietet für sich allein keinen Manipulationsschutz; verwenden Sie unabhängige Verifizierungsaufzeichnungen oder unveränderliche Aufbewahrung, wenn erforderlich.

Beurteilen Sie die Wiederherstellung anhand von Daten- und Serviceverhalten

Überprüfen Sie am Ziel die Dateianzahlen, wichtigen Inhalte, Eigentum und Berechtigungen, und testen Sie dann Anwendungs-Lese-/Schreibvorgänge sowie Benutzeranmeldungen. Prüfen Sie gegebenenfalls DNS, Zertifikate, Freigaben und fortgesetzte Backups. Erfassen Sie die Wiederherstellungsdauer und verlorene Updates; passen Sie die Häufigkeit oder Verfahren an, wenn diese akzeptable Grenzen überschreiten. Bewahren Sie die fehlgeschlagene Quelle auf, bis die erforderlichen Nachweise und Daten gesichert sind.