Como correlato os dispositivos / dev / sd com o hardware que eles representam?

35

Uma unidade está começando a falhar e eu conheço o dispositivo apenas por sua /dev/sdbdesignação de arquivo. Quais são as maneiras que eu posso usar para correlacionar esse arquivo de dispositivo com um dispositivo de hardware real para saber qual unidade substituir fisicamente?

Bônus: E se eu não tiver /dev/disk/e seus subdiretórios nesta instalação? (Que, infelizmente, eu não)

Wesley
fonte
Nenhum controlador RAID?
precisa saber é
@ewwhite Não é para os fins desta pergunta, não. =)
Wesley
btw. se você não possui o /dev/disk/diretório, provavelmente não possui o udev.
precisa
@UlrichDangel Muito observador porque ... eu não tenho udev. = (
Wesley

Respostas:

21

Você pode procurar em /sys/block:

-bash-3.2$ ls -ld /sys/block/sd*/device
lrwxrwxrwx 1 root root 0 Jun  8 21:09 /sys/block/sda/device -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdb/device -> ../../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdc/device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdd/device -> ../../devices/pci0000:00/0000:00:1f.2/host3/target3:0:0/3:0:0:0

Ou, se você não tiver /sys, pode olhar para /proc/scsi/scsi:

-bash-3.2$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: PepperC  Model: Virtual Disc 1   Rev: 0.01
  Type:   CD-ROM                           ANSI SCSI revision: 03
Faz-tudo5
fonte
Incrível, eu tenho /sys/(e também /proc/) muitas informações excelentes por lá. Ainda o consumindo.
Wesley
Além disso, dê uma olhada em / dev / disk / by-path (assumindo que o seu udev seja compatível). Claro, OPs não, então ...
derobert
14
hdparm -i /dev/sdb

Isso deve fornecer o modelo e o número de série da unidade.

Martin Barry
fonte
Isso funcionaria para a maioria das situações, acredito. No entanto, por algum motivo, o controlador neste servidor é incompleto. Executar esse comando me rende o seguinte:HDIO_GET_IDENTITY failed: Invalid argument
Wesley
11
smartctl -ivale a pena tentar também. Funciona em unidades SCSI, enquanto o hdparm geralmente não funciona.
derobert
Não funciona com drices USB
Mads Skjern
12

Como o inimitável Gilles mencionado nesta resposta , se o seu kernel usa, udevvocê pode usar o udevadmcomando para interrogar um dispositivo:

udevadm info -n /dev/sda -a

(Infelizmente, em alguns casos [duplamente triste é que seja verdade neste caso para mim] o udev não é usado e / ou o udevadm não está disponível.)

Wesley
fonte
8

Se você puder ver o LED na unidade ou ouvir o ruído do disco, poderá executar

sudo cat /dev/sdb >/dev/null

e veja qual unidade repentinamente se torna continuamente ativa. Ou, se você estiver passando pelo barulho,

sudo find /mount/point >/dev/null

o que fará com que as cabeças se movam mais (talvez seja melhor não fazê-lo no disco com falha e, em vez disso, use um processo de eliminação com os outros discos).

jippie
fonte
2
Eu tinha pensado em como fazer as luzes piscarem , então essa é uma resposta para a minha curiosidade. =)
Wesley
11
Algumas unidades possuem um LED extra para isso, mas geralmente são encontradas apenas em unidades de nível empresarial (leia-se bizarramente caro em uma capacidade relativamente baixa). Não sei como trabalhar esses LEDs, mas o ddtruque geralmente funciona bem o suficiente.
jippie
@WesleyDavid Mesmo se não houver LEDs, ouvir o ruído pode ser o último recurso. Não há necessidade de usar ddaqui ( nem na maioria das circunstâncias ), catou qualquer outro programa que leia de um arquivo fará.
Gilles 'SO- stop be evil'
4

Supondo que este seja o Linux, o mais óbvio é verificar no dmesg onde o kernel inicializa o dispositivo. Ele registra o modelo da unidade.

Julian Yon
fonte
Verifique unix.stackexchange.com/questions/39886/… para obter mais detalhes.
jippie
Sim, é Linux. Especificamente o Debian 4. Eu verifiquei o dmesg, mas não vi nenhuma menção a um modelo de drive, estranhamente. Talvez eu esteja interpretando mal.
Wesley
4

Eu tenho 4 métodos. O primeiro é o mais fácil:

dmesg | egrep "sd[a-z]"

Para os outros, não tenho certeza se eles precisam de / dev / disk, exceto este:

ls -lF /dev/disk/by-uuid

Os outros:

blkid -o list -c /dev/null

E o óbvio:

fdisk -l
Samuel Duclos
fonte
3

Aqui estão algumas maneiras que eu sei para encontrar o nome do dispositivo SCSI

  • dmesg | egrep "sd[a-z]"
  • lsblk --scsi (do pacote util-linux> = v2.22)
  • lshw -C disk
  • ls -ld /sys/block/sd*/device
SamK
fonte