Altre due cose: il passaggio di Linux nell'azienda e altri server di grandi dimensioni stava esponendo l'elettricità statica /dev
. La tecnologia avanzata, sia nel consumatore che nell'impresa, stava esponendo statico / sviluppo come uno scherzo. [Questa risposta riempie di più il retroscena, non in particolare perché devfs è stato sostituito con udev].
Esaurimento dello spazio numerico maggiore e minore
/dev
i file sono identificati all'interno del kernel dai loro numeri maggiori e minori. Il kernel non si è mai preoccupato del nome (e potresti, ad esempio, mv /dev/sda /dev/disk-1
continuare a funzionare, anche se ovviamente i programmi non saprebbero dove trovarlo).
Con un statico /dev
, è necessario allocare un numero maggiore / minore per ogni potenziale dispositivo che potrebbe esistere. Questi numeri devono essere univoci a livello globale, poiché vengono spediti come parte di distro, non creati su richiesta. Il problema è che sono tutti numeri a 8 bit: l'intervallo è compreso tra 0 e 255.
Inizialmente, ad esempio, Linux ha iniziato con 8,0 essendo sda, 8,1 essendo sda1, 8,16 essendo sdb, ecc. Ma le persone continuavano ad aggiungere sempre più dischi alle macchine, specialmente quando si considerano cose come il canale in fibra ottica. Quindi ad un certo punto, sono stati aggiunti i numeri maggiori 65–71 per più dischi. Più tardi, i numeri maggiori 128–135. Eppure la gente continuava a desiderare più dischi ...
E sono arrivati formati di tabelle di partizioni come GPT, che supportano più partizioni per disco. E ovviamente altri dispositivi stavano mangiando attraverso lo spazio numerico: vari controller RAID, gestione del volume logico, ecc.
Il risultato finale può essere visualizzato nell'elenco dei dispositivi LANANA Linux . Se guardi la lista 2.6 (l'unica ancora lì), molti dei numeri maggiori del blocco attraverso 200 (max: 255) —sono usati. Chiaramente, i numeri si sarebbero esauriti.
Passare a numeri più grandi non è stato facile. Cambia l'ABI del kernel. A seconda del file system, cambia il layout su disco. Ma, naturalmente, la maggior parte di quei dispositivi non esisteva su nessun sistema, anche uno che (ad esempio) stava esaurendo i dischi SCSI probabilmente aveva un sacco di cose gratuite - probabilmente non aveva bisogno di un disco rigido IBM XT, per esempio.
Con una dinamica /dev
, la distribuzione non deve spedire i numeri dei dispositivi. Non devono più essere unici a livello globale. Non devono nemmeno essere unici tra gli stivali.
I nomi dei dispositivi erano imprevedibili
In passato era molto semplice assegnare un numero a tutto. Una scheda aveva due canali IDE; ogni canale IDE supportava un master e uno slave. È possibile assegnare in ordine di canale e in ordine master-poi-slave. Quindi hda
diventa il primo canale, maestro; hdb
primo canale, schiavo; hdc
secondo canale, master; ecc. Quelli erano prevedibili e stabili. Potrebbero cambiare se aggiungi una nuova unità o ne rimuovi una, ma in assenza di modifiche hardware, erano statiche.
Potresti inserire il /dev/hda1
tuo /etc/fstab
ed essere sicuro che rimarrebbe funzionante, almeno assente le modifiche hardware.
IDE ha funzionato così. Niente dopo.
SATA sembra essere semplice: una porta, un disco. Ma non è così; consente moltiplicatori di porte. E consente hot-swap. Tuttavia, in assenza di modifiche hardware, puoi effettivamente continuare a far funzionare la mappatura.
USB è molto peggio. Non solo consente hot swap, è tipico. Le persone collegano continuamente unità flash USB. Inoltre, i dispositivi possono impiegare un po 'di tempo a sondare e possono effettivamente cambiare ogni volta che ne hanno voglia (ad esempio, quando si accende o si spegne la modalità di archiviazione USB sul telefono). Firewire è simile. Con nessuno dei due puoi davvero trovare una mappatura stabile.
I dischi collegati in rete non hanno alcun ordine di porta intrinseco. L'unico ordine utilizzato dal kernel è l'ordine in cui sono comparsi. Lo stesso vale per i volumi logici.
La ricerca della velocità di avvio ha anche peggiorato le cose. Inizialmente, il kernel si sarebbe felicemente seduto in giro e avrebbe aspettato abbastanza tempo per l'inizializzazione, ad esempio, di tutti i dispositivi USB. Per sondare completamente tutti i bus SCSI, ecc. Tali sonde sono state trasformate in attività in background; l'avvio non li aspetterebbe più. I dispositivi vengono aggiunti al completamento delle sonde.
Quindi al kernel è rimasto, più o meno, "qualunque sia l'ordine in cui si presentano". Ciò significava che molti tipi di dispositivi possono e hanno cambiato l'ordine ad ogni avvio: ciò che era su un avvio /dev/sdb
era su un altro avvio /dev/sdc
. Questo rende l'idea di uno statico /dev
uno scherzo.
Sommario
Quando si considera che la combinazione di elettricità statica /dev
diventa sempre più insignificante a causa di ordini imprevedibili di sondaggi del dispositivo e si continua a allocare numeri statici maggiori / minori che portano a un notevole lavoro che non si esaurisce, diventa chiaro il motivo per cui gli sviluppatori di Linux hanno scelto di passare a una dinamica /dev
.
/dev
non indirizzano (facilmente o comodamente) cose come una persona che collega una scheda di rete USB o che le schede di rete virtuali vengono aggiunte o rimosse mentre il sistema è in esecuzione. Nulla ti impedisce di disinstallareudev
e tornare alla semplice vecchia/dev
route di directory statica , però.