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.

NTFS Backup & Restore

Windows aus einem Debian/Ubuntu Live-System heraus
im Netzwerk/Image sichern bzw. wiederherstellen.

2020-02-28 © ctaas.de, A. Schröder [Impressum]


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

Hinweis:
Diese Version ist die ältere xz Packer Version.
Von diesem Script gibt es seit 2020 eine neue verbesserte zstd Version. Diese neue Version packt deutlich schneller bei in etwa gleich guter Kompression.
Das neue Backup und Restore Script ist über diesen Link zu finden.

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 der angegebenen 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.
FAT32 und exFAT Partitionen können hiermit auch gesichert werden.

Zur eigentlichen Sicherung wird dd, partclone [1] [2] und der Packer xz verwendet.
Die mit xz 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. 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=PC-Name

# 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 cifs-utils exfat-utils partclone -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 -|xz -0 -T0 >${bck}.sda1.ntfs-ptcl-img.xz  # 1. Partition NTFS (Boot).
  partclone.ntfs  -L ${bck}.sda2.log.txt -cs /dev/sda2 -o -|xz -0 -T0 >${bck}.sda2.ntfs-ptcl-img.xz  # 2. Partition NTFS.
# partclone.ntfs  -L ${bck}.sda3.log.txt -cs /dev/sda3 -o -|xz -0 -T0 >${bck}.sda3.ntfs-ptcl-img.xz  # 3. Partition NTFS.
# partclone.ntfs  -L ${bck}.sda4.log.txt -cs /dev/sda4 -o -|xz -0 -T0 >${bck}.sda4.ntfs-ptcl-img.xz  # 4. Partition NTFS.
# partclone.fat32 -L ${bck}.sda2.log.txt -cs /dev/sda2 -o -|xz -6 -T0 >${bck}.sda2.fat32-ptcl-img.xz # Für FAT32 Partitionen (EFI System).
# partclone.exfat -L ${bck}.sda5.log.txt -cs /dev/sda5 -o -|xz -0 -T0 >${bck}.sda5.exfat-ptcl-img.xz # Für exFAT Partitionen.
# dd status=progress bs=1M                if=/dev/sda3     |xz -6 -T0 >${bck}.sda3.dd-img.xz         # 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.
# [-0]   = Angabe der Kompressionsstärke für den Packer xz (0-9e ist möglich). Stufe 9e (extreme) bedeutet hier die maximale Komprimierung, die Sicherungsdauer
#          erhöht sich dabei deutlich. Im täglichen produktiven Betrieb wird die Stufe 0, 1 oder 0e empfohlen (optimale Kompression bei noch akzeptabler Laufzeit)
.
#          Beachtet vor allem: Für die höheren Kompressionsstufen wird sehr viel Arbeitsspeicher benötigt.
# [-T0]  = (threads), gibt die Anzahl der zu verwenden CPU-Kerne (Cores) an (0 = alle Prozessorkerne werden verwendet).

# 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. 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')
# bck_name=BackupName  # Alternativ die manuelle Eingabe vom Computername der Sicherung. Welcher PC wird wiederhergestellt?

bck_date=2020-02-28    # 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:
# Verzeichnis zum einhängen anlegen:
mkdir /mnt/LAN
# Paketquellen aktualisieren und notwendige Pakete installieren:
apt-get update; apt-get install cifs-utils exfat-utils partclone -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

## 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-Partitionstabelle zurücksichern (wenn vorhanden) ...
dd if=/mnt/LAN/Backup/$bck_name/$bck_date.sda.full_mbrgrub_2048.img of=/dev/sda bs=512 count=2048 2>/dev/null
# sfdisk /dev/sdb < /mnt/LAN/Backup/$bck_name/$bck_date.sdb.mbr-part-table.mpt # weitere Datenträger...

# 2b. ... oder (load backup) die GPT Partitionstabelle wiederherstellen (wenn vorhanden):
sgdisk -l /mnt/LAN/Backup/$bck_name/$bck_date.sda.gpt-table.gpt /dev/sda 2>/dev/null
# sgdisk -l /mnt/LAN/Backup/$bck_name/$bck_date.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):
  xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda1.ntfs-ptcl-img.xz  | partclone.ntfs   -rs -   -o /dev/sda1 # 1. Partition NTFS (Boot).
  xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda2.ntfs-ptcl-img.xz  | partclone.ntfs   -rs -   -o /dev/sda2 # 2. Partition NTFS.
# xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda3.ntfs-ptcl-img.xz  | partclone.ntfs   -rs -   -o /dev/sda3 # 3. Partition NTFS.
# xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda4.ntfs-ptcl-img.xz  | partclone.ntfs   -rs -   -o /dev/sda4 # 4. Partition NTFS.
# xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda2.fat32-ptcl-img.xz | partclone.fat32  -rs -   -o /dev/sda2 # Für FAT32 Partitionen (EFI System).
# xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda5.exfat-ptcl-img.xz | partclone.exfat  -rs -   -o /dev/sda5 # Für exFAT Partitionen.
# xz -dc /mnt/LAN/Backup/$bck_name/$bck_date.sda3.dd-img.xz         | dd status=progress bs=1M of=/dev/sda3 # Für andere Partitionen (Microsoft reserved, UEFI/GPT).

# Parameterbeschreibung:
# [-d] = deflate, die gesicherte Archivdatei wieder entpacken.
# [-c] = (clone), die entpackten Daten, über die Pipe [|], an die Standardausgabe weiterleiten und die Archivdatei nicht löschen.
# [-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=BackupName  # Alternativ die manuelle Eingabe vom Computername der Sicherung. Welcher PC wird wiederhergestellt?

bck_date=2020-02-28    # 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] (den Typ exakt so schreiben)?

## 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:
apt-get update; apt-get install cifs-utils exfat-utils partclone -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. partclone Sicherungsprogramm installieren und exfat Unterstützung vorbereiten:
apt-get install partclone -y

# 2. In das Backupverzeichnis wechseln:
cd /mnt/LAN/Backup/$bck_name

# 3. Das Archiv entpacken und in ein RAW-Image umwandeln:
case $file_sys in ntfs ) xz -dc $bck_date.$dsk_part.ntfs-ptcl-img.xz  | partclone.ntfs  -rWs - -O $dsk_part.RAW.img; esac # ... wenn NTFS, dann ...
case $file_sys in fat32) xz -dc $bck_date.$dsk_part.fat32-ptcl-img.xz | partclone.fat32 -rWs - -O $dsk_part.RAW.img; esac # ... wenn FAT32, dann ...
case $file_sys in exfat) xz -dc $bck_date.$dsk_part.exfat-ptcl-img.xz | partclone.exfat -rWs - -O $dsk_part.RAW.img; esac # ... wenn exFAT, dann ...

# Parameterbeschreibung:
# [-dc] = Archivdatei entpacken (deflate), die Daten (clone) ü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!

# 4. 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 ...].

# 5. 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:
xz -tv Archiv.xz # xz-Archiv überprüfen (test/verbose).
xz -dkv Archiv.xz # (deflate) entpackt das xz-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 xz # (manpage) ausführliche Hilfe für den LZMA Packer xz 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) folgenden Befehl eingeben:
powercfg /h off # Den Schnellstart dauerhaft deaktivieren.
powercfg /h on  # Bzw. den Schnellstart wieder aktivieren.

Alternativ kann der Schnellstart/Ruhezustand auch über die Registry deaktiviert werden:
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


Windows Registry Tweak für mount error 112 (nur für Windows):
unter Windows eine .reg-Datei mit folgendem Inhalt erstellen & per Doppelklick in die Registry importieren:
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


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:


Das Skript wurde insbesondere für neuere Windows Versionen mit NTFS-Dateisystem erstellt und getestet (unter anderem mit Windows 7 und Windows 10).
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 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:
'System-reserviert' ist eine NTFS Partition und enthält neben dem Bootloader noch weitere Funktionen. Unter anderem ist die Partition notwendig, um von BitLocker verschlüsselten Laufwerke zu starten.
'EFI System' enthält den Bootloader und notwendige UEFI-Treiber sowie weitere Dateien die zum Booten benötigt werden. Die Partition ist meist eine FAT32 Partition. Die Sicherung erfolgt daher über 'partclone.fat32'.
'Microsoft reserved' bzw. die MSR-Partition wird bei UEFI-Systemen bzw. bei GPT-Partitionierung verwendet. Die Partition enthält Informationen, die sich auf andere Systempartitionen beziehen.
Achtung: Die Partition enthält kein Dateisystem. Die Sicherung erfolgt daher über 'dd'. Wichtig: Diese Partition wird in der Datenträgerverwaltung unter Windows nicht angezeigt.
'Windows recovery environment' kurz Windows RE oder auch Wiederherstellungspartition ist eine NTFS Partition.
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 LZMA Packer xz 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.

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