Определение к какому SCSI контроллеру подключен диск

В серверах можно установить несколько SCSI контроллеров для подключения большего количества дисков. И хорошо, когда мы помним какие и куда подключаем, но бывает ситуация, когда все диски одной марки или просто полученные по наследству без пояснений.

В моем случае все диски одинаковые, SCSI контроллеры разные и необходимо определить какой диск на каком порту SCSI контроллера висит. С помощью прочтения файла /proc/scsi/sg/device_strs можно отобразить всех подключенные диски и их модель.

# cat /proc/scsi/sg/device_strs
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0
ATA         WDC WD7502AAEX-0    05.0

Видим что все восемь дисков одинаковых.

Определение порта подключения дисков

Чтобы определить порт подключения диска необходимо просмотреть список ссылок подключений в каталоге /dev/disk/by-path/

# ls -hl /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.2-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:00:1f.2-scsi-0:0:1:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.2-scsi-0:0:1:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.2-scsi-0:0:1:0-part2 -> ../../sdb2
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sdc
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.2-scsi-1:0:0:0-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.2-scsi-1:0:0:0-part2 -> ../../sdc2
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:00:1f.2-scsi-1:0:1:0 -> ../../sdd
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:00:1f.5-scsi-0:0:0:0 -> ../../sde
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.5-scsi-0:0:0:0-part1 -> ../../sde1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.5-scsi-0:0:0:0-part2 -> ../../sde2
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:00:1f.5-scsi-1:0:0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.5-scsi-1:0:0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:00:1f.5-scsi-1:0:0:0-part2 -> ../../sdf2
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:08:01.0-scsi-0:0:0:0 -> ../../sdg
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:08:01.0-scsi-0:0:0:0-part1 -> ../../sdg1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:08:01.0-scsi-0:0:0:0-part2 -> ../../sdg2
lrwxrwxrwx 1 root root  9 Jul 13  2012 pci-0000:08:01.0-scsi-1:0:0:0 -> ../../sdh
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:08:01.0-scsi-1:0:0:0-part1 -> ../../sdh1
lrwxrwxrwx 1 root root 10 Jul 13  2012 pci-0000:08:01.0-scsi-1:0:0:0-part2 -> ../../sdh2

Из этого списка видно, что у меня есть SCSI контроллер с адресом pci-0000:00:1f с подключенным к нему 6 дисками (sda, sdb, sdc, sdd, sde, sdf) и разбивкой на несколько разделов и SCSI контроллер pci-0000:08:01 с подключенными 2 дисками (sdg, sdg) также с разделами.

Определить название SCSI контроллера.

Список всех устройств выдает команда dmesg, для отображения информации только по нашим контроллерам воспользуемся фильтром.

# dmesg | grep 0000:00:1f
pci 0000:00:1f.0: quirk: region 0800-087f claimed by ICH6 ACPI/GPIO/TCO
pci 0000:00:1f.0: quirk: region 0500-053f claimed by ICH6 GPIO
pci 0000:00:1f.0: ICH7 LPC Generic IO decode 1 PIO at 4700 (mask 0097)
pci 0000:00:1f.0: ICH7 LPC Generic IO decode 2 PIO at 03e8 (mask 000f)
pci 0000:00:1f.0: ICH7 LPC Generic IO decode 3 PIO at 1640 (mask 000f)
pci 0000:00:1f.0: ICH7 LPC Generic IO decode 4 PIO at 0ca0 (mask 000f)
pci 0000:00:1f.2: reg 10 io port: [0xa000-0xa007]
pci 0000:00:1f.2: reg 14 io port: [0x9c00-0x9c03]
pci 0000:00:1f.2: reg 18 io port: [0x9880-0x9887]
pci 0000:00:1f.2: reg 1c io port: [0x9800-0x9803]
pci 0000:00:1f.2: reg 20 io port: [0x9480-0x948f]
pci 0000:00:1f.2: reg 24 io port: [0x9400-0x940f]
pci 0000:00:1f.3: reg 10 64bit mmio: [0xfacda000-0xfacda0ff]
pci 0000:00:1f.3: reg 20 io port: [0x400-0x41f]
pci 0000:00:1f.5: reg 10 io port: [0x9000-0x9007]
pci 0000:00:1f.5: reg 14 io port: [0x8c00-0x8c03]
pci 0000:00:1f.5: reg 18 io port: [0x8880-0x8887]
pci 0000:00:1f.5: reg 1c io port: [0x8800-0x8803]
pci 0000:00:1f.5: reg 20 io port: [0x8480-0x848f]
pci 0000:00:1f.5: reg 24 io port: [0x8400-0x840f]
ata_piix 0000:00:1f.2: version 2.13
ata_piix 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19
ata_piix 0000:00:1f.2: MAP [ P0 P2 P1 P3 ]
ata_piix 0000:00:1f.2: setting latency timer to 64
ata_piix 0000:00:1f.5: PCI INT B -> GSI 19 (level, low) -> IRQ 19
ata_piix 0000:00:1f.5: MAP [ P0 -- P1 -- ]
ata_piix 0000:00:1f.5: setting latency timer to 64
i801_smbus 0000:00:1f.3: PCI INT C -> GSI 18 (level, low) -> IRQ 18
# dmesg | grep 0000:08:01
pci 0000:08:01.0: reg 10 io port: [0xe480-0xe487]
pci 0000:08:01.0: reg 14 io port: [0xe400-0xe403]
pci 0000:08:01.0: reg 18 io port: [0xec00-0xec07]
pci 0000:08:01.0: reg 1c io port: [0xe880-0xe883]
pci 0000:08:01.0: reg 20 io port: [0xe800-0xe80f]
pci 0000:08:01.0: reg 24 32bit mmio: [0xfbe7fc00-0xfbe7fdff]
pci 0000:08:01.0: reg 30 32bit mmio pref: [0xfbe80000-0xfbefffff]
pci 0000:08:01.0: supports D1 D2
pci 0000:08:01.0: BAR 6: address space collision on of device [0xfbe80000-0xfbefffff]
sata_sil 0000:08:01.0: version 2.4
sata_sil 0000:08:01.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17

И мы получаем полную информацию по контроллерам.

Получение полной информации о диске, серийный номер и название диска.

Для отображения информации по дискам можно воспользоваться утилитой hdparm. Я воспользуюсь сразу с фильтром для отображения только той информации что мне необходима.

# hdparm -I /dev/sda | grep Number
    Model Number:       WDC WD7502AAEX-00Y9A0
    Serial Number:      WD-WCAW32204526
# hdparm -I /dev/sdc | grep Number
    Model Number:       WDC WD7502AAEX-00Y9A0                  
    Serial Number:      WD-WCAW32061858
# hdparm -I /dev/sdd | grep Number
    Model Number:       WDC WD7502AAEX-00Y9A0                  
    Serial Number:      WD-WCAW31707290
и так далее.

По полученному серийному номеру мы уже знаем физическое размещение диска.

Определение порта подключения дисков.

Для определения порта, все очень просто, необходимо отобразить файл /proc/scsi/scsi и мы увидим, что наши диски подключены к соответствующему разъему на контроллере.

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi0 Channel: 00 Id: 01 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 01 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi5 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi6 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD7502AAEX-0 Rev: 05.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05

Необходимо помнить, что система потры считает от 0, а на плате порты подключения проставляются, как правило, с нумерацией 1.