Я получаю сообщения ядра о 'ata3'. Как выяснить, какому устройству (/dev/sd_) соответствует?
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
мы можем найти серийный номер диска.
Точно так же мы очищаем карты номеров 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.
Вот хороший стекобмен / суперпользователь, говорящий об этом: Отображение номера устройства в логическое имя устройства
Не могу прокомментировать предыдущий ответ, но для этой строки вы можете изменить 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
Возможно, более простой, но не надежный метод: проверьте вывод /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 из последней загрузки.
Мне скорее нравится это:
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,