Deux autres choses: le passage de Linux à l'entreprise et à d'autres grands serveurs exposait la statique /dev
à être brisée. L'avancement de la technologie, à la fois dans les consommateurs et les entreprises, exposait statique / dev comme une blague. [Cette réponse remplit davantage la trame de fond, pas particulièrement pourquoi devfs a été remplacé par udev].
Épuisement de l'espace des nombres majeurs et mineurs
/dev
les fichiers sont identifiés à l'intérieur du noyau par leur numéro majeur et mineur. Le noyau ne s'est jamais soucié du nom (et vous pourriez, par exemple, mv /dev/sda /dev/disk-1
et il continuerait à fonctionner, bien que les programmes ne sachent pas où le trouver).
Avec un statique /dev
, vous devez attribuer un numéro majeur / mineur à chaque appareil potentiel qui pourrait exister. Ces numéros doivent être uniques à l'échelle mondiale, car ils sont expédiés dans le cadre de distributions, et non créés à la demande. Le problème est qu'ils sont chacun des nombres de 8 bits - la plage est de 0 à 255.
À l'origine, par exemple, Linux a commencé avec 8,0 étant sda, 8,1 étant sda1, 8,16 étant sdb, etc. Mais les gens continuaient d'ajouter de plus en plus de disques aux machines, surtout quand on considère des choses comme le Fibre Channel. Donc, à un moment donné, des nombres majeurs 65–71 ont été ajoutés pour plus de disques. Plus tard, les nombres majeurs 128-135. Et pourtant, les gens voulaient toujours plus de disques ...
Et les formats de table de partition comme GPT sont apparus, prenant en charge plus de partitions par disque. Et bien sûr, d'autres appareils mangeaient dans l'espace numérique: divers contrôleurs RAID, gestion du volume logique, etc.
Le résultat final peut être vu dans la liste des périphériques LANANA Linux . Si vous regardez la liste 2.6 (la seule qui existe toujours), une grande partie des numéros de bloc jusqu'à 200 (max: 255) sont utilisés. De toute évidence, les chiffres seraient épuisés.
Passer à un plus grand nombre n'a pas été facile. Il change le noyau ABI. Selon le système de fichiers, il modifie la disposition sur le disque. Mais, bien sûr, la plupart de ces périphériques n'existaient sur aucun système, même celui qui était (par exemple) à court de disques SCSI avait probablement beaucoup de choses gratuites - il n'avait probablement pas besoin d'un disque dur IBM XT, par exemple.
Avec une dynamique /dev
, la distribution n'a pas à expédier les numéros de périphérique. Ils ne doivent plus être uniques au monde. Ils n'ont même pas besoin d'être uniques à travers les bottes.
Les noms des appareils étaient imprévisibles
Auparavant, il était très facile d'attribuer un numéro à tout. Une carte avait deux canaux IDE; chaque canal IDE prend en charge un maître et un esclave. Vous pouvez attribuer dans l'ordre des canaux et dans l'ordre maître puis esclave. Devient hda
ainsi le premier canal, maître; hdb
premier canal, esclave; hdc
deuxième canal, maître; etc. Celles-ci étaient prévisibles et stables. Ils peuvent changer si vous ajoutez un nouveau lecteur ou en supprimez un, mais en l'absence de changement matériel, ils étaient statiques.
Vous pouvez mettre /dev/hda1
votre /etc/fstab
et être sûr qu'il continuera à fonctionner, au moins en l'absence de changements matériels.
IDE fonctionnait comme ça. Rien après ça.
SATA semble être simple: un port, un disque. Mais non; il permet des multiplicateurs de ports. Et il permet le remplacement à chaud. Pourtant, en l'absence de modifications matérielles, vous pouvez toujours continuer à faire fonctionner le mappage.
L'USB est bien pire. Non seulement il permet le remplacement à chaud, mais il est typique. Les gens branchent des clés USB à tout moment. De plus, les appareils peuvent prendre un certain temps à sonder - et peuvent en fait changer quand ils en ont envie (par exemple, lorsque vous activez ou désactivez le mode de stockage USB sur votre téléphone). Firewire est similaire. Dans les deux cas, vous ne pouvez pas vraiment trouver une cartographie stable.
Les disques connectés au réseau n'ont aucun ordre de port inhérent. Le seul ordre utilisé par le noyau est l'ordre dans lequel il est apparu. Idem pour les volumes logiques.
La quête de la vitesse de démarrage a également aggravé les choses. À l'origine, le noyau se contentait de rester assis et d'attendre assez longtemps, par exemple, tous les périphériques USB pour s'initialiser. Pour sonder complètement tous les bus SCSI, etc. Ces sondes ont été transformées en tâches d'arrière-plan; boot ne les attendrait plus. Les appareils sont ajoutés à mesure que les sondes sont terminées.
Ainsi, le noyau a été laissé avec, plus ou moins, "quel que soit l'ordre dans lequel ils apparaissent". Cela signifiait que de nombreux types de périphériques pouvaient changer et changeaient d'ordre à chaque démarrage - ce qui était sur un démarrage /dev/sdb
était sur un autre démarrage /dev/sdc
. Cela fait de l'idée d'une statique /dev
une plaisanterie.
Sommaire
Lorsque vous considérez que la combinaison de l'électricité statique /dev
devient de plus en plus insignifiante en raison d'ordres de sonde de périphérique imprévisibles et que vous continuez à allouer des nombres majeurs / mineurs statiques conduisant à un travail important pour ne pas s'épuiser, il devient clair pourquoi les développeurs de Linux ont choisi de passer à une dynamique /dev
.
/dev
ne traitent pas (facilement ou commodément) des choses comme une personne connectant une carte réseau USB ou des cartes réseau virtuelles ajoutées ou supprimées pendant que le système fonctionne. Cependant, rien ne vous empêche de désinstallerudev
et de revenir à l'ancienne/dev
route de répertoire statique .