장치가 연결된 USB 포트 식별

장치가 연결된 USB 포트 식별

f3저는 USB 플래시 드라이브의 대규모 복사 및 대규모 테스트(사용)를 위한 사용자 정의 Bash 스크립트를 개발 중입니다 .

펜 드라이브가 어떤 USB 포트에 연결되어 있는지 식별할 수 있는지 알고 싶습니다.

번호가 매겨진 포트가 있는 USB 허브가 있습니다. 무언가가 연결되어 있는지 식별하고 알 수 있는 정적 주소가 있고 그것이 무엇인지(기본적으로 해당 USB 포트에 해당하는 /dev/sd* 파일) 사용자가 무엇인지 더 쉽게 이해할 수 있도록 할 수 있습니다. 계속해서 전체 배치가 처리될 때까지 기다린 다음 좋은 드라이브에서 불량 드라이브를 분류하는 대신 프로세스 초기에 불량 드라이브를 제거할 수 있도록 허용합니다(지금은 이것이 제가 하고 있는 작업입니다).

주변을 검색해 보았지만 내가 달성하려는 목표와 일치하는 것을 찾지 못했기 때문에 이 경우에는 도움을 요청하기로 결정했습니다.

이제 /dev/sd* 노드 이름으로 드라이브를 식별하지만 사용자는 그것이 무엇인지 모릅니다. 이를 허브의 USB 포트에 매핑할 수 있다면 USB 포트를 기반으로 정보를 표시할 수 있고 사용자는 포트 5에 잘못된 드라이브가 연결되어 있다는 것을 알 수 있으며 진행 중인 나머지 프로세스를 방해하지 않고 이를 제거할 수 있습니다. .

그런 다음 이 작업을 일괄적으로 중지하고 모든 포트가 루프에서 동시에 작동하도록 할 수 있습니다. 여기서 사용자는 언제든지 드라이브를 연결하고 분리할 수 있으며 HUB 포트 번호를 통해 작업을 추적할 수 있으며 작업 흐름 속도가 엄청나게 빨라집니다. .

따라서 기본적인 질문은 다음과 같습니다. USB 포트와 해당 포트에 연결된 USB 플래시 드라이브를 식별하는 방법은 무엇입니까?

답변1

당신은 udevadm그것을 사용하여 얻을 수 있습니다장치 경로특정 장치의. 이는 검사 시 심볼릭 링크를 통해 수행되므로 /sys/수동으로 수행할 수도 있습니다(그러나 사용하기가 더 쉽습니다 udevadm).

예를 들어, 내 시스템의 외부 USB 허브에 연결된 USB 스틱은 다음을 생성합니다.

$ udevadm info -q path -n /dev/sdh
/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.1/3-1.1.3/3-1.1.3.2/3-1.1.3.2:1.0/host7/target7:0:0/7:0:0:0/block/sdh

USB 트리와 비교해보면 알 수 있듯이,

$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
        |__ Port 1: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 2: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 480M
                |__ Port 4: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 480M
...

경로의 일부는 3-1.1.3.2포트 1(사우스브리지)을 통과하고 다시 포트 1(마더보드)을 거쳐 포트 3(여전히 마더보드에 있음)을 거쳐 외부 USB 허브의 포트 2를 통과하는 버스 3에 표시됩니다. . 이 허브의 포트 4는 SD 카드 리더에 사용됩니다.

따라서 USB 허브가 연결된 방식에 따라 비슷한 작업을 수행하고 관심 있는 마지막 포트를 추출해야 합니다.

답변2

이는 장치 이름을 모르거나 장치에 대한 정보를 알려주는 명령을 내릴 수 없는 허용되는 솔루션에 대한 대안입니다.

앞으로USB 플래시 드라이브를 삽입하고 다음을 실행합니다.

udevadm monitor

USB 플래시 드라이브가 삽입되면 커널 및 Udev 메시지가 자세히 전송되고 호스트가 USB 플래시 드라이브를 어떻게 보는지 마지막 줄에 알려줍니다.

18.04 udevadm 모니터링 명령 피드백

답변3

노드를 찾아내는 데 사용할 수 있는 노드에 대한 심볼릭 링크가 /dev/disk/by-path포함되어 있는 것 같습니다 ./dev/sd*

file /dev/disk/by-path/*명령을 실행하면 모든 /dev/sd*노드와 해당 물리적 ​​주소가 나열됩니다. 나는 이것을 쉽게 잡을 수 있어야합니다.

관련 정보