Estou tentando obter acesso ao tipo de partição (o campo de um byte no registro mestre de inicialização) no udev, para que eu possa definir a propriedade e as permissões com base no tipo de partição. O desafio é claro que, embora eu queira definir o proprietário, etc. de sda1
, a tabela de partição é, na verdade, parte de seu pai, sda
. (Claro, existem muitos discos, não apenas sda)
Consegui obter o tipo de partição de todas as partições primárias importadas para a entrada do banco de dados do udev em cada disco. Isso adiciona quatro entradas ENV a cada disco, uma por partição primária possível. Eles se parecem com isso, como mostrado por udevadmin info --query=all
:
E: LOCAL_PARTTYPE_P1=fd
E: LOCAL_PARTTYPE_P2=da
E: LOCAL_PARTTYPE_P3=00
E: LOCAL_PARTTYPE_P4=00
Eu posso então ter acesso àqueles no dispositivo de partição (sda1) usando um IMPORT{parent}
. O número da partição (1 a 4) pode ser encontrado em ATTR{partition}
. O problema é obter o tipo de partição this .
Parece que ENV{LOCAL_PARTTYPE}="$env{LOCAL_PARTTYPE_P$attr{partition}}"
deve fazer isso, mas não funciona. Se você retirar o $ inicial, o nome gerado está correto, o udev não fará a pesquisa indireta.
A única maneira que eu encontrei para fazer isso é esta linha estranha: IMPORT{program}="/bin/sh -c 'echo LOCAL_PARTTYPE=$$LOCAL_PARTTYPE_P$attr{partition}'"
que funciona porque as entradas ENV são passadas como variáveis de ambiente para os programas que o udev executa, e assim o shell pode fazer a expansão e ecoar de volta.
Eu também poderia duplicar tudo para cada número de partição possível (factível, já que estou usando apenas partições primárias), mas isso me parece ainda pior:
$ATTR{partition}=="1", $ENV{LOCAL_PARTTYPE_P1}=="da", OWNER="grid", ...
$ATTR{partition}=="2", $ENV{LOCAL_PARTTYPE_P2}=="da", OWNER="grid", ...
⋮
Existe uma boa maneira de fazer isso?
Tags udev