Zwei weitere Dinge: Der Einstieg von Linux in Unternehmen und andere große Server führte dazu, dass statische Aufladungen beschädigt wurden /dev
. Die Weiterentwicklung der Technologie sowohl im Consumer- als auch im Enterprise-Bereich machte Static / Dev zum Scherz. [Diese Antwort füllt einen größeren Teil der Hintergrundgeschichte aus, insbesondere nicht, warum devfs durch udev ersetzt wurde].
Erschöpfung des Major & Minor Number Space
/dev
Dateien werden im Kernel anhand ihrer Haupt- und Nebennummern identifiziert. Der Kernel hat sich nie wirklich um den Namen gekümmert (und Sie könnten es zum Beispiel, mv /dev/sda /dev/disk-1
und es würde weiterhin funktionieren - obwohl Programme natürlich nicht wissen würden, wo sie ihn finden können).
Mit einer statischen /dev
Nummer müssen Sie jedem potenziellen Gerät, das möglicherweise vorhanden ist, eine Haupt- / Nebenstellennummer zuweisen. Diese Nummern müssen global eindeutig sein, da sie als Teil von Distributionen versendet werden und nicht nach Bedarf erstellt werden. Das Problem ist, dass es sich jeweils um 8-Bit-Zahlen handelt. Der Bereich liegt zwischen 0 und 255.
Ursprünglich begann Linux beispielsweise mit 8,0 als sda, 8,1 als sda1, 8,16 als sdb usw. Aber die Leute fügten immer mehr Festplatten zu Maschinen hinzu, besonders wenn man Dinge wie Fibre Channel in Betracht zog. Irgendwann kamen also die Hauptnummern 65–71 für mehr Festplatten hinzu. Später Hauptnummern 128-135. Und doch wollten die Leute immer mehr Festplatten ...
Partitionstabellenformate wie GPT kamen auf den Markt und unterstützten mehr Partitionen pro Festplatte. Und natürlich fraßen andere Geräte durch den Nummernraum: verschiedene RAID-Controller, logische Datenträgerverwaltung usw.
Das Endergebnis ist in der LANANA Linux Device List zu sehen . Wenn Sie sich die 2.6-Liste ansehen (die einzige, die noch vorhanden ist), werden viele der Block-Hauptnummern bis 200 (max: 255) verwendet. Offensichtlich wären die Zahlen ausgegangen.
Zu größeren Nummern zu wechseln war nicht einfach. Es ändert den Kernel ABI. Je nach Dateisystem ändert sich das Layout der Festplatte. Aber natürlich gab es die meisten dieser Geräte nicht auf einem System, und selbst auf einem, dem (zum Beispiel) die SCSI-Festplatten ausgegangen waren, gab es wahrscheinlich viele kostenlose Dinge - es war wahrscheinlich keine IBM XT-Festplatte erforderlich. beispielsweise.
Mit einer Dynamik /dev
muss die Distribution die Gerätenummern nicht versenden. Sie müssen nicht mehr global eindeutig sein. Sie müssen nicht einmal über Stiefel hinweg einzigartig sein.
Gerätenamen waren nicht vorhersehbar
Früher war es ganz einfach, alles mit einer Nummer zu versehen. Eine Karte hatte zwei IDE-Kanäle; Jeder IDE-Kanal unterstützt einen Master und einen Slave. Sie können in Kanalreihenfolge und Master-dann-Slave-Reihenfolge zuweisen. So hda
wird erster Kanal, Meister; hdb
erster Kanal, Sklave; hdc
zweiter Kanal, Master; etc. Die waren vorhersehbar und stabil. Sie können sich ändern, wenn Sie ein neues Laufwerk hinzufügen oder entfernen, aber ohne Hardwareänderung waren sie statisch.
Sie könnten setzen /dev/hda1
in Ihrem /etc/fstab
und sicher sein , es Arbeits bleiben würde, zumindest nicht anwesend Hardware - Änderungen.
IDE hat so funktioniert. Nichts danach.
SATA scheint einfach zu sein: ein Port, eine Festplatte. Aber nicht so; Es erlaubt Port-Multiplikatoren. Und es ermöglicht Hot-Swap. Trotz fehlender Hardware-Änderungen können Sie das Mapping weiterhin verwenden.
USB ist viel schlimmer. Es erlaubt nicht nur Hot-Swap, es ist typisch. Die Leute stecken ständig USB-Sticks ein. Außerdem kann die Prüfung von Geräten eine Weile dauern - und sie können sich ändern, wann immer sie möchten (z. B. wenn Sie den USB-Speichermodus Ihres Telefons aktivieren oder deaktivieren). Firewire ist ähnlich. Mit beidem können Sie sich wirklich keine stabile Zuordnung einfallen lassen.
An das Netzwerk angeschlossene Festplatten haben keine inhärente Anschlussreihenfolge. Die einzige Reihenfolge, die der Kernel verwendet, ist die Reihenfolge, in der sie angezeigt wurden. Gleiches gilt für logische Volumes.
Das Streben nach Startgeschwindigkeit verschlimmerte die Situation ebenfalls. Ursprünglich saß der Kernel gerne herum und wartete ziemlich lange, bis z. B. alle USB-Geräte initialisiert waren. Vollständige Überprüfung aller SCSI-Busse usw. Diese Überprüfungen wurden für Hintergrundaufgaben durchgeführt. Boot würde nicht länger auf sie warten. Die Geräte werden hinzugefügt, sobald die Tests abgeschlossen sind.
So blieb dem Kernel mehr oder weniger "in welcher Reihenfolge sie auch auftauchen". Dies bedeutete, dass viele Arten von Geräten die Reihenfolge bei jedem Start ändern können und müssen - was sich auf einem Start /dev/sdb
befand, befand sich auf einem anderen Start /dev/sdc
. Das macht die Idee einer Statik zu /dev
einem Witz.
Zusammenfassung
Wenn Sie die Kombination aus statischer /dev
Aufladung nehmen, die aufgrund unvorhersehbarer Reihenfolge der Geräteprüfungen immer bedeutungsloser wird, und weiterhin statische Haupt- / Nebenzahlen zuweisen, die zu erheblicher Arbeit führen, wird deutlich, warum Linux-Entwickler auf dynamische Aufladung umsteigen /dev
.
/dev
adressieren nicht (einfach oder bequem) Dinge wie eine Person, die einen USB-Netzwerkadapter einsteckt, oder virtuelle Netzwerkadapter, die hinzugefügt oder heruntergefahren werden, während das System läuft. Nichts hindert Sie jedoch daran, das Programm zu deinstallierenudev
und zur normalen statischen/dev
Verzeichnisroute zurückzukehren.