O que está por trás da convenção de nomenclatura de discos do Linux com sdX e hdX?

6

Alguém pode me dizer o que está por trás da convenção de nomenclatura hdX e sdX para discos rígidos no Linux? Eu entendo que é uma "convenção", mas o que isso significa? Isso significa, por exemplo, que uma unidade SCSI deve ser chamada sdX ou não funcionará?

O pano de fundo é que estou mexendo com um sistema operacional e vmware baseado em Linux, e assim posso chamar as unidades como eu quiser. Eu sei que a convenção é legal para os usuários, só estou querendo saber se isso é requerido pelo kernel.

    
por Paul Holden 09.12.2009 / 21:04

3 respostas

6

O kernel lida com dois tipos de drives:

  • unidades IDE, como discos rígidos antigos e muitas unidades de CD / DVD - usam o nome hd $ x
  • unidades SCSI - usam o nome sd $ x

As unidades SATA, SAS e USB usam o subsistema SCSI porque possuem certas vantagens que os drivers IDE mais antigos não possuem. Portanto, esses dispositivos controladores são abstraídos para parecerem com controladores SCSI, contendo dispositivos SCSI, para o computador host.

Com as unidades IDE, a convenção de nomenclatura é bastante rígida:

  • hda é a unidade mestre no primeiro barramento
  • hdb é o drive escravo no primeiro barramento
  • hde é a unidade mestre no terceiro barramento

... e assim por diante. (E sim, é possível ter mais de dois barramentos IDE). Então, quando você tem uma unidade de CD ou DVD em um barramento IDE, não é incomum ver essas unidades travadas no segundo barramento IDE (porque é assim que sempre foi feito - mas isso é outra discussão). Então é bem possível ter hdc sem ter hda e hdb.

Isso é importante saber porque o subsistema SCSI é diferente. As unidades são rotuladas na ordem em que são detectadas.

Digamos que você tenha um barramento SCSI old-school e tenha desconectado os discos na ID SCSI 0, 3 e 5. Essas unidades seriam detectadas como sda, sdb e sdc, respectivamente.

Agora, suponha que você tenha comprado uma quarta unidade e, por motivos conhecidos apenas por você, a atribua à SCSI ID 4. Essa nova unidade agora é detectada como sdc, enquanto a unidade preexistente na ID SCSI 5 é agora sdd. Isso pode causar todos os tipos de hilaridade se você estiver se referindo a partições pelo nome absoluto - depois de inicializar com a nova unidade inserida, / dev / sdc1 não é o que costumava ser, você quer dizer / dev / sdd1 agora.

Esta é uma razão pela qual o RedHat (e outros) gosta da funcionalidade e2label, onde você atribui um rótulo exclusivo à partição e o monta por referência a isso.

Eu não sei porque o Linux foi construído assim. Sistemas operacionais mais antigos, como Solaris, forçam você a se referir ao disco por endereço SCSI - assim, / dev / dsk / c0t0d0s0 (controlador 0, destino (ou ID) 0, disco 0 (legado, não pergunte), fatia (ou partição) 0) será absoluto, não importa quais outros discos estejam no barramento. Ele sofre o mesmo problema se você inserir um novo controlador scsi, introduzindo um novo ID de barramento, mas isso é relativamente raro e a maioria dos computadores prefere seus controladores internos aos que são adicionados posteriormente. O caminho do Linux pode ser mais simples - você não precisa saber ou se importar com as informações do controlador / id. Você apenas sabe que é o primeiro ou segundo disco. E para a maioria dos usuários isso é verdade, você só tem no máximo alguns drives para lidar, então você não se importa com o nome dado, desde que possa encontrá-lo.

Os números de partição são outra coisa novamente. A tabela de partição padrão do MS (DOS) usada em PCs possui quatro partições primárias. Nem mais nem menos. Eles podem ter comprimento 0 e não há necessidade de começar definindo a partição 1. Você pode começar com a partição 3, se desejar. Eu não acho que eles sequer tenham que ser contíguos no disco - você pode definir a partição 3 para iniciar no bloco 0, e a partição 1 para começar em algum lugar depois disso. A maioria das ferramentas de particionamento Linux gravará as tabelas de partições começando pela partição 1 e assim por diante. A maioria dos kernels linux tratará uma partição de tamanho 0 como uma partição vazia ou inexistente e não anunciará sua existência.

Se você precisa de mais partições, você precisa marcar um de seus pacotes primários para partições "estendidas". Então você pode subdividir isso em quantas partições estendidas quiser (sujeito a algum limite que eu não conheço no topo da minha cabeça). A diferença é que as partições estendidas são sempre enumeradas pelo kernel começando na partição número 5. Então, se você tem um disco hda com duas partições primárias e duas partições estendidas (por qualquer razão), elas são enumeradas como hda1, hda2, hda5, e hda6. A partição 3 seria marcada como contendo partições estendidas e não seria enumerada.

Então, são muitas as palavras para explicar os nomes dos dispositivos. É apenas para sinalizar que um dispositivo é um IDE ou um dispositivo controlado por SCSI e para lhe dar uma ideia de como o dispositivo é particionado.

A menos que haja uma razão convincente para fazer o contrário, eu não iria mexer com eles. Mudá-los só confundirá mais tarde os usuários que pensam que sabem o que estão fazendo.

    
por 11.12.2009 / 22:17
2

AFAIK tudo o que é exigido pelo kernel é que o dispositivo tenha os números de dispositivos principais e secundários corretos.

Desde que os números dos dispositivos maiores e menores estejam certos, algo chamado / dev / sda3 pode NÃO ser a terceira partição do primeiro dispositivo SCSI na cadeia (ou qualquer outro); na verdade, poderia ser a enésima partição da segunda unidade IDE.

Observe que alguns programas utilitários de suporte podem ou não ficar felizes em lidar com nomes não-padrão de desenvolvimento. Todo programador tem sua própria noção do que faz uma "verificação de sanidade" sensata.

    
por 09.12.2009 / 23:42
1

As unidades IDE são prefixadas com hd, enquanto as unidades SCSI, SATA e SAS são prefixadas com sd.

por exemplo:

primeira partição na primeira unidade SCSI:

/dev/sda1

terceira partição na terceira unidade IDE:

/dev/hdc3

esses prefixos são determinados pelo Linux na ordem em que estão anexados. A convenção de nomenclatura do dispositivo não pode ser alterada, embora você possa alterar os nomes que aparecem como (o rótulo) usando e2label :

e2label /dev/sdb1 /Docs
    
por 09.12.2009 / 21:06

Tags