Como o Linux determina o endereço SCSI de um disco?

7

Saudações

Estou trabalhando com VMs guest do RHEL 5.5 no VMware ESX 4. Quando configuro os discos virtuais nas configurações de hardware da VM, cada disco tem um endereço SCSI no formato "N: M". Por exemplo, "1: 3" significaria o número de host SCSI 1 e o ID de destino 3 do SCSI.

Quando vejo as informações do disco no BIOS da VM ou no sistema operacional Windows, as informações de endereço SCSI detectadas correspondem às configurações de hardware virtual. Mas no Linux, os componentes do endereço SCSI não combinam, pelo menos não de forma completa ou consistente.

Eu tentei os três drivers SCSI e SAS virtuais suportados e todos parecem estar "quebrados", mas de maneiras diferentes. Aqui está uma lista dos endereços de hardware virtual versus o que foi detectado no Linux com cada um dos drivers:

Driver    vHW Addr  Linux Addr
--------  --------  ----------
LSI SAS   0:0       0:0
LSI SAS   0:3       0:1
LSI SAS   0:6       0:2
LSI SCSI  1:1       2:1
LSI SCSI  1:4       2:4
LSI SCSI  1:7       2:7
pvSCSI    2:2       1:2
pvSCSI    2:5       1:5
pvSCSI    2:8       1:8

Minha principal questão é por que isso acontece no Linux? A próxima pergunta é: como consertá-lo ou corrigi-lo?

Se eu fosse adivinhar, eu diria que é um problema de como o kernel está distribuindo o número do host SCSI e como o driver SCSI do Linux (incluído nas ferramentas do VMware) está detectando o número de destino do SCSI. Talvez a ordem em que os drivers são carregados também tenha algo a ver com o problema. Eu estou supondo que isso não envolveria o udev, mas posso estar errado.

Quaisquer pensamentos seriam apreciados. Obrigado!

PS. Meu ambiente é VMware, mas não preciso de uma resposta específica para esses drivers. Eu imagino que isso possa ser um problema com qualquer driver SCSI no Linux.

    
por Chris Sears 11.01.2011 / 00:00

3 respostas

3

O Linux está sendo consistente e correto, não necessariamente da maneira que você espera.

LSI SAS: os endereços SAS são WWNs e recebem IDs semelhantes a SCSI correspondentes à ordem em que são vistos. (Esta é uma simplificação, mas vai fazer. Por que você tem lacunas de qualquer maneira?)

LSI SCSI & pvSCSI: O número do host SCSI relaciona-se APENAS com a ordem em que os drivers do adaptador host são carregados pelo kernel e não estão relacionados aos números atribuídos pelo VMWare. Se você gosta de vê-los no outro pedido, mude a ordem de carga do driver. Provavelmente, mude sua numeração em /etc/modprobe.conf e reinicie.

    
por 22.01.2011 / 07:08
3

Eu removo o HD adequado mapeando números de série para caddies de bandeja. Temos gabinetes com pouca capacidade de LED. Um novo disco vai, diz que aparece como / dev / sda

udevadm info -q all -n /dev/sda|grep SERIAL

Em seguida, anotamos o número de série. Então, se um disco ficar ruim, nós procuramos o número de série (no nosso caso, rotulamos o caddy físico) e puxamos o disco apropriado.

Mas isso não ajuda muito no vmware.

Então, novamente, você poderia escrever um script que faz a mesma coisa. Adicione um novo disco, registre seu uuid no guest e, em seguida, consulte essa tabela quando quiser remover o disco automaticamente mais tarde.

Eu realmente não prestei atenção, mas acho que meus discos vmware sempre foram ligados na mesma ordem. Então você pode confiar que o endereço scsi não mudará se você mantiver o endereço do mesmo jeito.

    
por 22.01.2011 / 05:58
1

O Linux moderno recria o diretório / dev na inicialização e verifica os hosts scsi na ordem em que aparecem no barramento pci. No VMware, seria a ordem em que você os adiciona à VM.

Se você adicionar um disco com scsi 0: 1 primeiro, depois um com 2: 2, no linux eles aparecerão como: 0: 1 e 1: 2. Se você adicionar scsi 1: 3 depois disso, após a inicialização, ele aparecerá como 2: 3.

Não precisa editar nada no linux, você pode mudar a ordem dos scsi-hosts no arquivo vmx:

$ grep pciSlotNumber vm.vmx
scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "34"
scsi1.pciSlotNumber = "35"

A ordem em que aparecem no arquivo vmx não importa, apenas o pciSlotNumber

edite o vmx e reorganize os slots para que scsi0 obtenha o menor número, scsi1 o menor e assim por diante. (Use os mesmos números, é mais seguro. Backup do seu vmx também!)

scsi0.pciSlotNumber = "16"
scsi2.pciSlotNumber = "35"
scsi1.pciSlotNumber = "34"

Após o boot, eles aparecerão na ordem correta.

Então lembre-se de adicionar seus scsi-hosts ao vm na ordem correta! Lembre-se também de excluir o último disco em um host scsi, o próprio scsi-host também será removido pela próxima reinicialização. Então, se você tiver scsi-host 0,1,2 e 3, e você deletar 2, no linux você terminará com apenas scsi-hosts 0,1 e 2.

    
por 08.02.2011 / 11:58