Linux 2.6.39カーネルを搭載したマシンの(可変)数のディスクに接続されたPCI接続のSATAコントローラーがあります。コントローラのPCIアドレスを知って、ディスクの物理的な場所を見つけようとしています。
この場合、コントローラーはアドレス0000:01:00.0にあり、SCSIアドレス6:0.0.0.0および8:0.0.0の2つのディスクがあります(これらの最後の2つは必ずしも固定されているわけではありませんが、これは単に今です)。
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
から始めます。
ディスクを見つけるために使用できるものにコントローラーアドレスをマップする他の方法はありますか?
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
devadm
を使用して同じデバイスに問い合わせると、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番目の位置にあるデータです。