Cuando un cuadro de Linux recibe un error ATA, lo registra con un mensaje que identifica el disco como "ata% d.00". ¿Cómo traduzco eso al nombre de un dispositivo (por ejemplo /dev/sdb
)? Siento que esto debería ser trivial, pero no puedo entenderlo.
linux
hard-drive
nelhage
fuente
fuente
Respuestas:
Peter me inspiró a escribir un script avanzado (let), que incluso puede detectar memorias USB (en lugar de generar cosas tontas como "ata0.00"). Al contrario del guión de Peter, también obtendrá el subnúmero (como en 4.01) si tiene más de un dispositivo en el mismo controlador resp. canal. La salida será exactamente como la recibes
syslog
. Probado Funciona muy bien en mi cuadro de Debian, aunque siempre hay muchas mejoras (por ejemplo, expresiones regulares demasiado torpes). Pero aguanta! ¡El número aparentemente elevado de caracteres escapados que puedes encontrar en mis expresiones regulares es solo por razones de compatibilidad! No puedes asumir GNUsed
con todos, por eso lo hice sin expresiones regulares extendidas a propósito.ACTUALIZACIONES
(1) Ya no analizará la
ls
salida. (¡Uy!) Como todos ustedes saben: No analice ls.(2) Ahora también funciona en entornos de solo lectura.
(3) Inspirado por una sugerencia de este chit-chat aquí , he logrado que las declaraciones sed sean mucho menos complicadas.
fuente
Mira
/proc/scsi/scsi
, que se verá más o menos así:scsi0 id 0 es sda y ata1.00, scsi1 id 0 es sdb y ata2.00, etc.
También mire
/var/log/dmesg
, que muestra la información de carga del controlador ata y hará las cosas un poco más claras. Busque la línea que comienza "libata".fuente
Prefiero guiones en lugar de explicaciones largas. Esto funciona en mi caja de Ubuntu. Agrega comentarios a tu gusto:
fuente
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
Esto es realmente bastante complicado. Si bien es seguro suponer que "la identificación scsi" es "la identificación SATA menos uno", prefiero estar realmente seguro e inspeccionar
unique_id
lo que supongo (según esta publicación ) es el identificador SATA.Mi error fue:
Entonces, mi procedimiento para averiguar qué
ata4
es:encontrar la identificación PCI del controlador SATA
encuentre la ID única que coincida:
así que está activado
scsi_host/host3
, lo que podemos traducir3:x:x:x
, a lo que podemos acceder paradmesg
obtener más información:aquí está nuestro dispositivo, podemos (opcionalmente) encontrar el número de serie para sacar ese dispositivo de allí (o verificar el cableado o lo que sea) antes de que nuestra matriz RAID falle por completo:
¡Y tu estas listo!
fuente
Prueba esto:
Nunca entendí el dmesg: algunas filas son sobre "ata4" y otras sobre "scsi" o sdc, pero nadie asigna "ata4 ... están especificados
fuente
Tuve el mismo problema y pude identificar las unidades comprobando dmesg. Allí puede ver el identificador del controlador (término correcto ??) y el modelo del disco. Luego use ls -l / dev / disk / by-id para hacer coincidir el número de modelo con / dev / sda (o lo que sea). Alternativamente, me gusta Disk Utility para esta información. Nota: esto solo funciona si sus discos tienen números de modelo diferentes, de lo contrario no podrá distinguir entre los dos.
fuente
La forma más fácil es revisar el registro del núcleo desde el inicio, ya que los nombres de los dispositivos de la unidad se mezclan desde varias fuentes (por ejemplo, unidades USB), o se asignan según el tipo de dispositivo (es decir, cdrom puede ser scdX en su lugar, y todo tiene un sgX ) En la práctica, a menos que haya mezclado diferentes tipos de buses (por ejemplo, SATA + USB), el dispositivo ata de menor número será sda a menos que sea un dispositivo cdrom.
Dependiendo de su sistema, puede adivinarse deambulando por sysfs. En mi sistema
ls -l /sys/dev/block
revela que8:0
(mayor: menor desde la entrada / dev) apunta a/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
Likewise,ls -l /sys/class/ata_port
revela losata1
puntos a los/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
que está en el mismo subdispositivo PCI.Como uso SATA, y solo hay una unidad en cada puerto, puedo deducir que ata1.00 = sda. Todas mis unidades son .00, sospecho que si usara un multiplicador de puerto, mis unidades recibirían .01, .02, .03, etc. Mirando los registros de otras personas, los controladores PATA usan .00 y .01 para maestro y esclavo , y según sus registros si tiene ataX.01, el .01 debe asignarse a la "ID" en el host: canal: ID: carpeta LUN de la
/sys/dev/block/
lista. Si tiene varias carpetasataX/
yhostY/
en la misma carpeta del dispositivo PCI, sospecho que la carpeta ataX con el número más bajo coincide con la carpeta hostY con el número más bajo.fuente
En
/sys/class/ata_port/ata${n}/device/
, puedes ver unahost${x}
carpeta. Por ejemplo, en mi máquina:El
${x}
in sehost${x}
refiere a ese primer número en el[0:0:0:0]
. Entonces para mí seata1
refiere ahost0
que también se puede representar en forma SCSI como0:*
:fuente
El siguiente script le dará un buen resumen como este:
Entonces, en una línea por unidad, tiene el nombre del dispositivo sdX , el tamaño , el modelo , s / ny los números pci y ata . El SDC anterior corresponde a un lector de tarjetas SD USB sin tarjeta insertada. De ahí el ---- en lugar de información real.
(solo probado en ubuntu 12.04 / 14.04 y CentOS 6)
fuente
Puede encontrar un script para encontrar esta información y más en https://www.av8n.com/computer/disk-hw-host-bus-id
Es similar al guión proporcionado por Mr. Syntaxerror, pero más elegante. - Funciona tanto para unidades USB como para unidades ATA. - Proporciona la marca, modelo y número de serie de la unidad, y, por supuesto, el punto de conexión. - Es más sencillo, legible y fácil de mantener.
fuente