Rettung der Liedersammlung: Wenn die Musik verstummt!

Stell dir vor, du schließt deine externe Festplatte am PC an, vollgepackt mit sorgfältig ausgewählten MP3-Titeln, nur um festzustellen, dass das Dateisystem beschädigt ist und du keinen Zugriff mehr auf die Songs hast. Ein unerwarteter Schicksalsschlag für jeden Musikliebhaber. Nach einer tiefgreifenden Reparatur mittels fsck tauchen jedoch nur noch mysteriöse .REC-Dateien auf.

Die Hoffnung auf den Genuss der geliebten Musik schwindet, da die Stereoanlage die Lieder im vorhandenen FAT32-Dateisystem nicht mehr erkennt. Doch hier beginnt unsere Geschichte. Die Lösung war nicht in spezialisierten Programmen zu finden, also musste ein Bash-Skript erstellt werden. So gelang es mir, den .REC-Albtraum eines Freundes zu beenden.

Dieser Blogartikel erzählt die Geschichte, wie ein kleines Skript die Dateierweiterungen aller tausenden .REC-Dateien in das allseits bekannte .MP3-Format änderte und somit die Rettung der Musiksammlung ermöglichte. Tauche mit mir in die Welt der Musikrettung und technischen Improvisation ein. Aber eines noch vorweg: Der Code läuft nur auf Linux-Systemen!

Wie das Skript eingesetzt wird:

Kopiere den folgenden Sourcecode in eine Datei auf deinem Linux-System. Mache sie mit chmod +x ausführbar, und schon kann es losgehen. Verwende die Option -o, um die zu eliminierende Endung anzugeben. Im konkreten Szenario war dies .REC. Mit der Option -n legst du die neue Dateierweiterung fest. Da hier keine Formatierung der Songs durchgeführt wird, muss diese dem Original entsprechen.

In unserem Fall handelt es sich um das Dateiformat .MP3. Jedoch sind auch Suffixe wie .WAV oder .AAC weit verbreitet. Solltest du dich nicht mehr an den genauen Dateityp und damit korrekte Endung erinnern können, ist das nicht weiter tragisch. Mithilfe des Kommandozeilenwerkzeugs file kann man beides ermitteln:

file Pfad/zum/Lied

Beim vorgestellten Skript und dessen Option -d wird als Argument der Pfad zur Musiksammlung erwartet. Dies kann sowohl ein Ordner auf deinem lokalen System sein als auch der Mountpoint einer Festplatte oder eines USB-Sticks. Außerdem gibt es noch eine Hilfe, die mittels -h aufgerufen werden kann.

In der praktischen Anwendung könnte das Ganze folgendermaßen aussehen:

/usr/local/bin/replace-extensions.sh -o .REC -n .MP3 -d /~/Musik/

Das Skript entfernt die Endung .REC und fügt stattdessen die Zeichenkette .MP3 am Ende des Dateinamens hinzu. Dabei werden ausschließlich die Songs im angegebenen Ordner bearbeitet. Obendrein erhältst du nach jeder erfolgreichen Umbenennung eine Statusmeldung. Im Falle eines Fehlers wird das Programm sofort beendet. Hier erscheint ebenso eine aussagekräftige Meldung im Terminal.

#!/bin/bash

# Generiere den Skriptnamen ohne Pfadangabe
script_name=$(basename "$0")

# Hilfe-Funktion
show_help() {
    echo ""
    echo "$script_name ersetzt die vorhandene Dateierweiterung durch eine Neue."
    echo 'Argumente: -o .REC -n .MP3 -d ~/Musik'
    echo ""
    exit 0
}

# Hilfe anzeigen, auch mit --help, da getopts das nicht kann
if [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
    show_help
fi

# Fehlermeldung mit Zeilenangabe
handle_error() {
    echo ""
    echo -e "\033[31mUnerwarteter Fehler in Zeile ${BASH_LINENO[0]}: $1 \033[0m"
    echo ""
    exit 1
}

# Erfolgsmledung
handle_good_status() {
    echo -e "\033[32m$1 \033[0m"
}

# Abschlussmeldung
finish_message() {
    echo ""
    echo -e "\033[1m\033[1;37m\033[42m$1\033[0m"
    echo ""
}

# Verarbeitung von Optionen und deren Argumenten
while getopts "o:n:d:h" opt 2>/dev/null; do
  case $opt in
    o)
      old="$OPTARG"
      ;;
    n)
      new="$OPTARG"
      ;;
    d)
      dic="$OPTARG"
      ;;
    h)
      show_help
      ;;
    \?)
      echo "($script_name): Ein Fehler bei der Optionsangabe"
      exit 1
      ;;
  esac
done

# Überprüfung, ob alle benötigten Argumente vorhanden sind
if [ -z "$old" ] || [ -z "$new" ] || [ -z "$dic" ]; then
  echo "Fehler: Die Optionen -o, -n und -d sind erforderlich."
  show_help
fi

# Wechsel ins Zielverzeichnis
cd $dic

# Ändern der Dateierweiterung
for file in *.REC; do
    mv_output=$(mv -v -- "$file" "${file%$old}$new" 2>&1) || handle_error "$mv_output"
    handle_good_status ">> Erfolgreich << $mv_output"
done

# Abschlussmeldung
finish_message "Alle Dateierweiterungen wurden entsprechend der Vorgabe geändert."

Rettung eines FAT32-Dateisystems:

Wer heutzutage mit USB-Sticks hantiert, hat vermutlich schon mit Formaten wie ExFAT oder dem Microsoft-Eigenbau NTFS zu tun gehabt. In diesem speziellen Fall wurde jedoch das altbackene FAT32 genutzt. Das Dateisystem von 1996 ist eine Weiterentwicklung des FAT16-Dateisystems und stammt ebenfalls aus dem Hause Microsoft. Eingesetzt wird es dort seit Windows 95B.

Wie für FAT üblich, kommt hier eine File Allocation Table zum Einsatz, die auf dem Datenträger gespeicherten Dateien und Verzeichnisse den entsprechenden Clustern zuordnet. FAT32 kann mit Dateien bis zu vier Gigabyte und Partitionen bis zu zwei Terabyte umgehen. Zur Ablage der eigenen Filmsammlung eignet sich FAT32 damit nicht. Bei Songs macht es aber immer eine gute Figur.

Gut zu wissen ist noch, dass FAT32 von allen gängigen Betriebssystemen unterstützt wird. Damit kann man also problemlos Daten zwischen Windows und Unix-Systemen austauschen. MacOS gehört übrigens auch zur Unix-Familie und kann daher ebenso mit FAT-Datenträgern arbeiten. Doch kommen wir an dieser Stelle endlich zur Frage, wie man bei einem Dateisystemcrash vorgehen sollte.

Je nach individueller Präferenz besteht die Wahl zwischen der ausschließlichen Arbeit in der Kommandozeile oder der Nutzung einer Software mit grafischer Benutzeroberfläche. Empfehlenswert für weniger erfahrene Anwender sind daher grafische Tools wie GParted sowie TestDisk. Ich werde jedoch das Vorgehen im Terminal mit fsck erläutern, da es zeitlos und noch dazu recht simpel ist.

Auf Ubuntu und vielen anderen Linux-Distributionen ist fsck bereits von Beginn an installiert. Es ist ein praktisches Werkzeug, das zur Überprüfung und Reparatur von diversen Dateisystemen verwendet wird. Falls es aus irgendeinem Grund nicht vorhanden ist, kannst du es mit dem folgenden Kommando auf Debian und dessen Derivaten nachinstallieren:

sudo apt-get install dosfstools -y

Sobald dosfstools installiert ist, kannst du fsck.fat verwenden, um dein FAT32-Dateisystem zu überprüfen und zu reparieren. Dafür musst du aber vorher die externe Festplatte oder den USB-Stick noch aus dem Dateisystem aushängen. Das gelingt dir wie folgt:

sudo umount /dev/sdXn

Beachte dabei bitte, dass du /dev/sdXn durch den korrekten Pfad zu deinem FAT32-Dateisystem ersetzen musst. Falls du nur eine Festplatte im Rechner hast, wäre sdb1 wahrscheinlich die richtige Wahl. Du kannst dies jedoch sicherheitshalber mit dem Befehl lsblk überprüfen. Orientiere dich dafür an der angezeigten Größe und der letzten Spalte Mountpoints.

Externe Datenträger landen je nach Distribution unter /media oder /mnt. Nachdem Aushängen mittels umount kannst du dich auch schon an die Reparatur des beschädigten Dateisystems machen:

sudo fsck.fat -av /dev/sdXn

Auch hier gilt erneut, dass du /dev/sdXn durch den entsprechenden Pfad deines FAT32-Dateisystems ersetzen musst. Abhängig von der Größe des Datenträgers erfordert der Reparaturvorgang möglicherweise etwas mehr Zeit. Da währenddessen keine Eingaben von dir erwartet werden, bietet sich eine kurze Pause an, vielleicht für einen Kaffee oder einen Snack.

Nach Abschluss der Dateisystemreparatur musst du den USB-Stick mounten. Auch hierbei sind die richtigen Werte für /dev/sdXn zu verwenden:

mkir /media/usb-stick && mount /dev/sdXn /media/usb-stick

Nun sollten alle deine Lieder und anderen Daten unter /media/usb-stick sichtbar sein. Falls der Reparaturvorgang die Songs nur mit der generischen Dateiendung .REC wieder gefunden haben sollte, kannst du sie mithilfe des zuvor vorgestellten Skripts auf die Originalendung ändern. Wie du vielleicht schon gemerkt hast, ist Linux die Dateiendung egal und die Lieder lassen sich bereits wieder abspielen.

Von Fabian Wüst

Er ist leidenschaftlicher Open-Source-Benutzer und ein begeisterter Technologie-Enthusiast. Als kreativer Kopf hinter Homelabtopia bringt Fabian hier seine umfangreiche Erfahrung als Linux-Admin ein. Um sicherzustellen, dass du aus seinen Beiträgen den größtmöglichen Nutzen ziehen kannst, führt er ausgiebige Tests durch und errichtet dafür immense Setups.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert