Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen.
Danke wenn sie uns unterstützen. Diese Seite verwendet hierzu Cookies & Tracking-Cookies, weitere Informationen finden sie hier. Wenn sie diese Seite weiterhin besuchen, erklären sie sich damit einverstanden. (Danke!)

Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen. Danke wenn sie uns unterstützen.
Diese Seite verwendet hierzu Cookies & Tracking-Cookies, weitere Informationen finden sie hier. Wenn sie diese Seite weiterhin besuchen, erklären sie sich damit einverstanden.

ext4 backup & restore

Debian/Ubuntu Linux mit einem Live-System
im Netzwerk als Image sichern.

2019-05-22 © ctaas.de, A. Schröder [Impressum]


Nr. ext4 Backup Handbuch Inhalt:
1 Linux System sichern (ext4, ext3, ext2, xfs, btrfs)
2 Linux System wiederherstellen
3 wichtige Kurztipps (einzelne Dateien wiederherstellen)

Für aktuelle Systeme mit dem ext4-Dateisystem gibt es wenige gute Sicherungsmöglichkeiten, so das ich folgende Sicherungs- und Wiederherstellungs-Scripte geschrieben habe.
Es wird dabei der Bootsektor, die Partitionierungstabelle und der komplette Inhalt der ersten Partition [/dev/sda1] gesichert bzw. wieder hergestellt.
Während der Sicherung wird ein mittels LZMA stark komprimiertes Image erstellt, welches nur die tatsächlich belegten Sektoren enthält. Erzeugte Sicherungen belegen so nur wenig Speicherplatz.
Hat man nur eine Partition "für alles", (also [/boot], [/home] und [/] root auf einer Partition), so wird hiermit das komplette System gesichert.
Die Sicherung weiterer Partitionen ist problemlos möglich.
Das Script startet man von einer beliebigen Live-CD/DVD (empfohlen wird Xubuntu). Fehlende Programme werden aus dem Internet nachgeladen.
Benötigt man ein Live-System auf einem USB-Stick, so sollte man sich das Programm Rufus mal ansehen.

Zur Sicherung wird dd und fsarchiver [1] verwendet. In dem fsarchiver-Archiv sind alle Daten durch Checksummen geschützt. Wurde ein Archiv beschädigt, so sind nur die Daten verloren die beschädigt wurden. fsarchiver unterstützt derzeit nur Linux Dateisysteme unter anderem ext2, ext3, ext4, xfs, btrfs (das Script kann man auch für diese Dateisysteme 1:1 verwenden). Archive kann man auch auf kleineren Festplatten und anderen Dateisystemen (diese kann fsarchiver erzeugen) wieder herstellen.
Des Weiteren kann man Multivolume-Archive erstellen, um diese z. B. auf DVD zu sichern.
Dual-Boot-Systeme und weitere Datenträger werden hier nicht beachtet. Man kann das hier vorgestellte Script leicht für eigene Zwecke anpassen.

1. Sicherung (backup):


nano backup.sh

Hier folgendes einfügen (Copy & Paste):
#!/bin/sh
## Debian/Ubuntu Linux - von einem Live-System aus in einer Netzwerkfreigabe - sichern:
##
## Das ext4-Dateisystem wird voll unterstützt. Die Sicherung muss von einem
## Live-System (USB/CD/DVD) aus erfolgen, da nur so alles 100 % gesichert werden kann.
## Eine ausführliche Parameterbeschreibung findet man unter: https://ctaas.de/linux-install.htm
## 2018 © Computertechnik Schröder, Arno Schröder, Kahla

## BACKUP - Die folgenden Angaben muss man anpassen:
serverip=192.168.0.100 # IP-Adresse des Servers auf den gesichert wird.
freigabe=post          # Freigabe auf dem Sicherungsserver.
username=admin         # Benutzername für den Login auf dem Sicherungsserver.
passwort=Qbttxpsu      # Passwort zum Login auf dem Sicherungsserver.
srv_name=ServerName    # Sicherungsserver PC-Name (Hostname) oder Windows-Domänenname (optional).

bck_name=$(hostname)   # Computername des zu sichernden PCs (ändern).

# Sicherungsdatum automatisch ermitteln:
datum=$(date +"%Y-%m-%d")

## Netzwerk verbinden:
# Verzeichnis zum einhängen anlegen:
mkdir /mnt/LAN
# Paketquellen aktualisieren und notwendige Pakete installieren: [cifs] zum mounten, [fsarchiver] (filesystem archiver) das Sicherungsprogramm.
apt-get update; apt-get install cifs-utils fsarchiver -y
# Die Netzwerkfreigabe einhängen (mounten):
mount -v -t cifs //$serverip/$freigabe /mnt/LAN/ -o rw,username=$username,password=$passwort,domain=$srv_name,vers=2.1
# Mit [vers=...] legt man die zu verwendende SMB-Protokoll Version für den Backup Server fest (1, 2, 3).
# vers=1.0   = für Windows XP, Windows Server 2003 (R2), FritzBox.
# vers=2.0   = für Windows Vista ab SP1, Windows Server 2008 (bzw. vers=2.0.2).
# vers=2.1   = für Windows 7, Windows Server 2008 R2.
# vers=3.0   = für Windows 8, Windows Server 2012.
# vers=3.02  = für Windows 8.1, Windows Server 2012 R2.
# vers=3.1.1 = für Windows 10, Windows Server 2016.
# Hat man eine falsche Version angegeben, so erhält man ggf. den Fehler: [mount error(112): Host is down] und das mounten der Netzwerkfreigabe schlägt fehl.

# Überprüfen ob die Netzwerkfeigabe korrekt gemountet wurde: [$?] enthält den ErrorLevel/exit code vom Befehl mountpoint:
mountpoint /mnt/LAN; if [ $? = 0 ]; then echo "mount: OK"; else echo "mount error: Zugangsdaten oder Netzwerkverbindung fehlerhaft"; exit 13; fi

# Sicherungsverzeichnis anlegen:
mkdir /mnt/LAN/Backup/$bck_name/ -p

## Die eigentliche Sicherung starten:
# 1. Sichert nur den MBR (GRUB 2 Bootloader):
dd if=/dev/sda of=/mnt/LAN/Backup/$bck_name/$datum.mbr_grub_only.img bs=446 count=1

# if Abfrage ob GPT oder MBR Laufwerk:
if sgdisk -p /dev/sda | grep "Found invalid GPT and valid MBR"
 then
 # 2. wenn kein GPT gefunden wurde, dann MBR-Partitionstabellen sichern.
 # sfdisk -d /dev/sda > /mnt/LAN/Backup/$bck_name/$datum.mbr-part-table.mpt # Alternative Variante.
 dd if=/dev/sda of=/mnt/LAN/Backup/$bck_name/$datum.full_mbrgrub_2048.img bs=512 count=2048

 else
 # 2. sonst GPT-Partitionstabellen (GUID-Partition-Table) sichern,
 # (neue Datenträger gemäß der EFI-Spezifikation - insbesondere alle Datenträger über 2 TB):
 sgdisk -b /mnt/LAN/Backup/$bck_name/$datum.gpt-table.gpt /dev/sda
fi

# 3. zu sichernde Laufwerke aushängen (/dev/sda1 ...) & Bildschirm-Energiesparmodus ausschalten:
umount /dev/sd*; xset s off -dpms

# 4a. die Anzahl der CPU threads/cores ermitteln, um das Erstellen des Archives zu beschleunigen. [siblings] (Geschwister), die Anzahl der CPU threads.
threads=$(egrep -c siblings /proc/cpuinfo)

# 4b. Inhalt des Dateisystems (alle Programme, Daten, usw.) in einem Multivolume-Archiv gepackt sichern.
time fsarchiver savefs -j$threads -s4300 -v -z7 /mnt/LAN/Backup/$bck_name/$datum.sda1_archiv.fsa /dev/sda1

# Alternative Variante: Bei separater '/dev/sda1' 'grub2 core.img' '1.00 MiB' 'bios_grub' 'BIOS boot' Partition.
## time dd if=/dev/sda1 of=/mnt/LAN/Backup/$bck_name/$datum.sda1.full_dd.img
## time fsarchiver savefs -j$threads -s4300 -v -z7 /mnt/LAN/Backup/$bck_name/$datum.sda2_archiv.fsa /dev/sda2

# Parameterbeschreibung:
# [savefs] = (save device filesystem), Dateisystem sichern, der Typ (ob ext2, ext3, ext4, xfs oder btrfs) wird automatisch erkannt.
# [-j]     = (jobs), bestimmt die Anzahl der threads zum packen/entpacken (z. B. -j2). Die optimale Anzahl wird unter dem Punkt 4a automatisch ermittelt.
# [-s4300] = (split), das Archiv in mehrere MB große Teile zerlegen. Die 4300 MB entsprechen hierbei einer Standard-DVD.
#            Bei Sicherungen auf FAT32 formatierten NAS-Laufwerken/Freigaben, muss man hier eine kleinere Dateigröße eingegeben (maximal 4096 MB).
# [-v]     = (verbose), ausführliche Anzeige.
# [-z9]    = (kleines 'z'), bestimmt den Level der Komprimierung, Werte von 0-9 sind möglich. Im täglichen produktiven Betrieb wird Stufe 7 empfohlen.
#            Bei Stufe 8 verdoppelt sich die Packdauer, bei Stufe 9 (maximale LZMA-Komprimierung) verdreifacht sich diese, immer im Bezug auf Stufe 7.
#            In der Stufe 8 oder 9 erstellte Archive sind immer kleiner als mit dem ZStandard erstellte Archive (LZMA packt also langsamer und besser).

# optionale Parameter:
# [time]   = (Zeit), misst Dauer, wie lange die Sicherung gedauert hat.
# [-o]     = (overwrite), eine bereits bestehende Sicherung überschreiben.
# [-cP@sSw0Rd]   = (cryptpass), Sicherungsimage mit einem Passwort verschlüsseln (ohne Leerzeichen).
# [-a] bzw. [-A] = (allow), eingehängte (gemountete) Partitionen sichern (nicht empfohlen).
# [-Z22]   = (großes 'Z'), bestimmt den Level der Komprimierung vom neuen Komprimierungsstandard Zstandard 'zsdt', Werte von 1-22 sind möglich.
#            Der neue Standard ist erst ab der FSArchiver Version 0.8.4 oder höher verfügbar (ab Xubuntu 18.04/bionic bzw. Debian 10/buster).
#            Verwendet man [-Z22], so wird das Archiv meist geringfügig kleiner als bei dem alten Parameter [-z7], die Sicherungsdauer ist in etwa gleich.
#            Im produktiven Betrieb kann man also [-z7] problemlos weiterverwenden (ist bereits so angegeben), alternativ würde ich nur [-Z22] empfehlen.

# 5. optional: SHA256-Prüfsummen zur aktuellen Sicherung erzeugen, um später die Integrität der Archive zu testen zu können:
echo ✱✱✱ Backup abgeschlossen. Erzeuge nur noch SHA-256 Checksummen.; cd /mnt/LAN/Backup/$bck_name; sha256sum $datum.* >$datum.checksum.txt.sha

Das Script ausführbar machen und starten:
chmod +x backup.sh
sudo ./backup.sh

2. Wiederherstellung (restore):


nano restore.sh

Hier folgendes einfügen (Copy & Paste):
#!/bin/sh
## Debian/Ubuntu Linux - von einem Live-System aus einer Netzwerkfreigabe - wiederherstellen:
##
## Das ext4-Dateisystem wird voll unterstützt. Die Rücksicherung muss von einem
## Live-System (USB/CD/DVD) aus erfolgen, da nur so alles zu 100 % wieder hergestellt werden kann.
## Eine ausführliche Parameterbeschreibung findet man unter: https://ctaas.de/linux-install.htm
## 2019 © Computertechnik Schröder, Arno Schröder, Kahla

## RESTORE - Die folgenden Angaben muss man anpassen:
serverip=192.168.0.100 # IP-Adresse, des Servers, wo liegen die Sicherungen.
freigabe=post          # Freigabe auf dem Sicherungsserver.
username=admin         # Benutzername für den Login auf dem Sicherungsserver.
passwort=Qbttxpsu      # Passwort zum Login auf dem Sicherungsserver.
srv_name=ServerName    # Sicherungsserver PC-Name (Hostname) oder Windows-Domänenname (optional).

bck_name=BackupName    # Computername der Sicherung, was wird wiederhergestellt.
bck_date=2019-05-22    # Die Sicherung von welchem Datum wird wiederhergestellt.

## Netzwerk verbinden:
# Verzeichnis zum einhängen anlegen:
mkdir /mnt/LAN
# Paketquellen aktualisieren und notwendige Pakete installieren: [cifs] zum mounten, [fsarchiver] (filesystem archiver) das Sicherungsprogramm.
apt-get update; apt-get install cifs-utils fsarchiver -y
# Die Netzwerkfreigabe einhängen (mounten):
mount -v -t cifs //$serverip/$freigabe /mnt/LAN/ -o rw,username=$username,password=$passwort,domain=$srv_name,vers=2.1
# Mit [vers=...] legt man die zu verwendende SMB-Protokoll Version für den Backup Server fest.
# vers=1.0 (XP, Srv 2003, FritzBox), vers=2.0 (Vista ab SP1, Srv 2008), vers=2.1 (Win 7, Srv 2008 R2),
#
vers=3.0 (Win 8, Srv 2012), vers=3.02 (Win 8.1, Srv 2012 R2), vers=3.1.1 (Win 10, Srv 2016).

# Überprüfen ob die Netzwerkfeigabe korrekt gemountet wurde:
mountpoint /mnt/LAN; if [ $? = 0 ]; then echo "mount: OK"; else echo "mount error: Zugangsdaten oder Netzwerkverbindung fehlerhaft"; exit 13; fi

# Überprüfen ob das entsprechende Backup Verzeichnis existiert (bck_name):
if [ -d /mnt/LAN/Backup/$bck_name ]; then echo "Backup Verzeichnis gefunden: OK"; else echo "backup name error: bck_name fehlerhaft"; exit 13; fi

# Überprüfen ob eine Sicherung vom angegebenen Sicherungsdatum vorhanden ist (bck_date):
if [ -f /mnt/LAN/Backup/$bck_name/$bck_date.checksum.txt.sha ]; then echo "Sicherungsdatum: OK"; else echo "date error: bck_date falsches Sicherungsdatum $bck_date"; exit 13; fi

# swapping deaktivieren - es kann sonst passieren das, das Live-System die swap-Partition verwendet und so ein Rücksichern verhindert.
swapoff -a

## Die eigentliche Wiederherstellung starten:
# 1. Den MBR (GRUB 2 Bootloader) wieder herstellen:
dd if=/mnt/LAN/Backup/$bck_name/$bck_date.mbr_grub_only.img of=/dev/sda bs=446 count=1

# 2a. Die MBR-Partitionstabelle zurücksichern (wenn vorhanden) ...
# sfdisk /dev/sda < /mnt/LAN/Backup/$bck_name/$bck_date.mbr-part-table.mpt 2>/dev/null # Alternative Variante.
dd if=/mnt/LAN/Backup/$bck_name/$bck_date.full_mbrgrub_2048.img of=/dev/sda bs=512 count=2048 2>/dev/null

# 2b. ... oder (load backup) die GPT Partitionstabelle wieder herstellen (wenn vorhanden):
sgdisk -l /mnt/LAN/Backup/$bck_name/$bck_date.gpt-table.gpt /dev/sda 2>/dev/null

# 2c. die geänderte Partitionstabelle neu einlesen (dem System bekannt machen):
sleep 15; hdparm -z /dev/sda 2>/dev/null; sfdisk -R /dev/sda 2>/dev/null # 1. für Ubuntu, 2. für Debian:

# Kurz warten und eventuell durchs automount geöffnete Fenster wieder schließen & Bildschirm-Energiesparmodus ausschalten:
echo 30 Sekunden warten ...; sleep 30; killall Thunar; xset s off -dpms

# 3. ggf. gemountete Laufwerke aushängen:
umount /dev/sd* # /dev/sda1 ...

# 4a. die Anzahl der CPU threads/cores ermitteln, um das Wiederherstellen des Archives zu beschleunigen. siblings = Anzahl der CPU threads.
threads=$(egrep -c siblings /proc/cpuinfo)

# 4b. Erstes Dateisystem (id=0) vom Archiv auf /dev/sda1 wieder herstellen.
# id = bestimmt die Nummer vom Dateisystem falls man mehrere Dateisysteme
# in einem Archiv gesichert hat (begonnen wird bei 0).
fsarchiver restfs -j$threads -v /mnt/LAN/Backup/$bck_name/$bck_date.sda1_archiv.fsa id=0,dest=/dev/sda1
# Optional: Rücksicherung und Dateisystem konvertieren z. B. in ext4, xfs (anpassbar).
# fsarchiver restfs -v /mnt/LAN/Backup/$bck_name/$bck_date.sda1_archiv.fsa id=0,dest=/dev/sda1,mkfs=ext4

# Alternative Variante: Bei separater '/dev/sda1' 'grub2 core.img' '1.00 MiB' 'bios_grub' 'BIOS boot' Partition.
## dd if=/mnt/LAN/Backup/$bck_name/$bck_date.sda1.full_dd.img of=/dev/sda1
## fsarchiver restfs -j$threads -v /mnt/LAN/Backup/$bck_name/$bck_date.sda2_archiv.fsa id=0,dest=/dev/sda2

echo ✱✱✱ Restore abgeschlossen.

Das Script ausführbar machen und starten:
chmod +x restore.sh
./restore.sh

3. Sonstiges:


fsarchiver archinfo Archiv.fsa
# Informationen zum Archiv anzeigen.
fsarchiver restdir Archiv.fsa /tmp/extract
# entpackt die Daten ins angegebene Verzeichnis (einzelne Dateien wiederherstellen).
fsarchiver -v
# kurze Hilfe anzeígen.
man fsarchiver
# (manpages) ausführliche Hilfe anzeigen.

❑  Abschließende Hinweise:


Setzt man noch zusätzlich andere Dateisysteme wie z. B. NTFS, FAT32, exFAT usw. ein, so muss man das Skript hier entsprechend selbst ergänzen. Für Windows Partitionen mit NTFS bzw. FAT32 empfehle ich folgendes Skript.
Die Wiederherstellung klappt auch auf einer neuen leeren Festplatte oder einem neuem kompatiblen System, da sowohl der Bootsektor, die Partitionstabelle sowie alle Daten wieder restauriert werden. Achtung: Bei einer Wiederherstellung werden alle zuvor vorhandene Daten überschrieben, also gelöscht.
Man kann mit diesen Skripten neben Debian & Ubuntu problemlos auch andere fremde Systeme wie z. B. Xubuntu, Ubuntu Mate, Kubuntu, Lubuntu, Linux Mint, Manjaro, Fedora, openSuse, Arch Linux, FreeBSD usw. sichern & wiederherstellen.

Die Nutzung der Anleitung erfolgt auf eigene Gefahr, für jegliche Schäden wird keine Garantie/Haftung übernommen!
IP-Adressen, E-Mailadressen, Namen u. ä. wurden für die Dokumentation geändert, hacken ist also zwecklos.
Die Dokumentation entstand aus verschiedenen Tests unter: Ubuntu 14.04, 16.04, 16.10, 17.04, 17.10, 18.04, 18.10, 19.04 und unter Debian 8 und 9, sowie produktiven Installationen.
Bevor sie eventuell Fragen stellen bitte ich sie die Dokumentation komplett zu lesen. Hinweise auf Fehler, Anregungen, Danksagungen oder ähnliches sind immer willkommen.

Design:
© ctaas.de, Arno Schröder, Kahla [Impressum]