Dieses Dokument beschreibt ausführlich die Funktionsweise, Installation und Nutzung des Skripts clone-disk.sh, mit dem Festplattenabbilder interaktiv erzeugt und wahlweise lokal, per SSH oder auf einem Netzwerkshare abgelegt werden können.
Mit clone-disk.sh können Sie auf einfache Weise eine vollständige Kopie (Image) einer Festplatte erstellen und in verschiedenen Zielmedien ablegen:
- Lokal auf dem gleichen oder anderen Laufwerk
- Per SSH auf einen entfernten Server
- Netzwerkshare (NFS oder CIFS/SMB)
Das Skript führt Sie interaktiv durch alle notwendigen Schritte, vermeidet Überschreiben durch Zeitstempel und erlaubt Ausgabe im raw, raw.gz oder qcow2-Format.
-
Interaktive Menüs ohne zusätzliche Abhängigkeiten (nur Bash-Bordmittel)
-
Automatische Geräteerkennung mittels
lsblk -
Wahl zwischen Lokal, SSH und Netzwerkshare
-
Unterstützung für NFS und CIFS/SMB inklusive Passwortabfrage
-
Konfigurierbare Blockgröße (
dd bs=) für RAM-Anforderungen -
Ausgabeformate:
raw.gz(komprimiertes Roh-Image)raw(ungepacktes Roh-Image)qcow2(QEMU Copy-On-Write, wennqemu-imginstalliert)
-
Zeitstempel im Dateinamen, um Überschreiben zu vermeiden
-
Detaillierte Statusausgabe während des Klonvorgangs
- Bash (>= 4.x)
dd,gzip,lsblk,awk,stat,findmnt,mountpoint,mktemp,chmod,sudo(alle in coreutils/util-linux enthalten)- Für qcow2-Format:
qemu-img(optional) - Für CIFS/SMB:
mount.cifs(Teil voncifs-utils) - Für NFS: Kernel-Modul
nfsbzw. Paketnfs-common
-
Skript herunterladen und in ein Verzeichnis legen, z. B.
/usr/local/bin:wget https://raw.githubusercontent.com/CallMeTechie/clone-disk.sh/main/clone-disk.sh \ -O /usr/local/bin/clone-disk.sh chmod +x /usr/local/bin/clone-disk.sh
Oder das Repo klonen:
git clone https://github.com/CallMeTechie/clone-disk.sh.git cd clone-disk.sh chmod +x clone-disk.sh -
(Optional) Pakete installieren:
# Für CIFS sudo apt install cifs-utils # Für qemu-img sudo apt install qemu-utils # Für NFS (Client) sudo apt install nfs-common
Das Skript gliedert sich in folgende Abschnitte:
- Prüfungen (Bash, qemu-img)
- Interaktive Auswahl von Quellgerät (
lsblk) und Speichertyp - Konfiguration des Speicherziels (Lokal, SSH, Netzwerkshare)
- Eingabe von Blockgröße und Ausgabeformat
- Benutzerdefinierter Basis-Dateiname sowie Zeitstempel-Generierung
- Klonvorgang mit
ddund ggf.qemu-imgfür Konvertierung - Abschlussmeldung und Anzeige der resultierenden Dateigröße
Das Skript zeigt alle physischen Laufwerke aus lsblk. Wählen Sie das gewünschte Gerät per Nummer aus.
Wählen Sie, ob das Abbild lokal, per SSH oder auf einem Netzwerkshare (NFS/CIFS) gespeichert werden soll.
-
Lokal: Ziel-Verzeichnis (
/tmpetc.) -
SSH: Ziel-Verzeichnis auf dem Remote-Host (
user@host:/pfad) -
Netzwerkshare:
- Protokoll (NFS oder CIFS)
- Freigabe-Pfad
- Lokaler Einhängepunkt (wird bei Bedarf angelegt)
- Bei CIFS: Benutzername & Passwort
- Blockgröße für
dd: 512K / 1M / 4M - Format:
raw.gz,rawoder (wenn verfügbar)qcow2
Geben Sie einen aussagekräftigen Namen ohne Extension ein. Ein Zeitstempel im Format YYYYMMDD_HHMMSS wird automatisch angehängt.
Das Skript führt den Klon mit dd aus:
- Bei
raw.gzwerden Daten on-the-fly komprimiert. - Bei
rawentsteht ein unkomprimiertes Image. - Bei
qcow2wird zunächstrawgeschrieben und anschließend mitqemu-img convertumgewandelt.
Während des Vorgangs zeigt dd status=progress den Kopierfortschritt.
$ ./clone-disk.sh
# Interaktiver Ablauf gemäß obiger AnleitungBeispiel für SSH-Backup:
Speichertyp: SSH
SSH-Ziel-Verzeichnis: backup@server:/mnt/backups
...
Fortfahren? j
Starte Klonvorgang: 2025-06-24
1048576+0 records in
1048576+0 records out
...
Klon abgeschlossen: backup@server:/mnt/backups/linuxserver_20250624_203045.img.gz
mount: cannot mount: Prüfen Sie Protokoll, Pfad und Berechtigungen.dd: cannot open: Das Skript ruftddautomatisch viasudoauf, wenn es nicht als root läuft. Bei dieser Meldung prüfen, ob das Device gerade belegt ist (z. B. ein laufendes Backup). Die Skript-Warnung „Device ist aktuell gemountet" sollte als ernsthafter Hinweis gelesen werden.qemu-img: command not found: Installieren Sieqemu-utils.- SSH-Verbindung: Testen Sie manuell mit
ssh user@host "touch /mnt/backups/test". Das Skript trennt Host und Pfad automatisch — Format weiterhinuser@host:/pfad.
Das Repo enthält Bats-Tests, die in GitHub Actions auf jedem Push und Pull Request gegen main laufen. Geprüft werden:
- Funktionalität: SSH-Pfad-Parsing, Format-Mapping, Blockgrößen-Auswahl, Filename-Konstruktion, Basisname-Validierung
- Sicherheit: CIFS-Passwort gelangt nicht in
ps-Output, Credentials-Datei mitchmod 600, Cleanup-Trap, SSH-Pfad-Quoting
Lokales Ausführen:
sudo apt install -y bats shellcheck
bats tests/
shellcheck clone-disk.shDas Skript wird ohne Gewährleistung bereitgestellt. Der Anwender ist allein verantwortlich für den korrekten Einsatz und etwaige Datenverluste.