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.
nano DiskBackup.sh
#!/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.
chmod +x DiskBackup.sh
./DiskBackup.sh
Abbruch ist jederzeit mit Control+C möglich.