将数据设备编号映射到逻辑设备名称

jsd*_*jsd 10 linux hard-drive

我收到有关“ata3”的内核消息。如何找出对应的设备(/dev/sd_)?

Lil*_*ahn 9

http://www.phuket-data-wizards.com/blog/2011/07/16/matching-linux-ata-numbers-to-the-device-names/
该命令grep '[0-9]' /sys/class/scsi_host/host{0..9}/unique_id 将提供类似的输出

/sys/class/scsi_host/host0/unique_id:1  
/sys/class/scsi_host/host1/unique_id:2  
/sys/class/scsi_host/host2/unique_id:0  
/sys/class/scsi_host/host3/unique_id:0  
/sys/class/scsi_host/host4/unique_id:3  
/sys/class/scsi_host/host5/unique_id:4  
/sys/class/scsi_host/host6/unique_id:5  
/sys/class/scsi_host/host7/unique_id:6
Run Code Online (Sandbox Code Playgroud)

因此我们可以将内核错误消息中使用的唯一 ID 与主机号进行匹配。然后该命令ls -l /sys/block/sd*将向我们显示哪个设备名称属于哪个主机号:

/sys/block/sda -> ../devices/pci0000:00/0000:00:13.2/usb1/1-6/1-6:1.0/host2/target2:0:0/2:0:0:0/block/sda  
/sys/block/sdb -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:0/block/sdb  
/sys/block/sdc -> ../devices/pci0000:00/0000:00:12.0/host6/target6:0:0/6:0:0:0/block/sdc
/sys/block/sdd -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:1/block/sdd  
/sys/block/sde -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:2/block/sde
/sys/block/sdf -> ../devices/pci0000:00/0000:00:13.2/usb1/1-8/1-8:1.0/host3/target3:0:0/3:0:0:3/block/sdf  
/sys/block/sdg -> ../devices/pci0000:00/0000:00:12.0/host7/target7:0:0/7:0:0:0/block/sdg
Run Code Online (Sandbox Code Playgroud)

从这两个输出我们可以看到唯一的 id 6 映射到 host7,host7 映射到 /dev/sdg。最后,使用命令hdparm -i /dev/sdg
/dev/sdg: Model=ST3500418AS, FwRev=CC34, SerialNo=6VM2KSFD
我们可以找到驱动器的序列号。

  • 我将您的答案包装在一行中,以便更易于使用:`ata=3; ls -l /sys/block/sd* | grep $(grep $ata /sys/class/scsi_host/host*/unique_id | awk -F'/' '{print $5}')` (2认同)