Quand une machine Linux obtient une erreur ATA, elle le syslog avec un message identifiant le disque comme "ata% d.00". Comment traduire cela en un nom de périphérique (par exemple /dev/sdb
)? Je pense que cela devrait être trivial, mais je ne peux pas le comprendre.
linux
hard-drive
Nélhage
la source
la source
Réponses:
Peter m'a inspiré pour écrire un script avancé (let), qui peut même détecter les clés USB (au lieu de produire des choses stupides comme "ata0.00"). Contrairement au script de Peter, vous obtiendrez également le sous-numéro (comme dans 4.01) si vous avez plusieurs périphériques sur le même contrôleur, resp. canal. La sortie sera exactement telle que vous la recevrez
syslog
. Testé. Je travaille très bien sur ma machine Debian, même s’il ya toujours beaucoup d’améliorations (par exemple, des expressions rationnelles trop maladroites). Mais tiens-le! Le nombre apparemment trop élevé de caractères d'échappement que vous pouvez trouver dans mes expressions régulières est juste pour des raisons de compatibilité! Vous ne pouvez pas assumer GNUsed
avec tout le monde, raison pour laquelle j’ai fait exprès sans regexps étendus.UPDATES
(1) N'analysera plus la
ls
sortie. (oups!) Puisque vous savez tous: ne pas analyser ls.(2) Fonctionne désormais également sur les environnements en lecture seule.
(3) Inspiré par une suggestion de ce bavardage ici, j'ai réussi à obtenir les déclarations sed de manière moins compliquée.
la source
Regardez
/proc/scsi/scsi
qui ressemble à ceci:scsi0 id 0 est sda et ata1.00, scsi1 id 0 est sdb et ata2.00, etc.
Regardez aussi
/var/log/dmesg
, qui montre les informations de chargement du pilote ata et rendra les choses un peu plus claires. Recherchez la ligne commençant par "libata".la source
Je préfère les scriptlets au lieu de longues explications. Cela fonctionne sur ma boîte Ubuntu. Ajoutez des commentaires à votre goût:
la source
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
C'est en fait assez délicat. Bien qu'il soit prudent de supposer que "l'ID scsi" est "l'ID SATA moins un", je préfère être vraiment sûr et inspecter le
unique_id
que je suppose (sur la base de ce post ) est l'identifiant SATA.Mon erreur était:
Donc, ma procédure pour savoir ce qui
ata4
est:trouver l'identifiant PCI du contrôleur SATA
trouver l'identifiant unique correspondant:
alors c’est sur
scsi_host/host3
, nous pouvons le traduire3:x:x:x
, que nous pouvons grep pour endmesg
savoir plus:voici notre périphérique, nous pouvons (éventuellement) trouver le numéro de série qui permettra d'extraire ce périphérique (ou de vérifier le câblage ou autre) avant que notre système RAID ne soit totalement défaillant:
Et tu as fini!
la source
Essaye ça:
Je n'ai jamais compris le dmesg - certaines lignes parlent de "ata4", d'autres de "scsi" ou de sdc, mais personne n'attribue "ata4... Sdc" la commande affichée trouve le / sys / bus / path, où ata4 et sdc sont spécifiés.
la source
J'ai eu le même problème et j'ai pu identifier les lecteurs en vérifiant dmesg. Vous pouvez y voir l'identifiant du contrôleur (terme correct ??) et le modèle du disque. Ensuite, utilisez ls -l / dev / disk / by-id pour faire correspondre le numéro de modèle à / dev / sda (ou autre). Alternativement, j'aime Utilitaire de disque pour cette information. Remarque: cela ne fonctionne que si vos disques ont des numéros de modèle différents, sinon vous ne pourrez pas faire la distinction entre les deux.
la source
Le moyen le plus simple est de consulter le journal du noyau depuis le démarrage, car les noms des périphériques de lecteur sont mélangés à partir de différentes sources (par exemple, des clés USB) ou attribués en fonction du type de périphérique (c-à-d. Cdrom peut plutôt être scdX, et tout est doté de sgX. ) En pratique, à moins que vous n'ayez mélangé différents types de bus (par exemple, SATA + USB), le périphérique le plus bas numéroté est sda, à moins qu'il s'agisse d'un périphérique cdrom.
En fonction de votre système, vous pouvez le deviner en vous baladant dans sysfs. Sur mon système,
ls -l /sys/dev/block
révèle que8:0
(majeur: mineur à partir de / dev) pointe sur/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
Like,ls -l /sys/class/ata_port
que lesata1
points sur/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
lesquels se trouve sur le même sous-périphérique PCI.Depuis que j'utilise SATA, et qu'un seul lecteur est sur chaque port, je peux en déduire que ata1.00 = sda. Tous mes disques ont une valeur de 0,00. Je suppose que si j'utilisais un multiplicateur de ports, ils seraient dotés de 0,01, 0,02, 0,03, etc. Regardant les journaux des autres utilisateurs et, en fonction de leurs journaux si vous avez ataX.01, le .01 doit être mappé sur "l'ID" dans le dossier hôte: channel: ID: LUN de la
/sys/dev/block/
liste. Si vous avez plusieurs dossiersataX/
ethostY/
dans le même dossier de périphérique PCI, je suppose que le dossier ataX portant le numéro le plus bas correspond au dossier hostY portant le numéro le plus bas.la source
Dans
/sys/class/ata_port/ata${n}/device/
, vous pouvez voir unhost${x}
dossier. Par exemple, sur ma machine:Le
${x}
dans sehost${x}
réfère à ce premier numéro dans le[0:0:0:0]
. Donc, pour moi,ata1
fait référence àhost0
ce qui peut aussi être représenté sous forme SCSI comme0:*
:la source
Le script ci-dessous vous donnera un bon résumé comme ceci:
Donc, sur une ligne par lecteur, vous avez le nom du périphérique sdX , sa taille , son modèle , s / n et les numéros pci et ata . Le sdc ci-dessus correspond à un lecteur de carte SD USB sans aucune carte insérée. D'où le ---- à la place de l'information réelle.
(testé uniquement sur Ubuntu 12.04 / 14.04 et CentOS 6)
la source
Vous trouverez un script pour trouver cette information, et plus encore, à l' adresse https://www.av8n.com/computer/disk-hw-host-bus-id.
Il est similaire au script fourni par M. Syntaxerror, mais plus sophistiqué. - Cela fonctionne aussi bien pour les clés USB que pour les clés ATA. - Il fournit la marque, le modèle et le numéro de série du lecteur, ainsi que le point de fixation. - Il est plus simple, lisible et maintenable.
la source