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
ディスクを見つけるために使用できるアドレスにコントローラアドレスをマッピングする別の方法はありますか?
答え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