Festplattenbezeichnungen UUID, Label, by-path, wer soll das alles blicken?

  • Oft tauchen hier Threads auf, in denen Leute Probleme mit dem Booten haben,
    weil die Schemata, die zur Festplattenbezeichnung Verwendung finden, nicht klar sind.
    Dem soll diese kurze Einführung ein wenig abhelfen. Jedenfalls soweit, dass man sich zu einem bootfähigen Linux durchhangeln kann.


    Bastelt man an seiner Bootkonfig oder schraubt an seiner Hardware rum,
    landet man oft bei so kryptischen Meldungen, dass ein Bootdevice nicht gefunden werden könne.
    Mit ellenlangen unverständlichen Zahlen- und Buchstabenkolonnen.


    Das Grundproblem hier ist die Tatsache, dass während des Bootvorgangs das /dev Directory bevölkert wird.
    Für so ziemlich jedes Gerät werden hier entsprechende Gerätedateien erzeugt.


    Vor langer Zeit gab es da relativ wenig.
    Der Kernel legte für die eine Platte ein /dev/hda an, root kannte sich noch aus
    und die Welt war schön.


    Root musste schon damals ein wenig wissen, wenn er mit Festplatten spielte. Es gab die AT (AdvancedTechnology) Festplatten und die SCSI Platten.
    Waren die ersteren für den kleinen Mann, so konnte schon damals ein SCSI Controller 15 Geräte bedienen und hatte für die damalige Zeit enorme Übertragunsraten.
    Der Vorgänger von udev (UserspaceDEVice) names sysfs (SYSemFileSystem) erzeugte, so er eine dieser Platten erkannte, ein /dev/hda, oder für SCSI (SmallComputerSystemInterface) halt ein /dev/sda.
    Ein HardDisk oder ScsiDisk Gerät.
    Erst ab Kernel 2.6 wurde das vereinheitlicht zu /dev/sdX für alle Platten, egal, welches Interface die hatten.
    (Andere Betriebssysteme verwenden noch heute /dev/hda, und bastelt man sich sein Linux selbst, kann man immer noch das alte Schema nehmen. Manche Distris tun das sogar. Auch manche Live"Rettungs"- dinger.) Es gab schon damals noch mehr solche Systeme, heute auch. Die spielen aber im SoHo Bereich keine Rolle. Wir beschränken uns hier auf die KleineMannPlattenWelt.


    Steckte man eine Platte um, so musste man die Config anpassen. Damals noch relativ einfach, heute etwas unübersichtlich.
    Eine unbefriedigende Situation. Wollte man die Platte in einem anderen Rechner betreiben, waren erst recht ziemliche Klimmzüge erforderlich.
    Es musste eine Partitionsbezeichnung her, die eindeutig war und blieb.Bislang wurden die einfach nach dem First-known-First-name Prinzip benannt.
    Die Platte, die als erstes erkannt wurde, erhielt die Gerätedatei /dev/sda, die zweite sdb.


    Das neue udev sollte das regeln. Es läuft im Gegensatz zum Vorgänger sysfs im Userspace und lässt sich somit leichter rumbasteln.
    Es kann auch etwas mehr, als nur Festplatten verwalten. Es ist zuständig für alle Geräte und managed auch die Zugriffsregeln.
    Auch USB-Cams, allerlei Krachmacher und sonstige Computeranhängsel werden jetzt damit verwaltet.


    Die Schemata der Festplattenadressierung:
    Ein ls /dev/disk/by- ergibt bei mir:
    by-id/ by-label/ by-partlabel/ by-partuuid/ by-path/ by-uuid/
    Und damit sind alle Adressierungsarten schon genannt.
    Beim Systemstart wird das Unterverzeichnis /dev/disk/ angelegt. Und dort werden für jede PARTITION für alle mit dieser Partition möglichen Adressierungsschemata im jeweiligen Unterverzeichnis entsprechende Links erzeugt.


    by-id
    Diese IDentifikation wird aus der Seriennummer des Gerätes erzeugt.


    by-path
    Verwendet den "Hardwarepfad". Damit ist die technische Strecke vom Prozessort bis zu den Eingeweiden des Gerätes gemeint. Das kann -je nach Motherboard- ein ziemlich langer Pfad sein. Für uns ist der komplette Pfad nicht interessant. Es genügt ungefähr zu wissen, was uns ein ls -l /dev/disk/by-path sagen kann. Die Beispielausgabe von einem meiner Systeme :
    lrwxrwxrwx 1 root root 10 27. Sep 16:07 pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
    liest sich, wie folgt: Am PCI-Bus mit der Adresse 0000:00:1f.2 hängt eins SCSI Gerät mit der Adresse 0:0:0:0. was die Partition 1 ist, und die zugehörige Gerätedatei ist /dev/sda1
    Damit kann ich mir einfach den zugehörigen Controller angucken: lspci -s 0000:00:1f.2
    Man muss das nicht zur Gänze verstehen, wer das möchte, sollte nach PCI Spec googlen.
    (lspci ist ein hochkomplexes Hackerkommando, was in der Tiefe nur Hardwareentwicklern dient, aber uns Laien zumindest ein wenig Einblick in die tatsächlichen Internas unserer Boards geben kann. man lspci sollte man schon ein wenig lesen)


    Ich selbst verwende für die Kennzeichnung von Paritionen schon länger
    by-label
    Das funktioniert für so ziemlich alle Dateisysteme, außer zfs (und natürlich spielen FAT und NTFS auch hier etwas anders; sie verwenden ein verkürztes Label.)
    Unter openSUSE ist das in YaST etwas unglücklich in den erweiterten Optionen "Volumekennung" genannt.
    Dort kann man für jede Partition ein Label nach Gusto vergeben. Ich nehme z.B. "boot-16-3" und weiß damit immer, dass ich im Jahre 2016 im März diese Bootpartition angelegt und mistkonfiguriert habe.
    Das Unterverzeichnis /dev/disk/by-label wird natürlich auch nur angelegt, wenn man mindestens ein solches Label vergeben hat.
    Diese Labels lassen sich mit den jeweiligen FS- Tools auch nachträglich vergeben. (btrfs, e2label (für alle ext*), swaplabel etc.)


    by-uuid
    Das ist die heutige Art Platten zu adressieren. Eine UUID (UniversalUniqueIDentification) ist eine ziemlich eindeutige Kennung, (sie heißt bei Windows GUID Globally....) und wird für Partitionen bei der Formatierung mit erzeugt. Das Tool uuidgen aus den util-linux Package erzeugt uns solche UUIDs nach Belieben zur Verwendung in unseren hochleistungsfähigen Quatschscripts oder wo auch immer wir über alle Systemgrenzen hinweg eindeutige Kennung zu brauchen glauben. FAT und NTFS Partitionen werden auch gelistet, aber eben mit ihrer kürzeren (und nicht eindeutigen) ID.


    by-partuuid
    by-partlabel
    tun das gleiche, sind aber untrennbar mit der GPT (GloballyuniqueidentificationPartitionTable) verbunden.


    Mit dieser Oberflächlichkeit sollte man nun wissen, wie man ein kaputtkonfigurtiertes Linux wieder zum Booten bewegt.
    Der wichtigste Befehl, um nachzugucken ist zweifelsohne


    Code
    lsblk -f

    Der zeigt uns sofort die Partitionen und ganz ausdrücklich und leicht zu kopieren die UUID an.


    Mit dieser Info kann man also seine Grubbootzeile leicht bestücken und wird ganz easy bis zum nächsten kunstvollen Konfigurationsfehler booten können.