Vor allem beim Herumspielen mit Bootloadern werden häufig numerische Laufwerks- und Partitionsnummern verwendet. Zum Beispiel beziehen sich meine UEFI-Starteinträge , wie /boot/grub/grub.cfg
ich sehe set root='hd0,gpt2'
, häufig auf Laufwerks- / Partitionsnummern, und sie scheinen in fast jedem Kontext aufzutauchen, in dem es um Bootloader geht.
Da wir nun UUID und PARTUUID haben, scheint es unglaublich instabil zu sein, Partitionen auf diese Weise zu adressieren.
Meine Fragen sind daher zweifach:
Ist dieses Adressierungsschema so instabil wie oben beschrieben? Fehlt im Standard etwas, das bedeutet, dass dieses Schema weitaus zuverlässiger ist als erwartet, oder macht dieses Adressierungsschema Ihr System wirklich nicht mehr startfähig (bis Sie zumindest Ihre Starteinträge korrigiert haben), da Ihre Laufwerke einfach in a erkannt werden andere Reihenfolge oder stecken Sie sie in verschiedene Steckplätze auf Ihrem Motherboard?
Wenn die Antwort auf die obige Frage Ja lautet, warum wird dieses Adressierungsschema dann weiterhin verwendet? Wäre die Verwendung von UUID oder PARTUUID für alles nicht wesentlich stabiler und konsistenter?
Antworten:
Das einfache Nummerierungsschema wird in neueren Systemen nicht verwendet (wobei "recent" Ubuntu 9 und höher ist und möglicherweise auch andere Distributionen in dieser Ära angepasst wurden).
Beachten Sie, dass die Root-Partition mit dem einfachen Nummerierungsschema festgelegt wurde. Dies ist jedoch nur eine Standard- oder Ersatzeinstellung, die normalerweise mit dem nächsten Befehl überschrieben wird, z.
Dies wählt die Root-Partition basierend auf der UUID des Dateisystems aus.
In der Praxis ist das einfache Nummerierungsschema normalerweise stabil (solange keine Hardwareänderungen vorgenommen werden). Das einzige Beispiel, bei dem ich eine nicht vorhersehbare Nummerierung beobachtete, war ein System mit vielen USB-Laufwerken, die anhand eines First-Come-First-Serving-Musters aufgelistet und dann als IDE-Laufwerke emuliert wurden. Keiner dieser Prozesse ist von Natur aus chaotisch, daher gehe ich von einem Problem bei dieser speziellen System-BIOS-Implementierung aus.
Hinweis: "Root-Partition" bezeichnet in diesem Kontext die Partition, von der aus gebootet werden soll. Diese Partition kann sich von der Partition unterscheiden, die das "Root-aka. / Dateisystem" enthält.
quelle
Genau genommen spricht UUID überhaupt nicht an.
Die Adressierung ist sehr, sehr einfach: Laufwerk X Sektor Y lesen - oder auch. Speicheradresse Z auslesen - oder sonst. Die Adressierung ist einfach, schnell, lässt wenig Interpretationsspielraum und ist überall.
UUID adressiert nicht. Stattdessen wird gesucht, gefunden, manchmal darauf gewartet, dass Geräte angezeigt werden, und es werden auch Dateisysteme verstanden (★) verstanden. Und je nachdem, wie viele Geräte es gibt, kann es sehr lange dauern. Und einmal gefunden, zurück zur normalen Adressierung.
In GRUB heißt dies
search
(★★) und ist nur verfügbar, wenn GRUB bereits Flügel entwickelt hat (die Suche ist ein Modul, wie jedes unterstützte Dateisystem, und steht daher erst nach dem Laden des Kerns zur Verfügung). Unter Linux ist es (zum Beispiel) genanntfindfs
, findfs die Blockgeräte im System für ein Dateisystem oder eine Partition suchen suchen .Es durchläuft alle Blockgeräte, weckt sie aus dem Standby-Modus, liest Daten und das Ergebnis kann sogar noch zufällig sein, wenn die UUID nicht eindeutig ist, wie es sein sollte (nach einem
dd
Unfall oder ähnlichem), oder Sie erhalten kein Ergebnis, wenn die UUID geändert wurde. UUIDs sind auch anfällig für Konfigurationsfehler.Im Allgemeinen sind UUIDs großartig, und Sie sollten sie natürlich überall verwenden, wenn sie verfügbar sind, insbesondere dann, wenn die herkömmliche Adressierung fehlschlägt, da die Reihenfolge der Laufwerke unter Linux zufällig ist. Verstehen Sie jedoch, dass die Komplexität über das hinausgeht, was eine einfache Adressierung bewirken soll. Und gerade in den frühen Stadien von Bootloadern ist dies möglicherweise noch keine Option. Die Adressierung steht an erster Stelle, das Wachsen der Flügel kommt später.
Für den Bootloader ist es möglicherweise nicht erforderlich, sich die Mühe zu machen (nicht jeder Bootloader unterstützt eine Vielzahl von Dateisystemen wie GRUB). Wenn
hd0
aufgrund von Umständen garantiert "die Festplatte, von der wir gebootet haben" (vom BIOS bereitgestellt), und Sie daher Probleme mit der zufälligen Laufwerksreihenfolge ausschließen können, ist es möglicherweise nicht erforderlich, eine potenziell enorme Liste anderer Partitionen in zu durchsuchen Suche nach UUIDs.Wenn Sie sich in Ihrer Konfiguration sicher genug sind, um zu sagen, dass dies
hd0,gpt2
die gewünschte Konfiguration ist und dies auch sein muss, und es auch nicht anders sein kann, dann ist es nichts Falsches daran, sie so zu verwenden. Manchmal funktioniert die einfache Adressierung einwandfrei.(★) Ich habe dies zuvor für LABELs hier erklärt ...
... und bei UUIDs ist es ähnlich.
(★★) Eigentlich hat GRUB
search
eine--hint
Option, und ... jetzt habe ich den Quellcode nicht überprüft und es ist nicht einmal in ihrem Handbuch dokumentiert, aber eine solche Option wäre sinnvoll, um Ihnen das Beste aus beiden Welten zu bieten: Der Hinweis sollte darauf hinweisensearch
, dass zuerst diese Partition überprüft werden muss. Wenn die UUID wie erwartet übereinstimmt, wird das Gerät mit minimalem Aufwand identifiziert. Wenn sie nicht übereinstimmt, wird trotzdem auf die vollständige Suche zurückgegriffen, damit die Dinge irgendwie weiter funktionieren .Darüber hinaus werden zuvor gefundene UUIDs in der Regel zwischengespeichert, sodass nicht immer wieder alle Geräte durchlaufen werden müssen - und dies funktioniert auch hervorragend, sofern die gesuchte UUID tatsächlich irgendwo vorhanden ist mache es zuerst in den Cache.
quelle
Vergessen Sie auch nicht Etiketten. Sie sind nicht so eindeutig wie UUIDs, aber viel informativer und machen Ihre fstab für den Menschen lesbar. Wenn es sich um Ihren Desktop oder eine kleine Firma handelt - mit anderen Worten, wenn Sie ein paar bis ein paar Dutzend Laufwerke verwalten, bevorzugen Sie möglicherweise Labels gegenüber UUIDs.
Über @ frostschutz ' hervorragende Antwort auf Ihre Frage nachgedacht , ist ein Szenario, in dem Sie wahrscheinlich die "klassische" Geräte-Link-Adressierung bevorzugen, das VM-Setup, insbesondere in den VM-for-Hire-Clouds (abgekürzt und verwirrend "IaaS"). Angenommen, Sie möchten ein Ubunzima 04.18- Image anpassen . Sie erstellen eine (Wegwerf-) VM mit zwei Laufwerken: eines ist das (Wegwerf-) Systemlaufwerk und das zweite das, das Sie bereitstellen und anpassen. Vermutlich mounten Sie auch die UEFI-Boot-Partition, wenn Sie einen neueren Grub auf Ihrer neuen Festplatte erstellen möchten. Angenommen, Sie haben Mount-Punkte für die Zielpartitionen unter ausgewählt
/mnt
, sieht Ihre gewünschte Mount-Tabelle wie folgt ausSie erstellen also aus dem vorhandenen, vom Anbieter bereitgestellten, Cloud-fähigen Image zwei identische Laufwerke, verbinden sie mit einer neuen VM und starten sie. Natürlich,
Sie sehen bereits, wohin das alles führt.
Beim ersten Start dieser frankencontraption wurde sie
sda9
als EFI- Startpartition ausgewählt , Linux entschied sich jedoch für die erneute Bereitstellungsdb1
als Root-FS:Und da mein Rollout-Skript dafür ziemlich unvorbereitet war, habe ich am Ende ein nicht bootfähiges Dud-Image, ohne dass sich ein einziges Tool während des Frankenbaus im Log beschwert!
Natürlich habe ich die Mount-Tabelle in den Protokollen ausgedruckt. Und natürlich ist das Durcheinander sehr schwer zu erkennen, da mount (8) die Drucke in der Reihenfolge zwischen zufällig und dem ausgibt, in der die Geräte montiert waren. Es war also nicht verwunderlich, dass ich es nicht sofort erkannt habe. Und stellen Sie sich vor, dass dasselbe Skript (jedoch mit Datenträgern aus verschiedenen Images) zuvor so reibungslos funktioniert hat wie der 15-jährige Glenfiddich. Ratet mal, wie viele Stunden ich damit verbracht habe, meine Haare über den Baumstamm zu ziehen, um das Problem herauszufinden?
Es gibt keine festen Regeln für jede Situation, von einem Desktop-PC über ein in einen Router eingebettetes Linux bis hin zu einem Android-Telefon und einem Cloud-Rechenzentrum. Eine SO-Antwort soll objektiv sein, und meine Erfahrungen oder Vorlieben natürlich nicht. Daher zeige ich eher Beispiele für logisches Denken, wenn ich zwischen verschiedenen Methoden zum Identifizieren von Partitionen wähle:
Lass es in Ruhe, wenn du keinen Grund hast es nicht zu tun. Die UUIDs sind die Standardeinstellungen für die meisten modernen Distributionen. Wenn Sie ein zweites Laufwerk hinzufügen möchten, versuchen Sie es und entscheiden Sie sich. Möglicherweise müssen Sie es nicht einmal wissen. Wenn Ihr System immer noch bootet und Sie das neue Gerät sehen und partitionieren können, formatieren Sie es und fügen Sie es zu fstab hinzu (nach UUID, nach LABEL oder nach einem
/dev
Link gelten dieselben Überlegungen). Erst wenn sich Ihr System weigert, nach dem Einstecken des zusätzlichen Laufwerks zu starten, haben Sie ein Problem (und möglicherweise ist das Ändern der Startreihenfolge im UEFI-BIOS der schnellste Ausweg).Pragmatisch gesehen ist die Kennzeichnung, welcher SATA-Anschluss an welches Laufwerk in Ihrem eigenen Desktop angeschlossen ist, möglicherweise die schnellste und einfachste Lösung. Die Änderung der Art und Weise, in der das System gestartet wird, und die Wiederherstellung nach einem wahrscheinlichen Startfehler sind jedoch wahrscheinlich die schlimmsten Probleme. Aber wenn Sie es für 50 Programmierer schaffen, die der Meinung sind, dass das Einspielen eines zusätzlichen Laufwerks kein Problem ist, das Sie stören könnte, sollten Sie zumindest nicht die Grenzen Ihres Glücks testen und sicherstellen, dass alle anfänglichen Startlaufwerke von grub als
hd0
und erkannt werden das System alssda
.Etiketten zur Verwaltung Ihrer eigenen Laufwerke und Partitionen auf Ihrem Desktop oder in drei oder in einem kleinen Milieu (einem Wohnzimmer eines Hauses voller Software-Ingenieure, die den Ort auf lustige Weise als "Start-up-Büro" bezeichnen). Wenn Sie ein physisches Laufwerk aus dem Computer einer anderen Person ziehen, wissen Sie, woher es stammt, wenn Sie konsequent Etiketten verwenden.
Wenn lsblk (8) sagt
LABEL=bubba-boot
, wissen Sie, dass es aus der Maschine namens bubba gezogen wurde . außerdem bubba-Boot rollt über meine Zunge viel einfacher als 6864c4ea-f9b9-46db-b875-4d7fc2981007 , die zu meinem verdorbenen Geschmack, geradezu ein jawbreaker. Sicherzustellen, dass Etiketten eindeutig sind, verlagert sich jetzt auf Sie. Als Gegenleistung erhalten Sie jedoch die Aussagekraft des Etiketts./dev
-linkbasierte Benennung, wenn Sie ein Bataillon von relativ kurzlebigen, wartungsarmen VMs befehlen, die das gleiche Image hervorbringen, und Sie würden nicht auf Ihren Wochenlohn wetten, dass alle ihre UUIDs das Versprechen der UU einhalten. Jeder vernünftige VM-Dienst, sei es Vyper-H auf Ihrem eigenen physischen Server oder in der Kugel Cloud oder so, darf niemals Ihr Startlaufwerk aufrufensde
, und der zweite und der einzige anderesdc
². Auf einer physischen Maschine hingegen können Sie diese Anordnung problemlos erreichen, indem Sie SATA-Kabel kreativ anschließen.Ich schweife jetzt ab, aber in diesem Szenario gehe ich denselben Weg mit der sogenannten „konsistenten“ Benennung der Ethernet-Schnittstelle: Deaktiviere sie in VMs. Verstehen Sie mich nicht falsch, die Benennung ist wirklich konsistent, solange die NIC, die Sie in den PCI-Steckplatz 4 gesteckt haben, nicht plötzlich von selbst auf Steckplatz 5 springt, während Sie nicht hinsehen (oder vielleicht sogar, während Sie NICs sind) habe überhaupt keine Schande). Leider tun sie dies tatsächlich im Milieu des „Bataillons der VMs“. In diesem Fall
eth0
ist es widersprüchlich konsistenter alsenp0s4f6
. Der VM-Anbieter hat nicht versprochen, seine virtuelle NIC-Nummer 1 immer in Steckplatz 4 auf dem PCI-Bus 0 zu platzieren (und keine der 3 genannten Entitäten ist physisch real), und es wird immer die Funktion 6 sein. Aber Sie können hübsch sein Viel hängt davon ab, dass die erste Schnittstelle vor der zweiten geht, da sie normalerweise dasselbe Treibermodul haben, das üblicherweise aus der virtio-Familie stammt (und wenn die ersteeth0
Netzwerkkarte nicht immer dieselbe ist, gilt immer noch dieselbe Note²).¹ Natürlich bildlich. Ich war viel zu lange in diesem Geschäft, um noch welche zu haben.
² Wenn ja, würde ich ernsthaft erwägen
, vor ihnen wegzulaufenund den Anbieter oder die VM-Hypervisor-Software zu wechseln.quelle
Beide Schemata können mit den meisten Linux-Distributionen gemischt und abgeglichen werden.
Die Konsequenzen können je nach Anwendungsfall wünschenswert oder unerwünscht sein - zum Beispiel kann man das ältere Schema bevorzugen (und sogar Persistenz-Hacks im Udev-Stil deaktivieren), wenn Hot-Replacement von Laufwerken (virtuelle Hardware oder tatsächliche Hardware) ohne Änderung der Konfigurationsdateien erforderlich ist wollte.
quelle
Die Antwort auf Ihre zweite Frage ("Warum wird dieses Adressierungsschema weiterhin verwendet?") Ist, denke ich, Trägheit. Ja, es ist absolut möglich, nur UUIDs auf mit GPT partitionierten Festplatten zu verwenden. Sie können in UUIDs anstelle von
/dev/xxx
Namen verwenden/etc/fstab
. Und da wir nun die Discoverable Partitions Specification haben , müssen Sie in vielen Fällen nicht einmal mehr die UUIDs angeben. Partitionieren Sie einfach Ihre Festplatte mit dem Partitionstyp, und die Partitionen werden automatisch abgerufen. Auf meinem Computerroot=
fehlt der Eintrag in der Kernel-Befehlszeile.Apropos Bootloader: GRUB ist auf modernen UEFI-PCs meist überflüssig, da es sehr wenig mit dem Bootstrapping der Maschine zu tun hat. Heutzutage fungiert GRUB lediglich als Kernelauswahlprogramm, für welche Aufgabe es einfachere und bessere Alternativen gibt, wie zum Beispiel systemd-boot.
quelle