Quando uma caixa do Linux obtém um erro ATA, ela registra o syslog com uma mensagem identificando o disco como "ata% d.00". Como eu traduzo isso para um nome de dispositivo (por exemplo /dev/sdb
)? Eu sinto que isso deve ser trivial, mas não consigo descobrir.
linux
hard-drive
nelhage
fonte
fonte
Respostas:
Peter me inspirou a escrever um script avançado (let), que pode até detectar pendrives (em vez de produzir coisas tolas como "ata0.00"). Ao contrário do script de Peter, você também receberá o sub-número (como em 4.01) se tiver mais de um dispositivo no mesmo controlador resp. canal. A saída será exatamente como você a obtém
syslog
. Testado. Trabalhando muito bem na minha caixa Debian, embora sempre haja muitas melhorias (por exemplo, regexps muito desajeitados). Mas segure! O número aparentemente alto de caracteres de escape que você pode encontrar nos meus regexps é apenas por motivos de compatibilidade! Você não pode assumir o GNUsed
com todos, e foi por isso que fiz isso sem regexps estendidos de propósito.ATUALIZAÇÕES
(1) Não analisará mais a
ls
saída. (oops!) Como todos vocês sabem: não analise ls.(2) Agora também funciona em ambientes somente leitura.
(3) Inspirado por uma sugestão deste bate-papo aqui , consegui novamente tornar as declarações sed muito menos complicadas.
fonte
Veja
/proc/scsi/scsi
, que será algo parecido com isto:scsi0 id 0 é sda e ata1.00, scsi1 id 0 é sdb e ata2.00, etc.
Veja também
/var/log/dmesg
, que mostra as informações de carregamento do driver ata e tornará as coisas um pouco mais claras. Procure a linha que começa com "libata".fonte
Prefiro scripts em vez de explicações longas. Isso funciona na minha caixa do Ubuntu. Adicione comentários ao seu gosto:
fonte
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
Isso é realmente bastante complicado. Embora seja seguro supor que "o scsi ID" é "o SATA ID menos um", prefiro estar realmente seguro e inspecionar o
unique_id
que assumo (com base nesta postagem ) é o identificador SATA.Meu erro foi:
Então, meu procedimento para descobrir o que
ata4
é:encontre o ID PCI do controlador SATA
encontre o ID exclusivo correspondente:
por isso
scsi_host/host3
, podemos traduzir3:x:x:x
, para os quais podemos esperar paradmesg
descobrir mais:aqui está o nosso dispositivo, podemos (opcionalmente) encontrar o número de série para tirar esse dispositivo dali (ou verificar o cabeamento ou o que for) antes que nossa matriz RAID falhe totalmente:
E pronto!
fonte
Tente o seguinte:
Eu nunca entendi o dmesg - algumas linhas são sobre "ata4", outras são sobre "scsi" ou sdc, mas ninguém atribui "ata4 ... sdc" o comando mostrado encontra o / sys / bus / path, onde ambos ata4 e sdc são especificados.
fonte
Eu tive o mesmo problema e consegui identificar unidades verificando dmesg. Lá você pode ver o identificador do controlador (termo correto ??) e o modelo do disco. Em seguida, use ls -l / dev / disk / by-id para combinar o número do modelo com / dev / sda (ou o que seja). Como alternativa, gosto do Disk Utility para essas informações. Nota: isso só funciona se seus discos tiverem números de modelo diferentes, caso contrário você não poderá distinguir entre os dois.
fonte
A maneira mais fácil é revisar o log do kernel a partir da inicialização, uma vez que os nomes dos dispositivos da unidade são misturados em várias fontes (por exemplo, unidades USB) ou são atribuídos com base no tipo de dispositivo (por exemplo, cdrom pode ser scdX e tudo tem um sgX ) Na prática, a menos que você misture diferentes tipos de barramentos (por exemplo, SATA + USB), o dispositivo ata de menor número será sda, a menos que seja um dispositivo de cdrom.
Dependendo do seu sistema, ele pode ser adivinhado vagando pelo sysfs. No meu sistema,
ls -l /sys/dev/block
revela que8:0
(major: minor from / dev dev) aponta para o/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
mesmo modo,ls -l /sys/class/ata_port
revela osata1
pontos para os/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
quais está no mesmo sub-dispositivo PCI.Desde que eu uso SATA, e apenas uma unidade está em cada porta, posso deduzir que ata1.00 = sda. Todas as minhas unidades são .00, desconfio que se eu usasse um multiplicador de portas, minhas unidades receberiam .01, .02, .03 etc. e com base em seus logs, se você tiver ataX.01, o .01 deve ser mapeado para o "ID" na pasta host: channel: ID: LUN da
/sys/dev/block/
lista. Se você tiver múltiplosataX/
ehostY/
pastas na mesma pasta do dispositivo PCI, então eu suspeito que a pasta aTAX numeradas menor corresponde ao menor pasta hosty numerada.fonte
Em
/sys/class/ata_port/ata${n}/device/
, você pode ver umahost${x}
pasta. Por exemplo, na minha máquina:O
${x}
inhost${x}
refere-se ao primeiro número no[0:0:0:0]
. Então, para mim,ata1
refere-se aohost0
que também pode ser representado no formato SCSI como0:*
:fonte
O script abaixo fornece um bom resumo como este:
Assim, em uma linha por unidade, você tem o nome do dispositivo sdX , tamanho , modelo , s / n e os números pci e ata . O sdc acima corresponde a um leitor de cartão SD USB sem cartão inserido. Daí o ---- no lugar de informações reais.
(testado apenas no ubuntu 12.04 / 14.04 e CentOS 6)
fonte
Um script para encontrar essas informações e muito mais pode ser encontrado em https://www.av8n.com/computer/disk-hw-host-bus-id
É semelhante ao script fornecido pelo Sr. Syntaxerror, mas mais sofisticado. - Ele funciona para unidades USB, bem como unidades ATA. - Ele fornece a marca, o modelo e o número de série da unidade, - e, é claro, o ponto de conexão. - É mais direto, legível e sustentável.
fonte