首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定拥有磁盘的linux驱动程序

确定拥有磁盘的linux驱动程序
EN

Stack Overflow用户
提问于 2013-07-26 10:20:37
回答 2查看 6.2K关注 0票数 4

我正在尝试调试硬件上的SSD没有被正确的设备驱动程序检测到的情况。应该拥有SSD的设备驱动程序是一个软件RAID驱动程序(megasr),它将在镜像模式下自动配置2个SSD。我很肯定,超级跑车司机并没有发现/拥有SSD的,但我不确定哪个司机真的检测到了它们。

在Linux中是否有一种方法可以确定哪个设备驱动程序在/dev目录中拥有特定的磁盘。

因此,我想确定哪个驱动程序拥有设备/dev/sda,例如。

操作系统是RHEL 6.x。

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2013-07-27 08:14:30

您可以看到内核日志。

代码语言:javascript
复制
dmesg | grep sda
<...>
[    0.618438] sd 2:0:0:0: [sda] Attached SCSI disk
<...>

日志讨论的是scsi磁盘,而SD2:0:0:0是生成该消息的设备。您可以查看sysfs以获得更多详细信息:

代码语言:javascript
复制
cd /sys/block/
cd /sys/block/sda/

在这里,您可以找到有关所有块设备的信息。如果您查看特定设备的目录,您应该会看到它的信息。

这里是关于scsi总线的信息。有两个目录:驱动程序和设备。

代码语言:javascript
复制
cd /sys/bus/scsi
cd /sys/bus/scsi/devices
cd /sys/bus/scsi/drivers

这是scsi总线上的司机名单。

代码语言:javascript
复制
ls /sys/bus/scsi/drivers
 sd  sr

日志上写着sd 2:0:0:0

代码语言:javascript
复制
cd /sys/bus/scsi/drivers/sd/2:0:0:0

这是我的设备,所以sd是我的驱动程序。

磁盘是块设备,您应该看到目录块。

代码语言:javascript
复制
cd /sys/bus/scsi/drivers/sd/2:0:0:0/block/sda

可能有一个程序会自动地这样做:)

如果错误的驱动程序正在处理您的设备,您可以从该驱动程序中解除该设备的绑定,并且可以将其绑定到另一个驱动程序。

代码语言:javascript
复制
ls /sys/bus/scsi/drivers/sd
 2:0:0:0  bind  uevent  unbind

您可以在取消绑定文件上写入设备标识符,以便将该设备与驱动程序分离。

代码语言:javascript
复制
echo -n "2:0:0:0" > unbind

然后您可以将您的设备连接到另一个驱动程序上。

代码语言:javascript
复制
cd /sys/bus/scsi/drivers/<a-driver>
echo -n "2:0:0:0" > bind

显然(1),不能将scsi设备绑定到非scsi驱动程序。显然(2),这不是解决特定问题的答案,但它是检索解决问题所需信息的一种方法。

票数 7
EN

Stack Overflow用户

发布于 2017-02-22 03:12:02

  • 使用SCSI_IOCTL_GET_BUS_NUMBER(0x5386) IOCTL获取SCSI主机id。
  • /sys/class/scsi_host/host<scsi host id>/proc_name文件包含设备驱动程序。

剧本:

代码语言:javascript
复制
#!/usr/bin/python
# Copyright 2016 Gris Ge <cnfourt@gmail.com>
# 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()

示例:

代码语言:javascript
复制
[fge@Gris-Laptop source]$ sudo python find_driver_of_sdx.py /dev/sda
ahci
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17878843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档