Script direkt Download Links für '/dev/sda' und '/dev/nvme0n1' (es ist hier kein Copy & Paste des Scripts mehr notwendig):
wget https://ctaas.de/data/ext4_backup_sda.sh.txt -O backup.sh
# Für alte SATA Festplatten/SSDs - backup /dev/sda1 (ext4/Linux-Filesystem).
wget https://ctaas.de/data/ext4_backup_nvme_legacy.sh.txt -O backup.sh
# Für neue NVM Express/NVMe SSDs - backup /dev/nvme0n1p1 (ext4/Linux-Filesystem) im Legacy-/Kompatibilitätsmodus (ohne UEFI).
wget https://ctaas.de/data/ext4_backup_bootefi_nvme.sh.txt -O backup.sh
# Für neue NVM Express/NVMe SSDs - backup /dev/nvme0n1p1 (BIOS boot/EFI-System) und /dev/nvme0n1p2 (ext4/Linux-Filesystem).
Alternative Variante: Bei separater 'grub2 core.img' '1.00 MiB' 'bios_grub' 'BIOS boot' bzw. 'EFI System Partition':
wget https://ctaas.de/data/ext4_backup_grubcore_sda.sh.txt -O backup.sh
# Für alte SATA Festplatten/SSDs - backup /dev/sda1 (BIOS boot) und /dev/sda2 (ext4/Linux-Filesystem).
wget https://ctaas.de/data/ext4_backup_grubcore_efi_nvme.sh.txt -O backup.sh
# Für neue NVM Express/NVMe SSDs - backup /dev/nvme0n1p1 (BIOS boot) und /dev/nvme0n1p2 (EFI-System) und /dev/nvme0n1p3 (ext4/Linux-Filesystem).
mousepad backup.sh # Grafischer Text Editor mit Syntaxhervorhebung (unter Xfce empfohlen).
nano backup.sh # Alternativer Editor (im TTY Terminal/Console).
#!/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.
## Das Script ist auch für: ext2, ext3, XFS, Btrfs Dateisysteme geeignet.
## Eine ausführliche Parameterbeschreibung findet man unter:
https://ctaas.de/linux-install.htm
## 2021 © 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).
# Den Backupname automatisch anhand der MAC-Adresse festlegen (empfohlen):
bck_name=bck_up_$(cat /sys/class/net/$(ip route show default|awk '/default/ {print $5}')/address|sed -e 's/://g')
# Parameterbeschreibung:
# [
ip route show default] = Ermittelt die Standard Netzwerkverbindung.
# [
awk '/default/ {print $5}'] = Ermittelt über den 5-ten String den Namen der Netzwerkverbindung, also z. B. '
eth0', '
enp0s3' usw.
# [
cat /sys/class/net/ethX/address] = Ermittelt die zur Standard-Netzwerkverbindung dazugehörige MAC-Adresse.
# [
sed -e 's/://g'] = Entfernt alle Doppelpunkte aus der MAC-Adresse (da Dateinamen mit Doppelpunkt unter Windows nicht möglich sind).
# Warum das ganze? Ganz einfach: Der Sicherungsname für jeden PC ist somit immer eindeutig. Beispielsweise: '
bck_up_080027321a3b'.
# Sollte die Ermittlung nicht klappen, dann kann man den Backupname/Computername hier selbst eingeben (ggf. ändern und die Raute entfernen):
# bck_name='bck_up_xxxxxxxx.BackupName'
# 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 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
# Alle Standardausgaben und ggf. auftretende Fehler in der Logdatei "YYYY-MM-TT.log.txt" speichern. Die Umleitung erfolgt mittels '2>&1' und 'tee' (optional).
# 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-
Partitions
tabellen 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 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
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 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
fi
# 3. zu sichernde Laufwerke aushängen (/dev/sda1 ...) & Bildschirm-Energiesparmodus ausschalten:
umount /dev/sd*; xset s off -dpms
# 4. 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)
# 5a. Inhalt des Dateisystems (alle Programme, Daten, usw.) in einem Multivolume-Archiv gepackt sichern (ab FSArchiver Version 0.8.4 statt '-z7' besser '-Z14').
time fsarchiver savefs -j$threads -s4300 -v -z7 /mnt/LAN/Backup/$bck_name/$datum.sda1_archiv.fsa /dev/sda1 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
# 5b.
Alternative Variante: Bei separater '/dev/sda1' 'grub2 core.img' '1.00 MiB' 'bios_grub' 'BIOS boot' 'EFI System Partition'.
## time dd if=/dev/sda1 of=/mnt/LAN/Backup/$bck_name/$datum.sda1.full_dd.img 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
## time fsarchiver savefs -j$threads -s4300 -v -Z14 /mnt/LAN/Backup/$bck_name/$datum.sda2_archiv.fsa /dev/sda2 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
#
Hinweis: Diese Variante verwendet den neuen (↑hier) Datenkomprimierungsalgorithmus Zstandard ab XUbuntu 18.04 (siehe Parameterbeschreibung).
# 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 4 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.
# Kompressionsstandard nach Stufe:
0 = lz4,
1 = lz0 -3,
2 = gzip -3,
3 = gzip -6,
4 = gzip -9,
5 = bzip2 -2,
6 = bzip2 -5,
7 = lzma -1,
8 = lzma -6,
9 = lzma -9
# Bei Stufe 8 verdoppelt sich die Packdauer, bei Stufe 9 (maximale LZMA-Komprimierung) verdreifacht sich diese, immer in Bezug auf die Stufe 7.
# In der Stufe 8 oder 9 erstellte Archive sind immer kleiner als mit dem ZStandard erstellte Archive (LZMA packt langsam und besser).
# optionale/neue Parameter:
# [
tee] = leitet Ausgaben der Standardausgabe und ggf. auftretende Fehler (mittels '2>&1') in eine Datei um. Wird hier fürs Logging verwendet.
# [
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).
# [
-e 'Datei/Joker*?'] = (exclude) Verzeichnisse und Dateien die dem angegebenen Muster entsprechen werden nicht mit gesichert. Die Wildcards * und ? sind ebenso zulässig.
# Beispielsweise: -e '/swap.img' oder -e '*.log'. Pfade sind relativ zum zu sichernden Laufwerk einzugeben. Zur korrekten Interpretierung muss die Angabe zwingend in Hochkommas vorhanden sein.
# Achtung: Das hier im Beispiel angegebene swapfile wird vom Linux-System nicht neu angelegt. Man sollte das swapfile die 'swap.img' Datei daher immer einfach mit sichern (das ist auch standardmäßig so).
# [
-Z14] = (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 LZMA-Standard [
-z7], wobei die Sicherungsdauer deutlich ansteigt.
# Sicherungen mit dem Zstandard [
-Z14] werden in der Regel kleiner und dreimal so schnell erstellt - im Vergleich mit dem alten LZMA-Standard [
-z7].
# Im produktiven Betrieb wird daher [
-Z14] empfohlen (wenn möglich), alternativ kann man auch [
-z7] problemlos weiterverwenden (ist bereits so angegeben).
# 6. optional: Das verwendete Software Release dokumentieren:
echo "\nBackup erstellt mit folgenden Software-Versionen:\n" | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
lsb_release -a | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
echo "" >> /mnt/LAN/Backup/$bck_name/$datum.log.txt
fsarchiver -V 2>&1 | tee -a /mnt/LAN/Backup/$bck_name/$datum.log.txt
# 7. optional: SHA256-Prüfsummen zur aktuellen Sicherung erzeugen
, um später die Integrität der Archive zu testen zu können:
echo "\033[93m✱✱✱ Backup abgeschlossen. Erzeuge nur noch SHA-256 Checksummen.\033[0m"; cd /mnt/LAN/Backup/$bck_name; sha256sum $datum.* >$datum.checksum.txt.sha
echo "\033[32m✱✱✱ Alles fertig. Die Sicherung wurde komplett abgeschlossen.\033[0m"
Script direkt Download Link für '/dev/sda' und '/dev/nvme0n1' (es ist hier kein Copy & Paste des Scripts mehr notwendig):
wget https://ctaas.de/data/ext4_restore_sda.sh.txt -O restore.sh
# Für alte SATA Festplatten/SSDs - restore /dev/sda1 (ext4/Linux-Filesystem).
wget https://ctaas.de/data/ext4_restore_nvme_legacy.sh.txt -O restore.sh
# Für neue NVM Express/NVMe SSDs - restore /dev/nvme0n1p1 (ext4/Linux-Filesystem) im Legacy-/Kompatibilitätsmodus (ohne UEFI).
wget https://ctaas.de/data/ext4_restore_bootefi_nvme.sh.txt -O restore.sh
# Für neue NVM Express/NVMe SSDs - restore /dev/nvme0n1p1 (BIOS boot/EFI-System) und /dev/nvme0n1p2 (ext4/Linux-Filesystem).
Alternative Variante: Bei separater 'grub2 core.img' '1.00 MiB' 'bios_grub' 'BIOS boot' bzw. 'EFI System Partition':
wget https://ctaas.de/data/ext4_restore_grubcore_sda.sh.txt -O restore.sh
# Für alte SATA Festplatten/SSDs - restore /dev/sda1 (BIOS boot) und /dev/sda2 (ext4/Linux-Filesystem).
wget https://ctaas.de/data/ext4_restore_grubcore_efi_nvme.sh.txt -O restore.sh
# Für neue NVM Express/NVMe SSDs - restore /dev/nvme0n1p1 (BIOS boot) und /dev/nvme0n1p2 (EFI-System) und /dev/nvme0n1p3 (ext4/Linux-Filesystem).
mousepad restore.sh # Grafischer Text Editor mit Syntaxhervorhebung (unter Xfce empfohlen).
nano restore.sh # Alternativer Editor (im TTY Terminal/Console).
#!/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 % wiederhergestellt werden kann.
## Eine ausführliche Parameterbeschreibung findet man unter:
https://ctaas.de/linux-install.htm
## © 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).
# Den Backupname
automatisch anhand der MAC-Adresse festlegen (empfohlen):
bck_name=bck_up_$(cat /sys/class/net/$(ip route show default|awk '/default/ {print $5}')/address|sed -e 's/://g')
# Beachtet hier: Wenn man ein Backup auf einem neuen System wiederherstellt, dann ändert sich die MAC Adresse.
# bck_name='bck_up_xxxxxxxx.BackupName' # Alternativ die manuelle Eingabe vom Computername der Sicherung. Welcher PC wird wiederhergestellt?
bck_date='2022-01-17' # 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) wiederherstellen:
dd if=/mnt/LAN/Backup/$bck_name/$bck_date.mbr_grub_only.img of=/dev/sda bs=446 count=1
# 2a. Die
MBR-
Partitions
tabelle 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 wiederherstellen (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 (/dev/sda1 ...) aushängen:
umount /dev/sd*
# 4. 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)
# 5a. Erstes Dateisystem (id=0) vom Archiv auf /dev/sda1 wiederherstellen.
# id = bestimmt die Nummer vom Dateisystem falls man mehrere Dateisysteme in einem Archiv gesichert hat (begonnen wird bei 0).
time 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).
#
time fsarchiver restfs -v /mnt/LAN/Backup/$bck_name/$bck_date.sda1_archiv.fsa id=0,dest=/dev/sda1,mkfs=ext4
# 5b.
Alternative Variante: Bei separater '/dev/sda1' 'grub2 core.img' '1.00 MiB' 'bios_grub' 'BIOS boot' 'EFI System 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 "\033[32m✱✱✱ Restore abgeschlossen.\033[0m"