Mais duas coisas: a mudança do Linux para a empresa e outros grandes servidores estava expondo a estática /dev
a ser quebrada. O avanço da tecnologia, tanto no consumidor quanto na empresa, estava expondo o static / dev como uma piada. [Esta resposta preenche mais a história de fundo, não particularmente por que o devfs foi substituído pelo udev].
Esgotamento do espaço numérico maior e menor
/dev
os arquivos são identificados dentro do kernel por seus números maiores e menores. O kernel nunca se preocupou com o nome (e você poderia, por exemplo, mv /dev/sda /dev/disk-1
e continuaria a funcionar - embora os programas não soubessem onde encontrá-lo).
Com uma estática /dev
, você precisa alocar um número maior / menor para todos os dispositivos em potencial que possam existir. Esses números precisam ser exclusivos globalmente, pois são enviados como parte de distribuições, não criados sob demanda. O problema é que eles são números de 8 bits - o intervalo é de 0 a 255.
Originalmente, por exemplo, o Linux começou com 8,0 sendo sda, 8,1 sendo sda1, 8,16 sendo sdb, etc. Mas as pessoas continuavam adicionando cada vez mais discos às máquinas, especialmente quando se considera coisas como canal de fibra. Então, em algum momento, os principais números de 65 a 71 foram adicionados para mais discos. Mais tarde, números principais 128–135. E, no entanto, as pessoas continuavam querendo mais discos ...
E surgiram formatos de tabela de partições como o GPT, suportando mais partições por disco. E é claro que outros dispositivos estavam consumindo o espaço numérico: vários controladores RAID, gerenciamento lógico de volumes, etc.
O resultado final pode ser visto na lista de dispositivos LANANA Linux . Se você olhar para a lista 2.6 (a única ainda lá), muitos dos principais números de blocos são 200 (máx: 255) - são usados. Claramente, os números teriam acabado.
Mudar para números maiores não foi fácil. Muda o ABI do kernel. Dependendo do sistema de arquivos, ele altera o layout do disco. Mas, é claro, a maioria desses dispositivos não existia em nenhum sistema, mesmo um que estava (por exemplo) ficando sem discos SCSI provavelmente tinha muitas coisas gratuitas - provavelmente não precisava de um disco rígido IBM XT, por exemplo.
Com uma dinâmica /dev
, a distribuição não precisa enviar os números do dispositivo. Eles não precisam mais ser globalmente únicos. Eles nem precisam ser únicos entre as botas.
Os nomes dos dispositivos eram imprevisíveis
Costumava ser muito fácil atribuir um número a tudo. Uma placa tinha dois canais IDE; cada canal IDE suportava um mestre e um escravo. Você pode atribuir em ordem de canal e ordem mestre e escravo. Então hda
se torna o primeiro canal, mestre; hdb
primeiro canal, escravo; hdc
segundo canal, mestre; etc. Esses eram previsíveis e estáveis. Eles podem ser alterados se você adicionar uma nova unidade ou remover uma, mas a alteração de hardware ausente, eles eram estáticos.
Você pode colocar o /dev/hda1
seu /etc/fstab
e ter certeza de que ele continuará funcionando, pelo menos, alterações de hardware ausentes.
IDE funcionou assim. Nada depois disso.
O SATA parece ser simples: uma porta, um disco. Mas não é assim; permite multiplicadores de porta. E permite troca a quente. Ainda assim, na ausência de alterações de hardware, você ainda pode manter o mapeamento funcionando.
USB é muito pior. Não apenas permite troca a quente, como é típico. As pessoas conectam drives flash USB o tempo todo. Além disso, os dispositivos podem demorar um pouco para serem analisados - e podem ser alterados sempre que lhes apetecer (por exemplo, quando você liga ou desliga o modo de armazenamento USB no telefone). Firewire é semelhante. Com você também não é possível criar um mapeamento estável.
Os discos conectados à rede não têm nenhuma ordem de porta inerente. A única ordem que o kernel usa é a ordem em que eles apareceram. O mesmo com volumes lógicos.
A busca pela velocidade de inicialização também piorou as coisas. Originalmente, o kernel ficaria feliz em aguardar e esperar bastante tempo para, por exemplo, todos os dispositivos USB serem inicializados. Para investigar completamente todos os barramentos SCSI, etc. Essas análises foram transformadas em tarefas em segundo plano; bota não iria mais esperar por eles. Os dispositivos são adicionados à medida que as sondas são concluídas.
Portanto, o kernel ficou com, mais ou menos, "qualquer ordem em que aparecerem". Isso significava que muitos tipos de dispositivos podem e mudaram de ordem a cada inicialização - o que estava em uma inicialização /dev/sdb
estava em outra /dev/sdc
. Isso faz da idéia de uma estática /dev
uma piada.
Sumário
Quando você considera a combinação de estática /dev
cada vez mais sem sentido devido a pedidos imprevisíveis de análise de dispositivos e continua alocando números estáticos principais / secundários, levando a um trabalho substancial a não acabar, fica claro por que os desenvolvedores do Linux optaram por mudar para uma dinâmica /dev
.
/dev
não abordam (fácil ou convenientemente) coisas como uma pessoa conectando um adaptador de rede USB ou adaptadores de rede virtual sendo adicionados ou removidos enquanto o sistema está em execução. Porém, nada impede você de desinstalarudev
e voltar à/dev
rota de diretório estática antiga .