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
답변3
노드를 찾아내는 데 사용할 수 있는 노드에 대한 심볼릭 링크가 /dev/disk/by-path
포함되어 있는 것 같습니다 ./dev/sd*
file /dev/disk/by-path/*
명령을 실행하면 모든 /dev/sd*
노드와 해당 물리적 주소가 나열됩니다. 나는 이것을 쉽게 잡을 수 있어야합니다.