7

Я получаю сообщения ядра о 'ata3'. Как выяснить, какому устройству (/dev/sd_) соответствует?

5 ответов5

5

От http://www.phuket-data-wizards.com/blog/2011/07/16/matching-linux-ata-numbers-to-the-device-names/:
Команда grep '[0-9]' /sys/class/scsi_host/host{0..9}/unique_id будет выдавать вывод наподобие
/sys/class/scsi_host/host0/unique_id:1
/sys/class/scsi_host/host1/unique_id:2
/sys/class/scsi_host/host2/unique_id:0
/sys/class/scsi_host/host3/unique_id:0
/sys/class/scsi_host/host4/unique_id:3
/sys/class/scsi_host/host5/unique_id:4
/sys/class/scsi_host/host6/unique_id:5
/sys/class/scsi_host/host7/unique_id:6

поэтому мы можем сопоставить уникальный идентификатор, используемый в сообщениях об ошибках ядра, с номером хоста. Затем команда ls -l /sys/block/sd* покажет нам, какое имя устройства принадлежит какому номеру хоста:
/sys/block/sda -> ../devices/pci0000:00/0000:00:13.2/usb1/1-6/1-6:1.0/host2/target2:0:0/2:0:0:0/block/sda
/sys/block/sdb -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:0/block/sdb
/sys/block/sdc -> ../devices/pci0000:00/0000:00:12.0/host6/target6:0:0/6:0:0:0/block/sdc /sys/block/sdd -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:1/block/sdd
/sys/block/sde -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:2/block/sde /sys/block/sdf -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:3/block/sdf
/sys/block/sdg -> ../devices/pci0000:00/0000:00:12.0/host7/target7:0:0/7:0:0:0/block/sdg

Из этих двух выходных данных мы видим, что уникальный идентификатор 6 отображается на host7, а host7 отображается на /dev /sdg. И наконец, с помощью команды hdparm -i /dev/sdg:
/dev/sdg: Model=ST3500418AS, FwRev=CC34, SerialNo=6VM2KSFD
мы можем найти серийный номер диска.

1

Точно так же мы очищаем карты номеров ATA непосредственно от UNIQUE_ID (это один и тот же номер). Так что ATA # 3 - это UNIQUE_ID # 3. Затем вы посмотрите, что HOST # связано с UNIQUE_ID

/ SYS / класс / scsi_host / host4 / unique_id:3

Так что здесь ATA # 3 - это UNIQUE_ID # 3 - это HOST # 4.

Затем, чтобы получить букву диска, просто запустите «ls -lisah /sys /block» и найдите HOST # 4.

Вот хороший стекобмен / суперпользователь, говорящий об этом: Отображение номера устройства в логическое имя устройства

1

Не могу прокомментировать предыдущий ответ, но для этой строки вы можете изменить grep на более ограничительный, так как 1 и 10 являются действительными ata #:

$ grep 1 /sys/class/scsi_host/host*/unique_id
/sys/class/scsi_host/host0/unique_id:1
/sys/class/scsi_host/host9/unique_id:10
$ grep ^1$ /sys/class/scsi_host/host*/unique_id
/sys/class/scsi_host/host0/unique_id:1

Так...

ata=3; ls -l /sys/block/sd* | grep $(grep ^$ata$ /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')

Для моих нужд я хотел отобразить букву диска на ata, поэтому я написал это, и в моей системе строка ata не всегда была 5-ым компонентом пути:

#!/bin/sh                                                                       
dev=$1                                                                         
name=`basename $dev`                                                            
readlink /sys/block/$name | perl -ne'm{/(ata\d+)/} && print "$1\n"'             

Используйте это так:

$ ./map2ata /dev/sda
ata2
0

Возможно, более простой, но не надежный метод: проверьте вывод /bin /dmesg. Устройства перечислены там.

ata1: SATA max UDMA/133 abar m2048@0xf0616000 port 0xf0616100 irq 29
[ ... ]
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: ATA-8: Hitachi HDT721010SLA360, ST6OA31B, max UDMA/133
ata1.00: 1953525168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
ata1.00: configured for UDMA/133
scsi 0:0:0:0: Direct-Access     ATA      Hitachi HDT72101 A31B PQ: 0 ANSI: 5
[ ... ] 
sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sda:

Это не надежно по нескольким причинам. /bin /dmesg перечисляет содержимое "кольцевого буфера" ядра; загрузочные сообщения могут быть перезаписаны более поздними сообщениями ядра.

Требуется, чтобы вы последовали и перешли с ata1.00 на (здесь) Hitachi HDT72101, а затем сразу увидели, что scsi 0: 0: 0: 0: это тот же диск. Тогда sd 0: 0: 0: 0: показано, что sda.

Если у вас есть несколько дисков с одинаковыми номерами моделей и уровнями прошивки, вы не сможете точно определить, какой из них использует этот метод. Мы надеемся, что вы сможете определить это по порядку проб в выводе dmesg.

В моей системе centos6 /var /log /dmesg содержит dmesg из последней загрузки.

0

Мне скорее нравится это:

sg_inq /dev/sdq --verbose --id

VPD INQUIRY: Device Identification page
    inquiry cdb: 12 01 83 00 fc 00
    inquiry: requested 252 bytes but got 54 bytes
  Designation descriptor number 1, descriptor length: 24
    id_type: T10 vendor identification,  code_set: ASCII
    associated with the addressed logical unit
      vendor id: HITACHI
      vendor specific: R500D1075BCC
  Designation descriptor number 2, descriptor length: 6
    id_type: vendor specific [0x0],  code_set: Binary
    associated with the target port
 00     00 00                                               ..
  Designation descriptor number 3, descriptor length: 20
    id_type: NAA,  code_set: Binary
    associated with the addressed logical unit
      NAA 6, IEEE Company_id: 0x60e8
      Vendor Specific Identifier: 0x6d10700
      Vendor Specific Identifier Extension: 0xd10700005bcc
      [0x60060e8006d107000000d10700005bcc]


Logical device number in HEX:
vendor specific: R500D107**5BCC**
Array Serial in HEX:
vendor specific: R500**D107**5BCC

Я не уверен, что это хорошо для других производителей массивов хранения, но это работает для Hitachi,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .