====== Script für Backup von Disk unter macOS ======
Um ein Image auf eine Micro SD Karte oder einen USB Stick zu schreiben, gibt es zahlreiche Tools wie zum Beispiel **balenaEtcher** oder **Raspberry Pi Imager**.
Für den Weg in die andere Richtung gibt es leider nichts brauchbares.
Mit diesem Script kann somit jeder ein Backup von einer Micro SD Karte oder einen USB Stick anlegen.
===== Terminal öffnen und editor starten =====
nano DiskBackup.sh
===== Diesen Inhalt kopieren =====
#!/bin/bash
# Prüfen ob Script auf macOS läuft
if [[ "$(uname)" != "Darwin" ]]; then
echo "❌ Dieses Script funktioniert nur unter macOS."
exit 1
fi
echo "======================================"
echo " Disk Backup Script für macOS"
echo "======================================"
echo ""
# Laufwerke anzeigen
echo "📦 Verfügbare externe Laufwerke:"
echo ""
diskutil list | awk '
/^\/dev\/disk[0-9]+/ {
show = 1
if ($0 ~ /\(internal, physical\)/) show = 0
if ($0 ~ /\(synthesized\)/) show = 0
if ($0 ~ /\(disk image\)/) show = 0
}
show {
print
}
'
echo ""
# Disknummer abfragen
read -p "👉 Bitte DiskNumber eingeben (z.B. 4 für /dev/disk4): " DISK_NUMBER
# Validierung
if ! [[ "$DISK_NUMBER" =~ ^[0-9]+$ ]]; then
echo "❌ Ungültige DiskNumber."
exit 1
fi
DISK="/dev/disk${DISK_NUMBER}"
RDISK="/dev/rdisk${DISK_NUMBER}"
# Prüfen ob Device existiert
if [[ ! -e "$DISK" ]]; then
echo "❌ Laufwerk $DISK existiert nicht."
exit 1
fi
# Backup-Name abfragen
read -p "💾 Backup-Name eingeben (ohne Endung): " BACKUP_NAME
# Leerzeichen ersetzen
BACKUP_NAME=$(echo "$BACKUP_NAME" | tr ' ' '_')
if [[ -z "$BACKUP_NAME" ]]; then
echo "❌ Backup-Name darf nicht leer sein."
exit 1
fi
# Aktuellen Benutzer automatisch ermitteln
CURRENT_USER=$(whoami)
# Zielpfad
OUTPUT_FILE="/Users/${CURRENT_USER}/Downloads/${BACKUP_NAME}.img.gz"
echo ""
echo "======================================"
echo "📋 Zusammenfassung"
echo "Laufwerk: $DISK"
echo "Backup-Datei: $OUTPUT_FILE"
echo "======================================"
echo ""
read -p "▶️ Backup starten? (j/n): " CONFIRM
if [[ ! "$CONFIRM" =~ ^[JjYy]$ ]]; then
echo "❌ Abgebrochen."
exit 0
fi
echo ""
echo "🔓 Unmounting $DISK ..."
diskutil unmountDisk "$DISK"
if [[ $? -ne 0 ]]; then
echo "❌ Fehler beim Unmount."
exit 1
fi
echo ""
echo "📀 Erstelle Image..."
echo "⚠️ Du wirst ggf. nach deinem Passwort gefragt."
sudo dd if="$RDISK" bs=4m status=progress | gzip > "$OUTPUT_FILE"
# Prüfen ob dd erfolgreich war
if [[ ${PIPESTATUS[0]} -ne 0 ]]; then
echo "❌ Fehler beim Erstellen des Images."
exit 1
fi
echo ""
echo "⏏️ Werfe Laufwerk aus..."
diskutil eject "$DISK"
echo ""
echo "✅ Backup abgeschlossen!"
echo "📁 Datei gespeichert unter:"
echo "$OUTPUT_FILE"
Mit Control+X speichern und verlassen.
===== Script ausführbar machen =====
chmod +x DiskBackup.sh
===== Ausführen =====
./DiskBackup.sh
Abbruch ist jederzeit mit Control+C möglich.