본문 바로가기
IT 지식정리/스토리지

리눅스: HBA에 연결된 디바이스 확인

by G. Hong 2018. 3. 27.
728x90
반응형

RHEL6환경에서 HBA에 연결된 디바이스들을 확인하는 방법에 대해서 포스팅하도록 하겠습니다.

출처: http://fibrevillage.com/storage/8-check-and-list-luns-attached-to-hba-in-rhel6


먼저 lspci커맨드를 통해서 설치된 HBA카드를 확인합니다.

# lspci | grep Fibre
15:00.0 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
15:00.1 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)

그리고 HBA 디테일 정보를 확인합니다.

# lspci -v -s 15:00.0
15:00.0 Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
    Subsystem: QLogic Corp. Device 015d
    Physical Slot: 2
    Flags: bus master, fast devsel, latency 0, IRQ 24
    I/O ports at 2200 [size=256]
    Memory at 97b00000 (64-bit, non-prefetchable) [size=16K]
    Expansion ROM at 90000000 [disabled] [size=256K]
    Capabilities: [44] Power Management version 3
    Capabilities: [4c] Express Endpoint, MSI 00
    Capabilities: [88] MSI: Enable- Count=1/32 Maskable- 64bit+
    Capabilities: [98] Vital Product Data
    Capabilities: [a0] MSI-X: Enable+ Count=2 Masked-
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [138] Power Budgeting <?>
    Kernel driver in use: qla2xxx
    Kernel modules: qla2xxx

위의 결과에서는 HBA가 PCI slot2에 있고 2개의 FC포트가 있는것을 확인 할 수 있습니다.


다음으로 pci 슬롯과 scsi_host 맵핑을 확인합니다.

# ls -l /sys/class/scsi_host
total 0

...
lrwxrwxrwx 1 root root 0 Oct  9 12:58 host4 -> ../../devices/pci0000:00/0000:00:1f.5/host4/scsi_host/host4
lrwxrwxrwx 1 root root 0 Oct  9 12:58 host5 -> ../../devices/pci0000:00/0000:00:03.0/0000:15:00.0/host5/scsi_host/host5
lrwxrwxrwx 1 root root 0 Oct  9 12:58 host6 -> ../../devices/pci0000:00/0000:00:03.0/0000:15:00.1/host6/scsi_host/host6

여기서 slot 2의 첫 번째 포트는 host5, 다른 포트는 host6으로 매핑이 된 것을 알 수 있습니다.


HBA포트의 타겟 LUN을 찾아보겠습니다.

위의 예시를 계속 사용해서 15:00.0을 계속 사용해보면 아래의 커맨드로 확인이 가능합니다.

#find /sys/class/pci_bus/0000\:15/device/0000\:15\:00.0/host*/rport-*/target*/*/state | awk -F'/' '{print $11}' | sort
...
5:0:0:0
5:0:0:1
5:0:0:10
5:0:0:11
5:0:0:2
5:0:0:3
5:0:0:31
5:0:0:4
5:0:0:5
...
이 내용들은 /proc/scsi/scsi에서도 확인이 가능합니다.
#cat /proc/scsi/scsi | grep scsi5
...
Host: scsi5 Channel: 00 Id: 04 Lun: 04
Host: scsi5 Channel: 00 Id: 04 Lun: 05
Host: scsi5 Channel: 00 Id: 04 Lun: 06
Host: scsi5 Channel: 00 Id: 04 Lun: 07
Host: scsi5 Channel: 00 Id: 04 Lun: 08
Host: scsi5 Channel: 00 Id: 04 Lun: 09
Host: scsi5 Channel: 00 Id: 04 Lun: 10
Host: scsi5 Channel: 00 Id: 04 Lun: 11
Host: scsi5 Channel: 00 Id: 04 Lun: 31
...

Note: 만약 SAS로 연결된 경우라면 'rport' 대신 'port'로 검색을 하시면 됩니다.


테입드라이브, 디스크 LUN과 같은 블록디바이스를 찾는다면 아래처럼 찾을 수 있습니다.

# find   /sys/class/pci_bus/0000\:15/device/0000\:15\:00.0/host*/rport-*/target*/*/block/*/stat | awk -F'/' '{print $11,$13}'
5:0:0:0 sdb
5:0:0:1 sdc
5:0:0:10 sdl
5:0:0:11 sdm
5:0:0:2 sdd
5:0:0:3 sde
5:0:0:4 sdf
5:0:0:5 sdg
5:0:0:6 sdh


만약 반대로 /dev/sdd 디바이스가 어디에 연결이 되었는지 확인을 하기 위해서는 udevadm 커맨드를 사용할 수 있습니다.

# udevadm info --query=path --name /dev/sdd
/devices/pci0000:00/0000:00:03.0/0000:15:00.0/host5/rport-5:0-0/target5:0:0/5:0:0:2/block/sdd


Multipath 커맨드를 사용해서도 확인이 가능합니다.

multipath -ll | grep sdd
  `- 5:0:0:2  sdd  8:48    active ready running


또는 /dev/disk/by-path 트리를 통해서 확인할 수 도 있습니다.

...
lrwxrwxrwx 1 root root 10 Aug 15 16:49 /dev/disk/by-path/pci-0000:15:00.1-fc-0x22430080e524ebac-lun-4 -> ../../sdcx
lrwxrwxrwx 1 root root 10 Aug 15 16:49 /dev/disk/by-path/pci-0000:15:00.1-fc-0x22430080e524ebac-lun-5 -> ../../sdcy
...


HBA WWNA정보는 아래와 같이 확인이 가능합니다.

# for port in /sys/class/fc_host/host[0-9]/port_name; { echo -n "$port : "; cat $port; }
/sys/class/fc_host/host5/port_name : 0x21000024ff3434e4
/sys/class/fc_host/host6/port_name : 0x21000024ff3434e5


다이나믹으로 scsi디바이스를 추가 또는 제거할 수 도 있습니다.

아래는 hot remove 에 대한 예시입니다.

    echo 1 > /sys/class/scsi_device/h:c:t:l/device/delete
    또는
    echo 1 > /sys/block/<dev>/device/delete
    여기서 <dev> 는 sda,
sdb 등..
    또는
    echo "scsi remove-single-device a b c d" > /proc/scsi/scsi


그리고 hot add 도 유사하게 진행합니다.

    echo "c t l" >  /sys/class/scsi_host/host<h>/scan
    또는
    echo "- - -" > /sys/class/scsi_host/host<h>/scan
    또는
    echo "scsi add-single-device h c t l" > /proc/scsi/scsi
여기서
          h == hostadapter id (first one being 0)
          c == SCSI channel on hostadapter (first one being 0)
          t == ID
          l == LUN (first one being 0)



728x90
반응형