Vous pouvez trouver le périphérique / dev / sdY correspondant en parcourant l' /sys
arborescence:
$ find /sys/devices | grep '/ata[0-9]\+/.*/block/s[^/]\+$' \
| sed 's@^.\+/\(ata[0-9]\+\)/.\+/block/\(.\+\)$@\1 => /dev/\2@'
Avec une /sys
traversée plus efficace (cf. lsata.sh ):
$ echo /sys/class/ata_port/ata*/../../host*/target*/*/block/s* | tr ' ' '\n' \
| awk -F/ '{printf("%s => /dev/%s\n", $5, $NF)}'
Exemple de sortie d'un système à 2 disques:
ata1 => /dev/sda
ata2 => /dev/sdb
Ensuite, pour identifier de manière fiable le matériel réel, vous devez mapper / dev / sdY au numéro de série, par exemple:
$ ls /dev/disk/by-id -l | grep 'ata.*sd[a-zA-Z]$'
lssci
L' lssci
utilitaire peut également être utilisé pour dériver le mappage:
$ lsscsi | sed 's@^\[\([^:]\+\).\+\(/dev/.\+\)$@\1,\2@' \
| awk -F, '{ printf("ata%d => %s\n", $1+1, $2) }'
Notez que l'énumération lsscsi appropriée commence à 0 tandis que l'énumération ata commence à 0.
Syslog
Si rien d'autre ne fonctionne, on peut consulter le journal / journal sys pour dériver le mappage.
Les /dev/sdY
périphériques sont créés dans le même ordre que les identifiants ataX sont énumérés dans le kern.log
tout en ignorant les périphériques non-disque (ATAPI) et les liens non connectés.
Ainsi, la commande suivante affiche le mappage:
$ grep '^May 28 2' /var/log/kern.log.0 | \
grep 'ata[0-9]\+.[0-9][0-9]: ATA-' | \
sed 's/^.*\] ata//' | \
sort -n | sed 's/:.*//' | \
awk ' { a="ata" $1; printf("%10s is /dev/sd%c\n", a, 96+NR); }'
ata1.00 is /dev/sda
ata3.00 is /dev/sdb
ata5.00 is /dev/sdc
ata7.00 is /dev/sdd
ata8.00 is /dev/sde
ata10.00 is /dev/sdf
(Notez que ata4 ne s'affiche pas car les messages de journal ci-dessus proviennent d'un autre système.)
J'utilise /var/log/kern.log.0
et pas /var/log/kern.log
parce que les messages de démarrage sont déjà tournés. Je demande May 28 2
car c'était le dernier démarrage et je veux ignorer les messages précédents.
Pour vérifier le mappage, vous pouvez effectuer quelques vérifications en regardant la sortie de:
$ grep '^May 28 2' /var/log/kern.log.0 | \
grep 'ata[0-9]\+.[0-9][0-9]: ATA-'
May 28 20:43:26 hn kernel: [ 1.260488] ata1.00: ATA-7: SAMSUNG SV0802N, max UDMA/100
May 28 20:43:26 hn kernel: [ 1.676400] ata5.00: ATA-5: ST380021A, 3.19, max UDMA/10
[..]
Et vous pouvez comparer cette sortie avec une hdparm
sortie, par exemple:
$ hdparm -i /dev/sda
/dev/sda:
Model=SAMSUNG SV0802N [..]
(en utilisant le noyau 2.6.32-31)
Voici ma version, modifiée d'en haut. Comme je ne connais pas la date exacte à laquelle le système a été démarré (pour le tester, il y a 27 jours), et je ne sais pas quel kern.log contient les données dont j'ai besoin (certaines peuvent être
gzipped
sur mon système), j'utiliseuptime
etdate
pour calculer une date approximative de démarrage du système (jour après jour), puis utilisezzgrep
pour rechercher dans tous les fichiers kern.log disponibles.J'ai également légèrement modifié la deuxième
grep
déclaration, car elle affichera désormais également un lecteur de CD / DVD ATAPI ainsi que des lecteurs ATA- *.Il pourrait toujours utiliser le raffinement (c'est-à-dire si la disponibilité du système est supérieure à un an), mais devrait fonctionner correctement pour l'instant.
la source
Je viens d'avoir ce même problème et j'ai trouvé une autre solution que l'on pourrait aimer.
L'outil lsscsi répertorie les périphériques SCSI (ou hôtes) et leur attribut.
Avec lsscsi, on obtient le nom ata et le nom du périphérique.
Ressemble à ça:
Sur Ubuntu, on peut installer lsscsi simplement avec
la source
ataX
carte à quelle partie de lalsscsi
sortie?lsscsi | sed 's@^\[\([^:]\+\).\+\(/dev/.\+\)$@\1,\2@' | awk -F, '{ printf("ata%d => %s\n", $1+1, $2) }'
/sys/devices
sanslsscsi
.Aucune des réponses ci-dessus n'a fonctionné pour moi, et l'approche lsscsi a en fait donné la mauvaise réponse, en raison de divergences entre les numéros de bus SCSI et les numéros ATA. Sur un système à 21 disques, j'avais de nombreux rapports Syslog sur des problèmes avec ATA18 (violations HSM). Quel disque était à l'origine de ces erreurs? Certains étaient des lecteurs USB, ce qui rendait les choses beaucoup plus confuses. J'avais besoin d'une comptabilité de la façon dont chaque lecteur SCSI est connecté au système, et j'ai écrit le script ci-dessous qui fournit des listes tabulaires pour tous les disques SCSI (/ dev / s [dr]?), Qu'ils soient ATA ou USB.
Ensuite, avec tous les disques durs entièrement pris en compte, j'ai été surpris de voir que mes erreurs ATA n'avaient rien à voir avec aucun de mes disques durs. J'avais posé la mauvaise question, et je pense que d'autres pourraient facilement tomber dans le même piège, c'est pourquoi je le mentionne ici. J'ai ensuite utilisé une deuxième approche qui a identifié le matériel qui générait les messages de violation HSM, également détaillé dans la documentation apparaissant dans le script ci-dessous.
la source