실제 장치를 연결하면 해당 장치 파일이 속한 장치 파일을 어떻게 알 수 있습니까?


13

자동으로 마운트되지 않는 여러 USB 드라이브를 연결한다고 가정 해보십시오. 어떤 장치 파일이 어떤 물리적 장치에 속하는지 어떻게 알 수 있습니까? 예를 들어 마운트 할 수 있습니까?

나는 Mac OS X를 사용하고 있지만 모든 (또는 적어도 가장 인기있는) Unix 시스템에서 작동하는 답변을 좋아합니다. 과거에 Linux 에서이 문제가있었습니다.


리눅스에서는 대답에 udev가 포함되는 경향이 있습니다. 따라서 OSX 에서 udev 등가물을 둘러보십시오 . 이것은 특히 OSXOSX USB 장치 인터페이스 안내서의 udev 기능 대안으로 이어집니다 .
Gilles 'SO- 악마 그만'

MacOSX에서 가장 간단한 방법은 레이블로 볼륨을 식별하는 것입니다. 그러나 Gilles는 완벽한 솔루션을 제공합니다.
peterh-Reinstate Monica

답변:


14

udev 사용하기 :

유용한 정보 쿼리를 얻을 수 있습니다 udev(거의 모든 데스크탑 유형 Linux를 사용하는 시스템에서). 예를 들어, 연결된 연결된 드라이브를 알고 싶다면 /dev/sdb다음을 사용할 수 있습니다.

udevadm info --query=property --name=sdb

일련 번호 (ID_SERIAL_SHORT)를 포함하여 해당 장치의 속성 목록이 표시됩니다. 해당 정보가 있으면 lsusb -v제조업체 및 제품 이름과 같은 결과를 보고 찾을 수 있습니다.

이를위한 짧은 경로는

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

$ID_VENDOR_ID:$ID_MODEL_ID보다 짧은 출력에서 일치하는 라인을 참조하십시오 lsusb.

또 다른 유용한 옵션은 udevadm monitor입니다. 장치 를 연결할 때 어떤 장치 노드가 만들어 졌는지 알고 싶다면 사용하십시오 . 첫 실행

 udevadm monitor --udev --subsystem-match=block

그런 다음 장치를 연결하십시오. 감지 된 블록 장치 (디스크 / 파티션)의 장치 이름이 각 출력 라인의 끝에 인쇄 된 것을 볼 수 있습니다.

실제 예제 쉘 함수 :

다음은 .bashrc(또는 .zshrc)에 넣을 수있는 기능입니다 .

listusbdisks () 
{
    [[ "x $ 1"== "xv"]] && shift && 로컬 VERBOSE = -v
    $ {@-/ dev / sd에서 dsk에 대해?}
    하다
        / sbin / udevadm info --query = path --name = "$ dsk"| grep --colour = auto -q usb || 계속하다
        echo "===== 장치 $ dsk는 :"
        (평가 $ (/ sbin / udevadm info --query = property --name = "$ dsk"| grep "\ (MODEL \ | VENDOR \) _ ID")
          [ "$ ID_VENDOR_ID : $ ID_MODEL_ID"== ":"] && echo "알 수 없음"|| \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID : $ ID_MODEL_ID"
        )
        grep -q "$ dsk"/ proc / mounts && echo "----- 장치가 마운트되었습니다 ----"
        에코
    끝난
}

다음과 같이 사용하십시오 :

  • listusbdisks-모든 /dev/sdx장치 를 인식 합니다.
  • listusbdisks sdb또는 listusbdisks /dev/sdb또는 listusbdisks sdb sdc-특정 장치에 대한 정보 만 가져옵니다.
  • listusbdisks -v [optional devices as above] -자세한 출력을 표시합니다 lsusb

[편집] : 많은 장치 쿼리, 마운트 확인 및의 상세 제어와 같은 기능이 추가되었습니다 lsusb.


모든 시스템이 사용하는 것은 아닙니다 udev.
Caleb

@Caleb True ... 사실, lsusb또한 선택적 프로그램입니다. 그러나 둘 다 매우 일반적입니다.
rozcietrzewiacz

@rozcietrzewiacz이 문제는 주로 OSX에 관한 것이지만 udev는 본질적으로 Linux에만 해당됩니다.
Gilles 'SO- 악마 그만해'

@ 길 잘, 사실. OSX에 대한 경험이 없으므로 오해의 소지가 없도록 답변을 업데이트했습니다.
rozcietrzewiacz

이러한 경우 일반적으로하는 일은 장치를 연결하고 즉시 실행하는 것 dmesg입니다. 그러나 장치가 이미 연결되어 있고 첫 번째 장치 뒤에 더 많은 장치가 연결되어 있으면 도움이되지 않습니다. :)
Abhishek A

3

보편적 인 대답은 없습니다. Linux에서 가장 간단한 방법은 그놈 디스크 유틸리티를 시작하는 것입니다. 감지 된 모든 디스크가 마운트되었는지 여부에 관계없이 표시됩니다. 명령 행에서 blkid또는 의 출력을 참조 할 수 있습니다 udevadm info --export-db.


3

Mac OS X에서는을 사용해보십시오 diskutil list.


1

모든 유닉스와 관련하여 이것이 가능하다고 생각하지 않습니다.

오늘날 일반적인 외부 버스는 IDE처럼 고정 된 번호 체계를 포트에 사용하지 않습니다. 따라서 매핑에 필요한 나머지 데이터 소스는 드라이브 제조업체 이름, 일련 번호 또는 파티션 UID입니다.

특정 머신에서 제조업체 이름이 반드시 고유하지는 않습니다 (동일한 시리즈에서 두 개의 외부 드라이브를 연결한다고 가정하면 동일하게 식별 됨). 일련 번호는 파티션 UID와 같이 "외부에서 볼 수 없습니다".

따라서 내가 생각할 수있는 유일한 범용 솔루션에 대해서는 물리적 드라이브에 일련 번호로 레이블을 지정하고 UDEV를 사용할 수있는 경우 rozcietrzewiacz의 답변에 제공된 udevadm 명령을 사용하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.