Определите драйвер 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