我正在尝试访问 udev 中的分区类型(主引导记录中的一字节字段),以便我可以根据分区类型设置所有权和权限。当然,挑战在于,虽然我想设置 的所有者等,但sda1
分区表实际上是其父级 的一部分sda
。 (当然,实际上有很多磁盘,不仅仅是sda)
我已经设法获取导入到每个磁盘的 udev 数据库条目中的所有主分区的分区类型。这会向每个磁盘添加四个 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}
.分区号 (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 运行的程序,因此 shell 可以进行扩展并立即回显它。
我还可以为每个可能的分区号复制所有内容(可行,因为我只使用主分区),但这让我觉得更糟:
$ATTR{partition}=="1", $ENV{LOCAL_PARTTYPE_P1}=="da", OWNER="grid", ...
$ATTR{partition}=="2", $ENV{LOCAL_PARTTYPE_P2}=="da", OWNER="grid", ...
⋮
有没有好的方法可以做到这一点?