2013-07-26 3 views
3

올바른 장치 드라이버가 내 하드웨어의 SSD를 감지하지 못하는 상황을 디버깅하려고합니다. SSD를 소유해야하는 장치 드라이버는 미러링 모드에서 2 개의 SSD를 자동으로 구성하는 소프트웨어 RAID 드라이버 (megasr)입니다. 나는 megasr 드라이버가 SSD를 감지/소유하고 있지 않다고 확신하지만, 어떤 드라이버가 실제로 그것을 감지하는지 확신 할 수 없다.디스크를 소유하고있는 Linux 드라이버를 확인하십시오.

Linux에서/dev 디렉토리 내의 특정 디스크를 소유 한 장치 드라이버를 확인할 수있는 방법이 있습니까?

그래서 어떤 드라이버가/dev/sda 장치를 소유하고 있는지 확인하고 싶습니다.

OS는 RHEL 6.x입니다.

감사합니다.

답변

7

당신은 로그는 SCSI 디스크에 대해 이야기하고, SD 된 커널 로그를

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

을 볼 수 있습니다 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 버스에 드라이버 목록이 있습니다. 그래서 내 드라이버 SD, 여기서 내 디바이스 0

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

: 0 : 0

ls /sys/bus/scsi/drivers 
sd sr 

로그는 2 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