lsusb의 출력을 사용하여 블록 장치 정보를 내보내는 방법

lsusb의 출력을 사용하여 블록 장치 정보를 내보내는 방법

사용자가 USB 디스크를 백업 대상으로 선택할 수 있는 스크립트를 작성 중입니다. 아이디어는 전체 장치에 걸쳐 있는 파티션을 만드는 것입니다. lsusb공급업체 ID와 이름이 주어지면 이를 사용자에게 제시하려고 합니다.

분명히 다른 장치가 아닌 디스크만 나열하고 싶습니다. 또한 /dev사용자가 선택한 디스크의 장치 이름을 알아야 해당 디스크에 파티션을 만들 수 있습니다. 나는 거기에 있는 다양한 심볼릭 링크를 살펴보고 /dev/disk/상호 /sys/참조를 찾으려고 노력했습니다. 나는 이점을 활용 lsblk하고 df목표를 달성 하지 못했습니다 . 나는 알고 싶다:

  • lsusb어떤 USB 장치가 디스크인지 확인하기 위해 제공된 정보를 어떻게 사용할 수 있습니까 ?
  • lsusb제공된 정보를 사용하여 /dev특정 장치의 장치 이름을 얻으려면 어떻게 해야 합니까 ?

답변1

귀하의 질문에 대한 대답은 스크립트를 트리거하는 데 어떤 메커니즘이 사용되는지에 따라 다소 달라집니다.

어떤 종류의 백업 프로그램에서 스크립트를 호출한다고 가정하면 USB 장치가 연결될 때 프로그램이 즉시 호출되지 않습니다.우데브규칙(예: 규칙)을 사용하여 udevadm info필요한 모든 정보를 수집할 수 있습니다.

아이디어는 다음과 같습니다.

  • 연결된 USB 드라이브에는 자동으로 장치 노드가 할당됩니다./dev/sdX커널별
  • 모든 장치 노드를 반복하는 경우/dev/sd[az](또는 실제로 존재하는 것이 무엇이든/개발/) 각 드라이브를 호출하면 udevadm info --query=all /dev/sdX출력에 다음과 같은 줄이 있으므로 그 중 어느 드라이브가 USB 드라이브인지 알 수 있습니다.
E: ID_BUS=usb
  • 마찬가지로, 다음과 같은 공급업체와 모델이 포함된 출력 라인을 찾을 수 있습니다.
E: ID_MODEL=Flash_Disk
< ... >
E: ID_VENDOR=Generic

udevadm따라서 using 또는 유사한 결과를 구문 분석하면 grep목적에 필요한 모든 정보를 수집할 수 있습니다.

관련 정보