Monday 12 November 2012

Linux. Работа с SCSI

GOAL

SCSI и Linux, в общих чертах

SOLUTION


Адресс SCSI устройств
<H>ost:      Instance of hostadapter to which device is attached
<B>us:       SCSI Bus or Channel on the hostadapter
<T>arget:    SCSI Id assigned to an individual device
<L>un:       Logical unit number on the device

Посмотреть подключенные SCSI устройства можно множеством комманд.

LSSCSI
#  lsscsi
[0:0:0:0]    disk    Single   Flash Reader     1.00  /dev/sdb
[1:0:0:0]    disk    HP       LOGICAL VOLUME   6.64  /dev/sda
[1:3:0:0]    storage HP       P410i            6.64  -
[2:0:0:0]    disk    3PARdata VV               3222  /dev/sdc
[2:0:0:254]  enclosu 3PARdata SES              3222  -
[2:0:1:0]    disk    3PARdata VV               3222  /dev/sdd
[2:0:1:254]  enclosu 3PARdata SES              3222  -
[3:0:0:0]    disk    3PARdata VV               3222  /dev/sde
[3:0:0:254]  enclosu 3PARdata SES              3222  -
[3:0:1:0]    disk    3PARdata VV               3222  /dev/sdf
[3:0:1:254]  enclosu 3PARdata SES              3222  -
[4:0:0:0]    cd/dvd  hp       DVD D  DS8D3SH   HHE8  /dev/sr0
В квадратных скобках показывается адрес устройства. Почитайте man комманды lsscsi, удобные для использования опции.

PROC
# cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 03 Id: 00 Lun: 00
  Vendor: HP       Model: P410i            Rev: 6.64
  Type:   RAID                             ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: HP       Model: LOGICAL VOLUME   Rev: 6.64
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: Single   Model: Flash Reader     Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 00
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: 3PARdata Model: VV               Rev: 3222
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi2 Channel: 00 Id: 00 Lun: 254
  Vendor: 3PARdata Model: SES              Rev: 3222
  Type:   Enclosure                        ANSI  SCSI revision: 06
Host: scsi2 Channel: 00 Id: 01 Lun: 00
  Vendor: 3PARdata Model: VV               Rev: 3222
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi2 Channel: 00 Id: 01 Lun: 254
  Vendor: 3PARdata Model: SES              Rev: 3222
  Type:   Enclosure                        ANSI  SCSI revision: 06
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: hp       Model: DVD D  DS8D3SH   Rev: HHE8
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: 3PARdata Model: VV               Rev: 3222
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi3 Channel: 00 Id: 00 Lun: 254
  Vendor: 3PARdata Model: SES              Rev: 3222
  Type:   Enclosure                        ANSI  SCSI revision: 06
Host: scsi3 Channel: 00 Id: 01 Lun: 00
  Vendor: 3PARdata Model: VV               Rev: 3222
  Type:   Direct-Access                    ANSI  SCSI revision: 06
Host: scsi3 Channel: 00 Id: 01 Lun: 254
  Vendor: 3PARdata Model: SES              Rev: 3222
  Type:   Enclosure                        ANSI  SCSI revision: 06

Информацию по SCSI адаптерам можно посмотреть в файловой системе sys
# ls -ld /sys/class/scsi_host/host*/
drwxr-xr-x 2 root root 0 2008-08-06 17:25 /sys/class/scsi_host/host0/
drwxr-xr-x 2 root root 0 2008-08-06 17:25 /sys/class/scsi_host/host1/


Используемый SCSI драйвер
# cat /sys/class/scsi_host/host[0-1]/proc_name
ata_piix
ata_piix

Если SCSI устройства подключены по протоколу FC, то инфомацию о FC адаптерах можно найти там же
# ls -l /sys/class/fc_host/host*
lrwxrwxrwx 1 root root 0 Jun 26 21:41 /sys/class/fc_host/host2 -> ../../devices/pci0000:00/0000:00:01.0/0000:0e:00.0/host2/fc_host/host2
lrwxrwxrwx 1 root root 0 Jun 26 21:41 /sys/class/fc_host/host3 -> ../../devices/pci0000:00/0000:00:01.0/0000:0e:00.1/host3/fc_host/host3

WWN FC карточки инициатора
# cat /sys/class/fc_host/host*/port_name
0x5001438024246d18
0x5001438024246d1a

WWN FC карточки таргета
# cat /sys/class/fc_remote_ports/*/port_name
0x20510002ac018827
0x21510002ac018827
0x20520002ac018827
0x21520002ac018827

Удалить/добавить SCSI устройства в ядрах версии 2.4.Х. (так же работает и для новых ядер)
## смотрим подключенные устройства
# lsscsi
[0:0:0:0]    disk    ATA      IC35L040AVVA07-0 VA2O  /dev/sda
[0:0:1:0]    disk    ATA      WDC WD400BB-32CL 05.0  /dev/sdb
[1:0:0:0]    disk    ATA      QUANTUM FIREBALL A1Y.  /dev/sdc
[1:0:1:0]    cd/dvd  JLMS     DVD-ROM XJ-HD166 DD05  /dev/sr0

## удаляем устройство
# echo "scsi remove-single-device 1 0 0 0" > /proc/scsi/scsi

# lsscsi
[0:0:0:0]    disk    ATA      IC35L040AVVA07-0 VA2O  /dev/sda
[0:0:1:0]    disk    ATA      WDC WD400BB-32CL 05.0  /dev/sdb
[1:0:1:0]    cd/dvd  JLMS     DVD-ROM XJ-HD166 DD05  /dev/sr0

## добавляем устройство
# echo "scsi add-single-device 1 0 0 0" > /proc/scsi/scsi

# lsscsi
[0:0:0:0]    disk    ATA      IC35L040AVVA07-0 VA2O  /dev/sda
[0:0:1:0]    disk    ATA      WDC WD400BB-32CL 05.0  /dev/sdb
[1:0:0:0]    disk    ATA      QUANTUM FIREBALL A1Y.  /dev/sdd
[1:0:1:0]    cd/dvd  JLMS     DVD-ROM XJ-HD166 DD05  /dev/sr0


Это же можно сделать через файловую систему SYS ( linux 2.6.XX  и выше)
# echo "1" > /sys/block/sdc/device/delete
или вот так
# echo 1 > /sys/class/scsi_host/host<H>/device/target<H>:<B>:<T>/<H>:<B>:<T>:<L>/delete

Чтобы добавить scsi устройство
echo "<B> <T> <L>" > /sys/class/scsi_host/host<H>/scan

если хотите просканировать всю scsi шину замените B T L на три тире
echo "- - -" > /sys/class/scsi_host/host0/scan

в RHEL есть скрипт rescan-scsi-bus.sh который поставляется с пакетом sg3_utils.


Иногда бывает полезным изменить уровень логирования в драйвере scsi, это можно сделать вот так
# sysctl -q -w dev.scsi.logging_level=<N>


Выдержка из scsi_logging.h
/*
* This defines the scsi logging feature. It is a means by which the user
* can select how much information they get about various goings on, and it
* can be really useful for fault tracing. The logging word is divided into
* 8 nibbles, each of which describes a loglevel. The division of things is
* somewhat arbitrary, and the division of the word could be changed if it
* were really needed for any reason. The numbers below are the only place
* where these are specified. For a first go-around, 3 bits is more than
* enough, since this gives 8 levels of logging (really 7, since 0 is always
* off).
*/
#define SCSI_LOG_ERROR_SHIFT 0
#define SCSI_LOG_TIMEOUT_SHIFT 3
#define SCSI_LOG_SCAN_SHIFT 6
#define SCSI_LOG_MLQUEUE_SHIFT 9
#define SCSI_LOG_MLCOMPLETE_SHIFT 12
#define SCSI_LOG_LLQUEUE_SHIFT 15
#define SCSI_LOG_LLCOMPLETE_SHIFT 18
#define SCSI_LOG_HLQUEUE_SHIFT 21
#define SCSI_LOG_HLCOMPLETE_SHIFT 24
#define SCSI_LOG_IOCTL_SHIFT 27
#define SCSI_LOG_ERROR_BITS 3 /* additional logging associated with errors and recovery */
#define SCSI_LOG_TIMEOUT_BITS 3 /* additional logging associated with command timeouts */
#define SCSI_LOG_SCAN_BITS 3 /* additional logging associated with device scans and discovery */
#define SCSI_LOG_MLQUEUE_BITS 3 /* additional logging associated with mid-level command queueing */
#define SCSI_LOG_MLCOMPLETE_BITS 3 /* additional logging associated with mid-level command completions */
#define SCSI_LOG_LLQUEUE_BITS 3 /* additional logging associated with low-level command queueing */
#define SCSI_LOG_LLCOMPLETE_BITS 3 /* additional logging associated with low-level command completions */
#define SCSI_LOG_HLQUEUE_BITS 3 /* additional logging associated with hi-level command queueing */
#define SCSI_LOG_HLCOMPLETE_BITS 3 /* additional logging associated with hi-level command completions */
#define SCSI_LOG_IOCTL_BITS 3 /* additional logging associated with ioctl (typ: non-data commands) */
extern unsigned int scsi_logging_level;


Troubleshooting


В тарблшутинге пригодится SCSI-Programming-HOWTO





No comments:

Post a Comment