Определите драйвер Linux, которому принадлежит диск

Я пытаюсь отладить ситуацию, когда SSD на моем оборудовании не определяется правильным драйвером устройства. Драйвер устройства, который должен иметь SSD, является программным драйвером RAID (megasr), который автоматически настроит 2 SSD в режиме зеркалирования. Я вполне уверен, что драйвер megasr не обнаруживает / не владеет твердотельными накопителями, но я не уверен, какой драйвер фактически их обнаруживает.

Есть ли способ в Linux, чтобы я мог определить, какой драйвер устройства принадлежит конкретному диску в каталоге / dev.

Поэтому я хотел бы определить, к какому драйверу принадлежит устройство / dev / sda, например.

ОС RHEL 6.x.

Большое спасибо.

2 ответа

Вы можете увидеть журнал ядра

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

В журнале сказано, сд 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), это не ответ для вашей конкретной проблемы, но это способ получить информацию, необходимую для решения проблемы.

  • Получить идентификатор хоста SCSI, используя SCSI_IOCTL_GET_BUS_NUMBER(0x5386) IOCTL.
  • /sys/class/scsi_host/host<scsi host id>/proc_name Файл содержит драйвер устройства.

Автор сценария:

#!/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()

Пример:

[fge@Gris-Laptop source]$ sudo python find_driver_of_sdx.py /dev/sda
ahci
Другие вопросы по тегам