Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen.
Danke wenn du uns unterstützt. Weitere Infos zum Bedanken findest Du hier. Diese Seite verwendet hierzu Cookies & Tracking-Cookies, weitere Informationen findest du hier. Wenn du diese Seite weiterhin besuchst, erklärst du dich damit einverstanden.

Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen. Danke wenn du uns unterstützt. Weitere Infos zum Bedanken findest Du hier.
Diese Seite verwendet hierzu Cookies & Tracking-Cookies, weitere Informationen findest du hier. Wenn du diese Seite weiterhin besuchst, erklärst du dich damit einverstanden.


_ _ _____ _____ ____ ____ ___ _ _ _ _ ____ ,-+. |:\|:|(_ . _)|:____)/.___) |: _ \ /.__)|:|/ ) |:| |:||: _ \ _(.OO.)_ |:\ :| |:| |:__) \___.\ |: _ ((.(__ |: .( |:|_|:||: __/ (__)`♡´ |_||_| |_| |_| (____/ |____/ \___)|_|\_) !_____!|_| / \ V2
_ _ _____ _____ ____ ____ ___ _ _ _ _ ____ ,-+. |:\|:|(_ . _)|:____)/.___) |: _ \ /.__)|:|/ ) |:| |:||: _ \ _(.OO.)_ |:\ :| |:| |:__) \___.\ |: _ ((.(__ |: .( |:|_|:||: __/ (__)`♡´ |_||_| |_| |_| (____/ |____/ \___)|_|\_) !_____!|_| / \

NTFS/FAT32/exFAT Partition/Image Backup & Restore.
Windows mit einem Debian/Ubuntu/Linux Live-System
im Netzwerk sichern bzw. wiederherstellen.


Neue schnelle Zstandard Version (kostenlos/OpenSource).
2020-05-13 © ctaas.de, Arno Schröder § Impressum


Nr. Windows Backup Handbuch:
1 Windows System sichern
2 Windows System wiederherstellen
3 Einzelne Dateien wiederherstellen
4 Wichtige Kurztipps (Partitionen clonen)

Neue Zstandard Version:
Ab sofort wird der neue Packer zstd (Zstandard) zum komprimieren der Images verwendet.
Dadurch sind kürzere Sicherungs- und Wiederherstellungszeiten bei ähnlicher Kompressionsstärke im Vergleich zum Packer xz möglich.
Die Geschwindigkeit ist dabei ca. 2-3 mal schneller als bei der alten Version.
Wie hoch die Geschwindigkeitssteigerung tatsächlich ausfällt hängt stark vom verwendeten System ab.
Der zsdt Packer arbeitet insbesondere auf neueren CPUs deutlich besser (CPU optimiert compliert). Ältere Systeme bleiben Zeitlich in etwa auf dem xz Packer Niveau.
Verwendet zum Wiederherstellen von alten .xz Sicherungen das Script unter diesem Link.

Um ein Windows System mit ntfs-Dateisystem unter Linux zu sichern kann man folgende Sicherungs- und Wiederherstellungs-Scripte verwenden.
Es wird dabei der Bootsektor, die Partitionierungstabelle und der komplette Inhalt einer Partition gesichert bzw. wiederhergestellt (es werden dabei nur die belegten Sektoren gesichert).
Die Sicherung wird dabei in einer Netzwerkfreigabe in einem Image gespeichert. Bei der Sicherung wird neben dem Laufwerk c: auch die von neueren Windows Versionen angelegte meist versteckte System-Partition mit gesichert.
Hat man nur ein Laufwerk c:, so wird hiermit das komplette System gesichert.
Das Script startet man von einer beliebigen Live-DVD, empfohlen wird Xubuntu oder Debian. 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.
Durch den einfachen Scriptaufbau bleibt man relativ unabhängig vom verwendeten System.
Einzelne Dateien lassen sich aus einem Image wiederherstellen.
Mit den Scripten kann man auch FAT32 und exFAT Partitionen sichern und wiederherstellen.

Zur eigentlichen Sicherung wird dd, partclone [1] [2] und der Packer zstd (Zstandard) [1] verwendet.
Die mit zstd gepackten Sicherungen sind im Vergleich mit anderen Lösungen meist um ca. 20 % kleiner (Platzersparnis).
Dual-Boot-Systeme und weitere Datenträger werden hier nicht beachtet. Man kann das hier vorgestellte Script aber leicht für eigene Zwecke anpassen und so noch weitere Laufwerke mit sichern.

Mit diesem Script kann man beliebige Windows Systeme auch aktuelle Windows 10/Windows Server 2019 Installationen sichern und wiederherstellen.
Andere auf Debian/Ubuntu basierende Live-Medien wie Ubuntu, Kubuntu, Mate, Linux Mint usw. kann man ebenso verwenden.

Beachtet bitte folgendes:
Das zu sichernde Windows-System darf sich nicht im Hybridmodus (Schnellstart-Modus) oder Ruhezustand befinden.
Man muss Windows vor der Sicherung vollständig herunter fahren, hierzu hält man die Shift-Taste während dem herunterfahren fest.
Alternativ kann man die verschiedenen Schnellstartfunktionen auch dauerhaft deaktivieren (letzteres wird bei häufigem gebrauch empfohlen).

1. Windows Image Sichern (backup):


nano backup.sh

Hier folgendes einfügen (Copy & Paste):
#!/bin/sh
## Windows - von einem Live-System aus in einer Netzwerkfreigabe - sichern:
##
## Das NTFS/FAT32/exFAT-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
## 2020 © Computertechnik Schröder, Arno Schröder, Kahla

## BACKUP - Die folgenden Angaben muss man anpassen:
serverip=192.168.0.100  # IP-Adresse des Servers auf dem 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 Computername des zu sichernden PCs hier selbst eingeben (ggf. ändern und die Raute entfernen):
# bck_name=bck_up_xxxxxxxx.BackupName

# Sicherungsdatum automatisch ermitteln und Startzeit speichern (in Sekunden) zur Laufzeitmessung:
datum=$(date +"%Y-%m-%d"); start=$(date +%s)

## Netzwerk verbinden:
# Verzeichnis zum einhängen anlegen:
mkdir /mnt/LAN
# Paketquellen aktualisieren und notwendige Pakete installieren: [cifs-utils] zum mounten, [exfat-utils] für exFAT Dateisysteme, [partclone] das Sicherungsprogramm.
apt-get update; apt-get install zstd cifs-utils exfat-utils partclone pv -y
# Die Netzwerkfreigabe einhängen (mounten):
mount -v -t cifs //$serverip/$freigabe /mnt/LAN/ -o rw,user=$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).
# 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).
# 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

# definieren der Variable bck = Backup-Pfad + Backupnamen ($bck_name) + Datum ($date) und Sicherungsverzeichnis anlegen:
bck="/mnt/LAN/Backup/${bck_name}/${datum}"; mkdir /mnt/LAN/Backup/$bck_name/ -pv

## Die eigentliche Sicherung starten:
# 1. Sichert nur den MBR (GRUB 2 Bootloader):
dd if=/dev/sda of=${bck}.mbr_grub_only.img bs=446 count=1 2>&1 | tee -a ${bck}.log.txt

# if Abfrage ob GPT oder MBR Laufwerk:
if sgdisk -p /dev/sda | grep "Found invalid GPT and valid MBR"
 then
 # 2a. wenn kein GPT gefunden wurde, dann MBR-Partitionstabellen sichern.
 dd if=/dev/sda of=${bck}.sda.full_mbrgrub_2048.img bs=512 count=2048 2>&1 | tee -a ${bck}.log.txt
 # sfdisk -d /dev/sdb > ${bck}.sdb.mbr-part-table.mpt  # weitere Datenträger...

 else
 # 2b. sonst GPT-Partitionstabellen (GUID-Partition-Table) sichern,
 # (neue Datenträger gemäß der EFI-Spezifikation - insbesondere alle Datenträger über 2 TB):
 sgdisk -b ${bck}.sda.gpt-table.gpt /dev/sda 2>&1 | tee -a ${bck}.log.txt
 # sgdisk -b ${bck}.sdb.gpt-table.gpt /dev/sdb  # weitere Datenträger...
fi

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

# 3. zu sichernde Laufwerke (/dev(sda1 ...) aushängen:
umount /dev/sd*

# 4. Inhalt der entsprechenden Partitionen (alle Programme, Daten, usw.) in einem partclone Archiv gepackt sichern (je nach System hier anpassen):
  partclone.ntfs  -L ${bck}.sda1.log.txt -cs /dev/sda1 -o -|zstd -3 -T0 >${bck}.sda1.ntfs-ptcl-img.zst    # 1. NTFS Partition (Boot).
  partclone.ntfs  -L ${bck}.sda2.log.txt -cs /dev/sda2 -o -|zstd -3 -T0 >${bck}.sda2.ntfs-ptcl-img.zst    # 2. NTFS Partition.
# partclone.ntfs  -L ${bck}.sda3.log.txt -cs /dev/sda3 -o -|zstd -3 -T0 >${bck}.sda3.ntfs-ptcl-img.zst    # 3. NTFS Partition.
# partclone.ntfs  -L ${bck}.sda4.log.txt -cs /dev/sda4 -o -|zstd -3 -T0 >${bck}.sda4.ntfs-ptcl-img.zst    # 4. NTFS Partition.
# partclone.fat32 -L ${bck}.sda5.log.txt -cs /dev/sda5 -o -|zstd -3 -T0 >${bck}.sda5.fat32-ptcl-img.zst   # Für FAT32 Partitionen (EFI System).
# partclone.exfat -L ${bck}.sda6.log.txt -cs /dev/sda6 -o -|zstd -3 -T0 >${bck}.sda6.exfat-ptcl-img.zst   # Für exFAT Partitionen.
# dd status=progress conv=noerror,sync bs=1M if=/dev/sda7  |zstd -3 -T0 >${bck}.sda7.dd-img.zst           # Sichern mit dd bzw.
# pv -EE /dev/sda8                                         |zstd -3 -T0 >${bck}.sda8.pv-img.zst           # Sichern mit pv
                                                                                                          # für andere Partitionen (Microsoft reserved, UEFI/GPT).
# Parameterbeschreibung:
# [${bck}] = ist eine Variable mit dem Backup-Pfad /mnt/LAN/Backup/${bck_name}/${datum}. Dabei enthält ${bck_name} den Backupnamen und ${datum} das aktuelle Datum.
# [-L]   = Logfilepfad, hier wird auf den Pfad auf die zuvor gemappte Netzwerkfreigabe verwiesen.
# [-c]   = (clone), ein Image erstellen.
# [-s]   = (source), welche Quellpartition soll gesichert werden?
# [-o -] = (output), das Ziel wird über die Standardausgabe [-], über die Pipe [|], an den Packer xz weitergeleitet.
# [-3]   = Angabe der Kompressionsstärke für den Packer zstd (1-19 ist möglich).
#          Mit dem zusätzlichen Parameter [--ultra] ist die Kompressionsstärke bis Level 22 möglich.
#          Für die maximale Komprimierung verwendet man [--ultra -22].
#          Gibt man eine höhere Komprimierungsstufe an dann erhöht sich die Sicherungsdauer deutlich.
#          Beachtet dabei auch: Für die höheren Kompressionsstufen wird sehr viel Arbeitsspeicher benötigt.
#          Im täglichen produktiven Betrieb wird die Stufe 3 (ist bereits so im Skript angegeben) empfohlen (optimale Kompression bei sehr guter Laufzeit).
# [-T0]  = (threads), gibt die Anzahl der zu verwenden CPU-Kerne (Cores) an (0 = alle Prozessorkerne werden verwendet).
# [conv=noerror,sync] bzw. [-EE] = Bei eventuell auftretenden Lesefehlern weitermachen.

# optionale partclone Parameter:
# [tee]  = leitet Ausgaben der Standardausgabe und ggf. auftretende Fehler (mittels '2>&1') in eine Datei um. Wird hier fürs Logging verwendet.
# [-R]   = (rescue) bei Lesefehlern fortsetzen (sollte man nur bei offensichtlich defekten Medien verwenden).
# [-i]   = Sichern und 'crc check error' ignorieren (sollte man nur bei offensichtlich defekten Medien verwenden).
# [-I]   = Sichern und 'filesystem check' ignorieren (sollte man nur bei offensichtlich defekten Medien verwenden).

# 5. optional: Die komplette Sicherungsdauer ermitteln, ausgeben und im Logfile protokollieren:
echo "Sicherungsdauer: $(date -d@$(($(date +%s)-${start})) -u +%Hh:%Mm:%Ss)" 2>&1 | tee -a ${bck}.log.txt  # Ausgabe der Laufzeit in Stunden, Minuten und Sekunden.

# 6. optional: Zusätzliche SHA256-Prüfsummen zur aktuellen Sicherung erzeugen. Damit kann man später einfacher die Integrität von einem Archiv überprüfen:
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. Windows Image Wiederherstellen (restore):


nano restore.sh

Hier folgendes einfügen (Copy & Paste):
#!/bin/sh
## Windows - von einem Live-System aus einer Netzwerkfreigabe - wiederherstellen:
##
## Das NTFS/FAT32/exFAT-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
## 2020 © 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=2020-05-13     # Die Sicherung von welchem Datum wird wiederhergestellt?

## Vorbereitungen:
# swapping deaktivieren - es kann sonst passieren das, das Live-System
# die swap-Partition verwendet und so ein Rücksichern verhindert.
swapoff -a; umount -a 2>/dev/null

## Netzwerk verbinden:
# definieren der Variable bck = Backup-Pfad + Backupnamen ($bck_name) + Backupdatum ($bck_date) und Verzeichnis zum einhängen (mount) anlegen:
bck="/mnt/LAN/Backup/${bck_name}/${bck_date}"; mkdir /mnt/LAN/
# Paketquellen aktualisieren und notwendige Pakete installieren:
apt-get update; apt-get install zstd cifs-utils exfat-utils partclone pv -y
# Die Netzwerkfreigabe einhängen (mounten):
mount -v -t cifs //$serverip/$freigabe /mnt/LAN/ -o rw,user=$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 ${bck}.checksum.txt.sha ]; then echo "Sicherungsdatum: OK"; else echo "date error: bck_date falsches Sicherungsdatum $bck_date"; exit 13; fi

## Die eigentliche Wiederherstellung starten:
# 1. Den MBR (GRUB 2 Bootloader) wiederherstellen:
dd if=${bck}.mbr_grub_only.img of=/dev/sda bs=446 count=1

# 2a. Die MBR-Partitionstabelle zurücksichern (wenn vorhanden) ...
dd if=${bck}.sda.full_mbrgrub_2048.img of=/dev/sda bs=512 count=2048 2>/dev/null
# sfdisk /dev/sdb < ${bck}.sdb.mbr-part-table.mpt  # weitere Datenträger...

# 2b. ... oder (load backup) die GPT Partitionstabelle wiederherstellen (wenn vorhanden):
sgdisk -l ${bck}.sda.gpt-table.gpt /dev/sda 2>/dev/null
# sgdisk -l ${bck}.sdb.gpt-table.gpt /dev/sdb 2>/dev/null  # weitere Datenträger...

# 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 vorhandene (durchs automount) geöffnete Fenster wieder schließen & Bildschirm-Energiesparmodus ausschalten:
echo 30 Sekunden warten ...; sleep 30; killall Thunar; xset s off -dpms

# 3. alle betreffenden Laufwerke (/dev/sda1 ...) aushängen:
umount /dev/sd*

# 4. Systempartition und Laufwerk c: aus dem Image entpacken und wiederherstellen (je nach System hier anpassen):
  zstd -dcq ${bck}.sda1.ntfs-ptcl-img.zst  | partclone.ntfs  -rs - -o /dev/sda1   # 1. NTFS Partition (Boot).
  zstd -dcq ${bck}.sda2.ntfs-ptcl-img.zst  | partclone.ntfs  -rs - -o /dev/sda2   # 2. NTFS Partition.
# zstd -dcq ${bck}.sda3.ntfs-ptcl-img.zst  | partclone.ntfs  -rs - -o /dev/sda3   # 3. NTFS Partition.
# zstd -dcq ${bck}.sda4.ntfs-ptcl-img.zst  | partclone.ntfs  -rs - -o /dev/sda4   # 4. NTFS Partition.
# zstd -dcq ${bck}.sda5.fat32-ptcl-img.zst | partclone.fat32 -rs - -o /dev/sda5   # Für FAT32 Partitionen (EFI System).
# zstd -dcq ${bck}.sda6.exfat-ptcl-img.zst | partclone.exfat -rs - -o /dev/sda6   # Für exFAT Partitionen.
# zstd -dcq ${bck}.sda7.dd-img.zst | dd status=progress bs=1M of=/dev/sda7        # Wiederherstellen mit dd bzw.
# zstd -dcq ${bck}.sda8.pv-img.zst | pv > /dev/sda8                               # Wiederherstellen mit pv
                                                                                  # für andere Partitionen (Microsoft reserved, UEFI/GPT).
# Parameterbeschreibung:
# [-d] = (deflate), die gesicherte Archivdatei wieder entpacken.
# [-c] = (console/standard output), die entpackten Daten, über die Pipe [|], an die Standardausgabe weiterleiten und die Archivdatei nicht löschen.
# [-q] = (quite), keine ausführlichen Ausgaben beim entpacken anzeigen. Dies ist nicht notwendig, da man den Status schon über Partclone erhält.
# [-r] = (restore), das Image wiederherstellen.
# [-s -] = (source), die Quelle für die Wiederherstellung kommt aus der Pipe [|], über die umgeleitete Standardausgabe, daher das [-].
# [-o] = (output), bestimmt das Ziel des Images, hier muss man die entsprechende Zielpartition angeben.

# optionale partclone Parameter:
# [-C] = (no check), Archiv manuell auf einer kleineren Partition wiederherstellen. Zielgröße und freien Speicherplatz nicht prüfen.
#        Nicht empfohlen, es können Teile der wiederhergestellten Daten fehlen.

echo ✱✱✱ Restore abgeschlossen.

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

3. Einzelne Dateien wiederherstellen (optional):


partclone stellt derzeit keine Möglichkeit bereit einzelne Dateien wiederherzustellen.
Um trotzdem einzelne Dateien wiederzustellen muss man etwas tricksen, man erstellt hier einfach ein RAW-Image welches man mounten kann. Dies benötigt jedoch meist reichlich Speicherplatz. Ausschlaggebend für den Platz ist dabei nicht der Inhalt der gesicherten Partition, sondern die ursprüngliche Partitionsgröße (die exakte Größe steht unter [Device size:] in der log-Datei).
Um hier möglichst flexibel zu bleiben, wird bei diesem Skript die Sicherung einfach temporär in der Netzwerkfreigabe, wo auch die Sicherungen liegen komplett entpackt und gemountet.

Eigene Anpassungen sind natürlich möglich:
nano data.sh

Hier folgendes einfügen (Copy & Paste):
#!/bin/sh
## Einzelne Dateien - von einem Live-System aus einer Netzwerkfreigabe - wiederherstellen:
## 2020 © Computertechnik Schröder, Arno Schröder, Kahla

## DATEN - Die folgenden Angaben muss man anpassen:
serverip=192.168.0.100 # IP-Adresse, des Servers (wo die Sicherungen liegen).
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')
# bck_name=bck_up_xxxxxxxx.BackupName  # Alternativ die manuelle Eingabe vom Computername der Sicherung. Welcher PC wird wiederhergestellt?

bck_date=2020-05-13    # Es wird die Sicherung von folgendem Datum verwendet.
dsk_part=sda2          # Welche Partition ist betroffen (wo liegen die Daten)?
file_sys=ntfs          # Welches Dateisystem liegt vor: [nfts], [fat32] oder [exfat] bzw. [dd] oder [pv] bei einem disk-dump-Image. Beachtet hier die angegebene Schreibweise.

## Netzwerk verbinden:
# Verzeichnis zum einhängen anlegen (fürs Netzwerk mount und das RAW-Image):
mkdir /mnt/LAN /mnt/raw
# Paketquellen aktualisieren und notwendige Pakete installieren (Packer, partclone Sicherungsprogramm, exfat Unterstützung):
apt-get update; apt-get install zstd cifs-utils exfat-utils partclone pv -y
# Die Netzwerkfreigabe einhängen (mounten):
mount -v -t cifs //$serverip/$freigabe /mnt/LAN/ -o rw,user=$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

# eine ggf. gemountete Freigabe aushängen (notwendig falls man mehrere Sicherungen durchsuchen will) & Bildschirm-Energiesparmodus ausschalten:
killall Thunar; umount /mnt/raw 2>/dev/null; xset s off -dpms

## Vorbereitungen, Sicherungs-Image entpacken und RAW-Image herstellen:
# 1. In das Backupverzeichnis wechseln:
cd /mnt/LAN/Backup/$bck_name

# 2. Das Archiv entpacken und in ein RAW-Image umwandeln:
case $file_sys in ntfs ) zstd -dc $bck_date.$dsk_part.ntfs-ptcl-img.zst  | partclone.ntfs  -rWs - -O $dsk_part.RAW.img; esac  # ... wenn NTFS, dann ...
case $file_sys in fat32) zstd -dc $bck_date.$dsk_part.fat32-ptcl-img.zst | partclone.fat32 -rWs - -O $dsk_part.RAW.img; esac  # ... wenn FAT32, dann ...
case $file_sys in exfat) zstd -dc $bck_date.$dsk_part.exfat-ptcl-img.zst | partclone.exfat -rWs - -O $dsk_part.RAW.img; esac  # ... wenn exFAT, dann ...
case $file_sys in dd) zstd -dc $bck_date.$dsk_part.dd-img.zst | dd status=progress bs=1M of=$dsk_part.RAW.img; esac           # ... wenn dd Image, dann ...
case $file_sys in pv) zstd -dc $bck_date.$dsk_part.pv-img.zst | pv > $dsk_part.RAW.img; esac                                  # ... wenn pv Image, dann ...

# Parameterbeschreibung:
# [-dc] = Archivdatei entpacken (deflate), die Daten (console/standard output) über die Standardausgabe/die Pipe [|] weiterleiten und die Archivdatei nicht löschen.
# [-r] = (restore), das Image wiederherstellen.
# [-W] = ist die Kurzform für [--restore_raw_file]. Das Archiv in ein fürs loop-Device kompatibles RAW-Image umwandeln.
# [-s -] = (source), die Quelle für die Wiederherstellung kommt aus der Pipe [|], über die umgeleitete Standardausgabe, daher das [-].
# [-O] = output (Overwrite), bestimmt das Ziel des Images, bereits bestehende Images werden überschrieben.
#        Das Überschreiben ist insbesondere dann notwendig, wenn man verschiedene Images hintereinander durchsuchen möchte.
#        Achtung: Das Image benötigt so viel Platz wie bei einer kompletten Wiederherstellung!

# 3. das erzeugte RAW-Image kann man nun so temporär mounten:
ntfs-3g -o loop $dsk_part.RAW.img /mnt/raw/  # für NTFS Images (für alte Versionen).
mount   -o loop $dsk_part.RAW.img /mnt/raw/  # für alle anderen Dateisysteme. Spezielle kann man wie folgt angeben [mount -t ntfs ...].

# 4. Aus dem Verzeichnis '/mnt/raw' kann man sich nun alle benötigten Daten herauskopieren.
Thunar /mnt/raw /mnt/LAN &
# Wichtig:
# Da das in der Netzwerkfreigabe temporär abgelegte xxxx.RAW.image Image sehr viel Speicherplatz benötigt,
# sollte man dieses wenn man mit dem kopieren fertig ist wieder löschen.

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

4. Sonstiges:


Hier noch einige ergänzende Tipps:
zstd --testArchiv.zst # zst-Archiv überprüfen.
zstd -dkv Archiv.zst # (deflate) entpackt das zst-Archiv ins aktuelle Verzeichnis. Das original Archiv wird dabei nicht gelöscht (keep & verbose).

partclone.ntfs --help # kurze Hilfe anzeigen.
partclone.ntfs -b -s /dev/sda1 -o /dev/sdb1 # Einzelne Partitionen direkt 1:1 kopieren (ohne Image). Kopiert /dev/sda1 auf /dev/sdb1.

man partclone # (manpage) ausführliche Hilfe für partclone anzeigen.
man zstd # (manpage) ausführliche Hilfe für den Zstandard Packer (zstd) anzeigen.

apt install exfat-utils # Installiert die exFAT Unterstützung im Live-System nach (ist in den Scripten bereits integriert).

xscreensaver-command -exit # Optional: Den XScreensaver ausschalten (z. B. Debian Live-DVD).

partclone.restore # ist deprecated (veraltet) und sollte man nicht mehr verwenden (nur als Hinweis).
                  # Ein Restore erfolgt neuerdings immer über das entsprechende Sicherungsprogamm selbst.


Den Windows Schnellstart (Hybridmodus/Ruhezustand) deaktivieren:
Im Schnellstartmodus werden verschiedenste Systeminformationen die das System für den Start benötigt in der für den Ruhezustand zuständigen Datei hiberfile.sys abgelegt.
Diese Datei wird beim aufwachen aus dem Ruhezustand oder beim Schnellstart entsprechend eingelesen.
Der Hybridmodus/Ruhezustand wird also für das schnelle Starten und den Ruhezustand verwendet.
Vor Image Sicherungen und insbesondere bei dualboot Systemen ist eine Deaktivierung sehr zu empfehlen.

In einer Administrator Eingabeaufforderung (cmd.exe) kann man den Schnellstartmodus so anpassen:
powercfg /h off # Den Schnellstart dauerhaft deaktivieren.
powercfg /h on  # Bzw. den Schnellstart wieder aktivieren.

Alternativ kann der Schnellstart/Ruhezustand auch über die Registry deaktivieren.
Man erstellt dazu unter Windows eine .reg-Datei mit folgendem Inhalt:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power]
; Hibernateboot (schnelles Booten/Schnellstart) deaktivieren = 1, aktivieren = 0.
"HiberbootEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Power]
; Hibernateboot (schnelles Booten/Schnellstart) deaktivieren = 1, aktivieren = 0.
"HiberbootEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power]
; Hibernate (Ruhezustand) deaktivieren = 0, aktivieren = 1.
"HibernateEnabled"=dword:00000000

Die .reg-Datei importiert man dann mit einem Doppelklick in die Windows-Registry.

Windows Registry Tweak für mount error 112 (nur für Windows):
Um den Fehler zu beheben erstellt man unter Windows eine .reg-Datei mit folgendem Inhalt:
Windows Registry Editor Version 5.00
; Erhält man man beim monten von Windows-Freigaben den Fehler:
; [mount error(121): Remote I/O error], bzw. [Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)].
; So muss man auf dem Windows System die folgenden Registry-Keys verändern, dann tritt der Fehler nicht mehr auf.
; Nach dem importieren, bzw. dem verändern der Schlüssel, muss man das Windows System einmalig neu starten.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"LargeSystemCache"=dword:00000001

; Standard: "LargeSystemCache"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters]
"Size"=dword:00000003

; Standard: "Size"=dword:00000001

Die .reg-Datei importiert man dann mit einem Doppelklick in die Windows-Registry.

Den Fehler 'Invalid partition data!' beheben:
Wird bei der Sicherung [Invalid partition data!] angezeigt, so wird die Partitionstabelle nicht mit gesichert, da nicht eindeutig erkennbar war welches Partitionierungsschema vorhanden ist.
Der Fehler tritt meist dann auf, wenn eine MBR-Partitionstabelle genutzt wird, aber noch Reste von einer alten GPT-Partitionstabelle vorhanden sind (z. B. nach Systemwechsel, SSD Einbau).
Windows selbst ignoriert in der Regel den Fehler und startet problemlos. Image Programme stören sich aber oft an dem alten Eintrag, da die Partitionierung nicht eindeutig erkennbar ist.

Lösungsvorschlag 1: Aktualisieren sie mit Hilfe von Windows den Bootsektor:
bootrec /fixboot
bootrec /scanos
bootrec /fixmbr
bootrec /rebuildbcd


Lösungsvorschlag 2: löschen sie alle fehlerhaften GPT Einträge:
sgdisk /dev/sda # GPT-Partitionsinformationen anzeigen.

sgdisk -z /dev/sda # Alle GPT-Partitionstabellen ohne rückfrage löschen. Alle MBR-Partitionierungstabellen bleiben erhalten.
Vorsicht! Verwenden sie diesen Befehl nur auf MBR-Partitionierten Laufwerken. Erstellen sie vorher eine extra Datensicherung. Es können Daten verloren gehen.

❑  Abschließende Hinweise:


Verwendet man einen neueren PC bei dem die SSD nicht mehr über SATA sondern mittels NVM Express/PCI Express direkt angeschlossen ist, dann ändert sich der Interfacename.
Beispielsweise wird:
'/dev/sda1' zu '/dev/nvme0n1p1' bzw.
'/dev/sda'  zu '/dev/nvme0n1'.
Der Namensaufbau ist dabei wie folgt:
[/dev/nvme] = device NVM Express +
[0] = Controllernummer +
[n1] = Namespace +
[p1] = Partitionsnummer.
Die entsprechenden Einträge im Script muss man dann entsprechend anpassen.
Beachtet hier insbesondere die rot (= änderbare Einstellungen) hervorgehobenen Textstellen.

Das Skript wurde insbesondere für neuere Windows Versionen mit NTFS-Dateisystem erstellt und getestet (unter anderem mit Windows 7 und Windows 10).
Alle Windows Server Versionen bis einschließlich Windows Server 2019 kann man mit diesem Script ebenso sichern.
FAT32 und exFAT Partitionen kann man mit partclone auch sichern, das Script ist hierfür ebenso geeignet (ein Beispiel findet man oben), es wird hier nur partclone.fat32 bzw. partclone.exfat anstatt partclone.ntfs verwendet (der Rest bleibt unverändert).
Für exFAT Partitionen sollte man eine aktuelle Xubuntu Version (ab 18.04) verwenden, da hier eine neuere Partclone Version (v0.3.11) enthalten ist.
Die 'Microsoft reserved' Partition enthält kein Dateisystem, die Sicherung erfolgt hier daher mittels dd.
Setzt man noch zusätzlich andere Dateisysteme wie z. B. ext4, xfs usw. ein, so muss man das Skript hier entsprechend selbst ergänzen (Tipp).

Je nach Windows Version existieren ggf. verschiedene zusätzliche System Partitionen:


Will man diese mit sichern, so muss man diese im Sicherungsskript entsprechend hinzufügen.

Eine Größenänderung von Partitionen oder eine Umwandlung der Partitionierungsart (z. B. von GPT auf MBR oder von MBR auf GPT) ist nicht vorgesehen. Derartige Anpassungen muss man im Nachgang mit systemeigenen Werkzeugen oder z. B. mit GParted realisieren.
Auf ein aufteilen der Images in mehrere Teile mittels 'split' wurde verzichtet - wer mag kann dies aber selbst ergänzen.
Windows Software-Raid Installationen und verschlüsselte Systeme werden nicht unterstützt (wurde nicht getestet).
Durch die Sicherung werden keinerlei Transaktionslogfiles (Exchange/SQL-Datenbank) oder ähnliches gelöscht.
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.
Der Zstandard Packer zstd komprimiert selbst auf der kleinsten Stufe besser als gzip oder bzip2 mit der höchsten Stufe.
Man sollte die Kompressionssärke daher nur verändern, wenn man ein sehr leistungsfähiges System zum sichern hat, oder zwingend sehr kleine Images benötigt.

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: Xubuntu 16.10, 18.04, 20.04 und Debian 8, 9, 10 sowie produktiven Installationen.
Diese Anleitung stellt somit eine Zusammenfassung wichtiger und empfohlener Schritte dar.
Bevor sie eventuell Fragen stellen bitte ich sie die Dokumentation komplett zu lesen. Hinweise auf Fehler, Anregungen, Danksagungen oder ähnliches sind immer willkommen.
Danke für deine Unterstützung!
Affiliate/Partner-Link: Amazon.de

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