2013-07-26 85 views
3

我想調試一下我的硬件上的SSD沒有被正確的設備驅動程序檢測到的情況。應該擁有SSD的設備驅動程序是一個軟件RAID驅動程序(megasr),它將自動配置2個SSD處於鏡像模式。我很確定megasr驅動程序沒有檢測/擁有SSD,但我不確定哪個驅動程序實際檢測到它們。確定擁有磁盤的linux驅動程序

在Linux中,我可以確定哪個設備驅動程序擁有/ dev目錄中的特定磁盤。

因此,我想確定哪個驅動程序擁有設備/ dev/sda,例如。

操作系統是RHEL 6.x.

非常感謝。

回答

7

你可以看到內核日誌

dmesg | grep sda 
<...> 
[ 0.618438] sd 2:0:0:0: [sda] Attached SCSI disk 
<...> 

日誌在談論一個SCSI磁盤,SD 2:0:0:0是生成該消息的裝置。你可以檢查sysfs的更多細節:

cd /sys/block/ 
cd /sys/block/sda/ 

在這裏你可以找到關於所有塊設備的信息。如果你看看你的特定設備的目錄,你應該看到它的信息。

這裏有關於scsi總線的信息。有兩個目錄:驅動程序設備

cd /sys/bus/scsi 
cd /sys/bus/scsi/devices 
cd /sys/bus/scsi/drivers 

這裏是scsi總線上的驅動程序列表。

ls /sys/bus/scsi/drivers 
sd sr 

日誌說SD 2:0:0:0

cd /sys/bus/scsi/drivers/sd/2:0:0:0 

這裏我的設備,所以SD是我的司機。

磁盤是塊設備,你應該看到的目錄

cd /sys/bus/scsi/drivers/sd/2:0:0:0/block/sda 

有可能是這個自動:)

做,如果錯誤的驅動程序正在處理您的設備,你的程序可以取消綁定來自該驅動程序的設備,並且可以將其綁定到另一個設備。

ls /sys/bus/scsi/drivers/sd 
2:0:0:0 bind uevent unbind 

您可以在解除綁定文件上寫入設備標識符,以將該設備從驅動程序中分離出來。

echo -n "2:0:0:0" > unbind 

然後你就可以將設備連接到另一個驅動程序

cd /sys/bus/scsi/drivers/<a-driver> 
echo -n "2:0:0:0" > bind 

顯然,(1),你不能綁定一個SCSI設備,以非SCSI驅動器。 顯然,(2),這是不是您的特定問題的答案,但它是檢索,你需要解決的問題

+0

謝謝,我會盡快嘗試了這一點,看看它是否解決了我的問題。 –

1
  • 獲取使用SCSI_IOCTL_GET_BUS_NUMBER(0x5386) IOCTL SCSI主機ID的信息的方式。
  • /sys/class/scsi_host/host<scsi host id>/proc_name文件包含設備驅動程序。

腳本:

#!/usr/bin/python 
# Copyright 2016 Gris Ge <[email protected]> 
# Licensed to the public domain. 

from array import array 
from fcntl import ioctl 
import sys 
import os 

SCSI_IOCTL_GET_BUS_NUMBER = 0x5386 
SYSFS_SCSI_HOST_DRV_FORMAT = "/sys/class/scsi_host/host{HOST_ID}/proc_name" 

def get_scsi_host_id(path): 
    fd = open(path, "wb") 
    buff = array('i', [0]) 
    ioctl(fd, SCSI_IOCTL_GET_BUS_NUMBER, buff, 1) 
    fd.close() 
    return int(buff[0]) 

def main(): 
    scsi_host_id = get_scsi_host_id(sys.argv[1]) 
    os.system("cat %s" % 
       SYSFS_SCSI_HOST_DRV_FORMAT.format(**{"HOST_ID":scsi_host_id})) 

main() 

例子:

[[email protected] source]$ sudo python find_driver_of_sdx.py /dev/sda 
ahci 
相關問題