1,164 瀏覽數

Linux Disk Module

Linux 下要如何知道這一顆硬碟使用什麼模組 Module,有下面幾種方式來確認.

測試環境為 Ubuntu 16.04 x86_64 虛擬機.

lspci

root@ubuntu:~# lspci -v
...
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
...
root@ubuntu:~# lspci -s 00:10.0 -v
00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
	Subsystem: VMware LSI Logic Parallel SCSI Controller
	Flags: bus master, medium devsel, latency 64, IRQ 17
	I/O ports at 1400 [size=256]
	Memory at feba0000 (64-bit, non-prefetchable) [size=128K]
	Memory at febc0000 (64-bit, non-prefetchable) [size=128K]
	[virtual] Expansion ROM at c0008000 [disabled] [size=16K]
	Capabilities: [f8] PCI Advanced Features
	Kernel driver in use: mptspi
	Kernel modules: mptspi

透過指令 # lspci -v 就可以查出 SCSI storage controller 的 Kernel driver 是 mptspi ,但是還是不能很直覺的查出哪一顆硬碟對應哪一個模組.

lshw

root@ubuntu:~# apt install lshw
root@ubuntu:~# lshw -class storage
  *-scsi
       description: SCSI storage controller
       product: 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
       vendor: LSI Logic / Symbios Logic
       physical id: 10
       bus info: pci@0000:00:10.0
       logical name: scsi2
       version: 01
       width: 64 bits
       clock: 33MHz
       capabilities: scsi bus_master cap_list rom scsi-host
       configuration: driver=mptspi latency=64 maxlatency=255 mingnt=6
       resources: irq:17 ioport:1400(size=256) memory:feba0000-febbffff memory:febc0000-febdffff memory:c0008000-c000bfff

透過指令 # lshw -class storage 就可以查出 SCSI storage controller 的 configuration: driver 是 mptspi ,但是還是不能很直覺的查出哪一顆硬碟對應哪一個模組.

hwinfo

root@ubuntu:~# apt install hwinfo
root@ubuntu:~# hwinfo --block
55: SCSI 200.0: 10600 Disk                                      
  [Created at block.245]
  Unique ID: R7kM.nTPZhtpisM9
  Parent ID: 37TO.741NuwlerHD
  SysFS ID: /class/block/sda
  SysFS BusID: 2:0:0:0
  SysFS Device Link: /devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0
  Hardware Class: disk
  Model: "VMware Virtual S"
  Vendor: "VMware,"
  Device: "VMware Virtual S"
  Revision: "1.0"
  Driver: "mptspi", "sd"
  Driver Modules: "mptspi"
  Device File: /dev/sda (/dev/sg0)
  Device Files: /dev/sda, /dev/disk/by-path/pci-0000:00:10.0-scsi-0:0:0:0
  Device Number: block 8:0-8:15 (char 21:0)
  BIOS id: 0x80
  Geometry (Logical): CHS 2610/255/63
  Size: 41943040 sectors a 512 bytes
  Capacity: 20 GB (21474836480 bytes)
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #14 (SCSI storage controller)

透過指令 # hwinfo –block 就可以查出 SCSI 200.0: 10600 Disk 的 Driver Modules: 是 mptspi ,而且在 SysFS ID 與 Device File 有顯示這是哪一顆硬碟.

udevadm

root@ubuntu:~# udevadm info -a -n /dev/sda

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda':
    KERNEL=="sda"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{alignment_offset}=="0"
    ATTR{capability}=="50"
    ATTR{discard_alignment}=="0"
    ATTR{events}==""
    ATTR{events_async}==""
    ATTR{events_poll_msecs}=="-1"
    ATTR{ext_range}=="256"
    ATTR{inflight}=="       0        0"
    ATTR{range}=="16"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="41943040"
    ATTR{stat}=="   93942       57  2077938    64760     5006    14944   770728    84672        0    37372   149132"

  looking at parent device '/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0':
    KERNELS=="2:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{device_busy}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{eh_timeout}=="10"
    ATTRS{evt_capacity_change_reported}=="0"
    ATTRS{evt_inquiry_change_reported}=="0"
    ATTRS{evt_lun_change_reported}=="0"
    ATTRS{evt_media_change}=="0"
    ATTRS{evt_mode_parameter_change_reported}=="0"
    ATTRS{evt_soft_threshold_reached}=="0"
    ATTRS{inquiry}==""
    ATTRS{iocounterbits}=="32"
    ATTRS{iodone_cnt}=="0x182e7"
    ATTRS{ioerr_cnt}=="0x6"
    ATTRS{iorequest_cnt}=="0x182e7"
    ATTRS{model}=="VMware Virtual S"
    ATTRS{queue_depth}=="32"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{queue_type}=="simple"
    ATTRS{rev}=="1.0 "
    ATTRS{scsi_level}=="3"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{type}=="0"
    ATTRS{vendor}=="VMware, "

  looking at parent device '/devices/pci0000:00/0000:00:10.0/host2/target2:0:0':
    KERNELS=="target2:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:10.0/host2':
    KERNELS=="host2"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:10.0':
    KERNELS=="0000:00:10.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="mptspi"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x010000"
    ATTRS{config}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x0030"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="17"
    ATTRS{local_cpulist}=="0"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000001"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x1976"
    ATTRS{subsystem_vendor}=="0x15ad"
    ATTRS{vendor}=="0x1000"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

#udevadm 的使用更直覺,可以直接指定硬碟,在 DRIVERS 顯示為 mptspi.

/sys

如果你的環境都沒有上述的工具,透過檢視 /sys 也可以查出硬碟使用了什麼模組 Module.

root@ubuntu:~# ll /sys/block/sda
lrwxrwxrwx 1 root root 0 Jan 15 22:57 /sys/block/sda -> ../devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda/
root@ubuntu:~# find /sys|grep -i drivers|grep 0000:00:10.0
/sys/bus/pci/drivers/mptspi/0000:00:10.0

關於 /sys 目錄 (從 2.6 核心開始硬體的系統資訊以更階層式目錄的架構來存放)可以參考 http://benjr.tw/20857

發表迴響