Name und UUID eines vfat-Laufwerks ändern

Aus mborm wiki
Zur Navigation springen Zur Suche springen

Manchmal steht man vor dem Problem, eine mit FAT32 formatierte SD-Karte gegen ein größes Modell tauschen zu wollen, ohne alle Daten darauf neu einrichten zu müssen.

Wichtiger Hinweis

Es geht bei FAT32-Laufwerken um die übliche vfat-Formatierung großer externer Datenträger wie SD-Karten oder mobile Festplatten. Kleine Datenträger wie Uralt-Disketten und Laufwerke unter 4 GB Größe werden in FAT12 oder FAT16 formatiert. Solche alten Laufwerke sind heute nicht mehr in Gebrauch. Es geht hier auch nicht um exfat- oder ntfs-Datenträger. Das ist ein anderes Speicherformat.

Hintergrundinformation

FAT32 hat den großen Vorteil von allen Betriebssystemen unterstützt zu werden. Es tritt auch kein "Platzschwund" auf wie bei exfat oder ntfs, wo gelöschte Daten intern weiterhin gespeichert werden, sodass der belegte Platz auch nach dem Löschen einer Datei nicht wieder freigegeben wird.

Unter Android und anderen Systemen wird der externe Datenträger über seine UUID in das Dateisystem eingehängt. Die UUID ist ein zufälliger und eindeutiger Bezeichner, der wie folgt aufgebaut ist: XXXX-XXXX. Hierbei steht X für jeweils eines der hexadezimales Zeichen aus "0123456789ABCDEF".

Beispiel einer UUID wäre 5DF8-466B. Unter Android würde diese Karte über folgenden Pfad ins Dateisystem des Gerätes eingehängt:

/storage/5DF8-466B/...

UUID auf neue Karte übertragen

Es gibt fast 5 Milliarden (2^32) verschiederner UUIDs. Eine neue Karte hat deshalb mit großer Sicherheit eine andere UUID als die alte Karte. Würde man die Daten der alten Karte einfach auf die neue kopieren, dann stimmten die Pfade nicht mehr, weil im dort dann eine andere UUID stünde. Bilder, Musik oder Videos würden nicht mehr gefunden werden. Man müsste alles was diese Dateien verwendet neu einrichten.

Leider gibt es kein Programm, das eine UUID nachträglich ändert, wie etwa tune2fs für ext-Laufwerke. Es gibt aber einen Trick, mit dem man die UUID auf die neue Karte übertragen kann. Mit dem Befehl blkid lässt man sich zuerst Name (LABEL) und UUID des alten vfat-Laufwerks anzeigen.

/dev/sdc1: LABEL_FATBOOT="SDCARD_64GB" LABEL="SDCARD_64GB" UUID="5DF8-466B" TYPE="vfat"

Die UUID ist an Byte-Position 67...71 des Laufwerkspeichers kodiert. Dort hinein müssen die 4 Byte der alten UUID auf die neue Karte geschrieben werden. Mit Linux Bordmitteln ist es relativ einfach das per Skript zu erledigen.

In das Skript trägt man die alte UUID und den Gerätepfad DEV des neuen Laufwerks ein. Im Gerätepfad ist Y ist der Buchstabe des neuen Laufwerks und Z die Partitionsnummer (meist 1) - Beispiel: /dev/sdc1 .

 #!/bin/sh
UUID="XXXX-XXXX"
DEV=/dev/sdYZ
printf "\x${UUID:7:2}\x${UUID:5:2}\x${UUID:2:2}\x${UUID:0:2}" | dd of=$DEV seek=67 count=4 bs=1 conv=notrunc

Ruft man das Skript auf, wird die UUID auf die neue Karte geschrieben. Anschließend schreibt man noch mit dem Befehl fatlabel den Namen der neuen Karte. Man kann es auch direkt im Terminal erledigen. Hier ein Beispiel mit den Werten von oben.

UUID=5DF8-466B
DEV=/dev/sdc1
printf "\x${UUID:7:2}\x${UUID:5:2}\x${UUID:2:2}\x${UUID:0:2}" | dd of=$DEV seek=67 count=4 bs=1 conv=notrunc
fatlabel $DEV SDCARD128GB

Jetzt werden noch die Daten der alten Karte auf die neue kopiert. Die neue Karte wird damit genau wie die alte eingebunden. Alle Pfade dorthin bleiben erhalten.

Hinweis! Es geht bei vfat-Laufwerken um die übliche FAT32-Formatierung großer Datenträger wie SD-Karten oder DOS-Partitionen. Kleine Datenträger wie Uralt-Disketten sind in FAT12 oder FAT16 formatiert. Es geht auch nicht um exfat- oder ntfs-Datenträger!