파티션 유형에 따라 소유권과 권한을 설정할 수 있도록 udev(마스터 부트 레코드의 1바이트 필드)에서 파티션 유형에 액세스하려고 합니다. 물론 문제는 소유자 등을 설정하려는 동안 sda1
파티션 테이블이 실제로 상위 테이블의 일부라는 것입니다 sda
. (물론 실제로는 sda뿐만 아니라 많은 디스크가 존재합니다)
각 디스크의 udev 데이터베이스 항목으로 가져온 모든 기본 파티션의 파티션 유형을 가져왔습니다. 그러면 각 디스크에 가능한 각 기본 파티션에 하나씩 4개의 ENV 항목이 추가됩니다. 아래와 같이 보입니다 udevadmin info --query=all
.
E: LOCAL_PARTTYPE_P1=fd
E: LOCAL_PARTTYPE_P2=da
E: LOCAL_PARTTYPE_P3=00
E: LOCAL_PARTTYPE_P4=00
IMPORT{parent}
그런 다음 아래에서 찾을 수 있는 .partition number(1–4)를 사용할 수 있습니다 ATTR{partition}
. 문제는 유형을 얻는 것입니다.이것분할.
이렇게 해야 할 것 같지만 ENV{LOCAL_PARTTYPE}="$env{LOCAL_PARTTYPE_P$attr{partition}}"
작동하지 않습니다. 선행 $를 제거하면 생성된 이름이 정확하고 udev는 간접 조회를 수행하지 않습니다.
내가 찾은 유일한 방법은 다음과 같은 어색한 줄입니다. 이것이 IMPORT{program}="/bin/sh -c 'echo LOCAL_PARTTYPE=$$LOCAL_PARTTYPE_P$attr{partition}'"
작동하는 이유는 ENV 항목이 udev가 실행하는 프로그램에 환경 변수로 전달되어 쉘이 즉시 확장하고 에코할 수 있기 때문입니다.
가능한 모든 파티션 번호에 대해 모든 것을 복사할 수도 있지만(주 파티션만 사용하기 때문에 가능) 기분이 더 나빠집니다.
$ATTR{partition}=="1", $ENV{LOCAL_PARTTYPE_P1}=="da", OWNER="grid", ...
$ATTR{partition}=="2", $ENV{LOCAL_PARTTYPE_P2}=="da", OWNER="grid", ...
⋮
이를 수행할 수 있는 좋은 방법이 있습니까?