SATA 컨트롤러의 PCI 주소와 연결된 디스크의 SCSI 주소를 일치시키세요.

SATA 컨트롤러의 PCI 주소와 연결된 디스크의 SCSI 주소를 일치시키세요.

Linux 2.6.39 커널이 설치된 컴퓨터의 (가변) 수의 디스크에 PCI 연결 SATA 컨트롤러가 연결되어 있습니다. 컨트롤러의 PCI 주소를 알고 디스크의 물리적 위치를 찾으려고 합니다.

이 예에서 컨트롤러는 주소 0000:01:00.0에 있고 SCSI 주소가 6:0.0.0.0 및 8:0.0.0인 두 개의 디스크가 있습니다(마지막 두 개가 반드시 고정된 것은 아니지만 이것이 의미임). 지금).

lshw -c storage컨트롤러 및 SCSI 장치 표시(시스템 디스크 및 컨트롤러 정리):

*-storage               
   description: SATA controller
   product: Marvell Technology Group Ltd.
   vendor: Marvell Technology Group Ltd.
   physical id: 0
   bus info: pci@0000:01:00.0
   version: 10
   width: 32 bits
   clock: 33MHz
   capabilities: storage pm msi pciexpress ahci_1.0 bus_master cap_list rom
   configuration: driver=ahci latency=0
   resources: irq:51 ioport:e050(size=8) ioport:e040(size=4) ioport:e030(size=8) ioport:e020(size=4) ioport:e000(size=32) memory:f7b10000-f7b107ff memory:f7b00000-f7b0ffff
*-scsi:1
   physical id: 2
   logical name: scsi6
   capabilities: emulated
*-scsi:2
   physical id: 3
   logical name: scsi8
   capabilities: emulated

lshw -c disk디스크 표시:

*-disk
   description: ATA Disk
   product: TOSHIBA THNSNF25
   vendor: Toshiba
   physical id: 0.0.0
   bus info: scsi@6:0.0.0
   logical name: /dev/sdb
   version: FSXA
   serial: 824S105DT15Y
   size: 238GiB (256GB)
   capabilities: gpt-1.00 partitioned partitioned:gpt
   configuration: ansiversion=5 guid=79a679b1-3c04-4306-a498-9a959e2df371 sectorsize=4096
*-disk
   description: ATA Disk
   product: TOSHIBA THNSNF25
   vendor: Toshiba
   physical id: 0.0.0
   bus info: scsi@8:0.0.0
   logical name: /dev/sdc
   version: FSXA
   serial: 824S1055T15Y
   size: 238GiB (256GB)
   capabilities: gpt-1.00 partitioned partitioned:gpt
   configuration: ansiversion=5 guid=79a679b1-3c04-4306-a498-9a959e2df371 sectorsize=4096

그러나 PCI 주소에서 SCSI 주소로 이동할 수 있는 방법은 없는 것 같습니다. 또한 PCI 및 SCSI 장치에 대한 sysfs 항목을 살펴보았지만 연결을 설정하는 항목을 찾지 못했습니다. 디스크가 컨트롤러의 다른 물리적 포트에 연결될 때 SCSI 주소는 반드시 변경되지 않으므로 디스크 위치를 올바르게 결정하기 위해 오프셋과 함께 사용할 수 없습니다.

ID별로 디스크를 나열하는 것도 작동하지 않습니다. ls -lah /dev/disks/by-path표시된 항목은 pci-0000:01:00.0-scsi-0:0:0:0( 또는 일반적으로 연결된 마지막 디스크)를 가리키며 해당 드라이브 파티션에 대한 링크 외에 /dev/sdc시작할 다른 경로가 없습니다 .pci-0000:01:00.0

디스크를 찾는 데 사용할 수 있는 주소에 컨트롤러 주소를 매핑하는 다른 방법이 있습니까?

답변1

lshw -c disk이 명령의 출력을 상호 참조하면 원하는 것을 얻을 수 있을 것 같습니다 udevadm info -q all -n <device>.

예를 들어

/dev/sda장치에는 다음 출력이 표시됩니다 lshw.

$ sudo lshw -c disk
  *-disk                  
       description: ATA Disk
       product: ST9500420AS
       vendor: Seagate
       physical id: 0
       bus info: scsi@0:0.0.0
       logical name: /dev/sda
       version: 0003
       serial: 5XA1A2CZ
       size: 465GiB (500GB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 signature=ebc57757

다음 명령을 사용하여 동일한 장치에 요청하면 udevadm그것이 무엇인지 알 수 있습니다 DEVPATH.

$ sudo udevadm info -q all -n /dev/sda | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda

이 문자열에는 장치에 대해 찾고 있는 모든 정보가 포함되어 있습니다. PCI 주소 "0000:00:1f.2"및 SCSI 주소 "0:0:0:0". 이 데이터를 슬래시("/")로 구분하면 SCSI 주소는 6번째 위치의 데이터입니다.

답변2

다음을 직접 사용할 수 있습니다 -q path.

SD=`ls /dev | grep -E "^sd[a-z]+$"`
for sd in $SD; do
   sys_path=`udevadm info -q path -p /sys/block/$sd 2>/dev/null`
   echo "$sd: $sys_path"
done

예제 출력:

sda: /devices/pci0000:00/0000:00:01.0/0000:01:01.0/ata1/host0/target0:0:0/0:0:0:0/block/sda
sdaa: /devices/pci0000:04/0000:04:04.0/0000:06:01.0/ata29/host28/target28:0:0/28:0:0:0/block/sdaa
sdab: /devices/pci0000:04/0000:04:04.0/0000:06:01.0/ata31/host30/target30:0:0/30:0:0:0/block/sdab
sdac: /devices/pci0000:04/0000:04:04.0/0000:06:01.0/ata32/host31/target31:0:0/31:0:0:0/block/sdac
sdad: /devices/pci0000:04/0000:04:04.0/0000:06:01.0/ata33/host32/target32:0:0/32:0:0:0/block/sdad
sdae: /devices/pci0000:04/0000:04:04.0/0000:06:01.0/ata34/host33/target33:0:0/33:0:0:0/block/sdae
sdaf: /devices/pci0000:09/0000:09:07.0/0000:0a:01.0/ata35/host34/target34:0:0/34:0:0:0/block/sdaf

관련 정보