상위 장치에 쿼리할 때 하위 장치에 대한 완전한 udev 정보를 확인하세요.

상위 장치에 쿼리할 때 하위 장치에 대한 완전한 udev 정보를 확인하세요.

USB 드라이브가 연결되었을 때 포함된 모든 파일 시스템에 대해 USB 드라이브를 검색한 다음 감지된 파일 시스템 유형에 따라 작업을 수행하는 사용자 지정 기능을 구현하려고 합니다. 장치 노드에 대해 udev인스턴스화된 "원샷" 서비스를 트리거하기 위해 규칙을 "권장"으로 작성했습니다. systemd그러면 "모든 매직(TM)을 수행합니다" 셸 스크립트가 실행됩니다(플랫폼 독립상의 이유로 컴파일 프로그램의 옵션은 고려되지 않습니다). 여기).

ACTION=="add", SUBSYSTEMS=="usb", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", RUN{program}="/bin/systemctl start usb-drive-manager@$devnode.service"

그리고

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/usb_drive_manager.sh attach %I
ExecStop=/usr/local/bin/usb_drive_manager.sh detach %I

셸 스크립트에서는 ls /sys/.../sdX/sdX*드라이브의 장치 경로에서 작업을 수행하여 파티션을 찾은 다음 호출을 통해 해당 파티션에 대한 정보를 쿼리합니다.

udevadm info /dev/sdXn

( n파티션 번호는 어디에 있습니까?) 처리된 각 파티션에 대해.

질문이제 이는 쉘 스크립트의 "콜드 플러그" 테스트 중에 작동하지만 스크립트 가 규칙에서 트리거될 때는 작동하지 않습니다 udev.udev운전하다처리된 후 정보는 다음과 같습니다.분할드라이브의 정보는 아직 커널에 의해 수집되지 않았습니다. 즉, 호출은 udevadm info기본 정보만 반환합니다.

P: /devices/.../block/sdb/sdb1
N: sdb1
E: DEVNAME=/dev/sdb1
E: DEVPATH=/devices/.../block/sdb/sdb1
E: DEVTYPE=partition
E: MAJOR=8
E: MINOR=17
E: SUBSYSTEM=block

그리고 모든 관련 정보, 특히 환경 변수 ID_FS_TYPEID_FS_LABEL(여전히) 손실됩니다. 이벤트를 udevadm settle처리하는 동안 호출하는 것은 나쁜 생각이고(도움이 되지 않음) 호출 사이에 잠자고 있는 0.5초 폴링 루프도 작동하지 않기 때문에 (정보가 최종적으로 사용 가능해질 때까지 약 1분 정도 소요) 여기서 약간의 조치가 손실되었습니다.udevudevadm info

안타깝게도 udev다음에 적용되도록 규칙을 다시 작성합니다.분할바꾸다운전사또한 어떤 경우에는 전체 장치에 걸쳐 파일 시스템을 포함하는 단일 파티션을 생성하는 대신 전체 USB 장치에 파일 시스템을 생성하기 때문에 이는 바람직하지 않습니다.

질문지금은

  • udev특정 장치에 대한 규칙 처리는 모든 장치가 완료될 때까지 지연될 수 있습니다 .어린이들장치의 일부가 처리되었거나
  • 쉘 스크립트에서 시스템 호출을 사용하여 모든 것을 "대기"할 수 있습니다.어린이데이터 쿼리를 계속하기 udev전에 완료할 이벤트 (있는 경우!)

질문이 다소 긴 것 같습니다. 도움을 주시면 대단히 감사하겠습니다.

답변1

blkid더 많은 연구 끝에 in의 사용법을 발견했습니다.우데브규칙(참조예를 들어이것ArchLinux-Wiki 기사, 아쉽게도 독일어로만 제공됨) 전화를 해서 알게 되었습니다.

blkid -o udev -p /dev/sdXn

바꾸다

udeavdm info /dev/sdXn

-triggered 스크립트 내에서는 systemd"추가" 규칙에 대해 처리 중인 USB 메모리 스틱 하위 장치에 대한 전체 정보를 검색하는 것도 가능합니다.

-p캐시된 정보(예 :매뉴얼 페이지또는소스 코드blkid).

이 옵션은 출력의 선행 식별자 태그(예 : 등)가 여기에 없기 때문에 100% 직접 교체는 아니지만 -o udev호출과 유사한 방식으로 출력 형식을 지정합니다 .udevadmudevadmE:P:

관련 정보