Я пишу сценарий, который разбивает на разделы несколько дисков в системе Linux. Эти диски могут быть всевозможными блочными устройствами. Мне нужно найти способ надежно создавать имена разделов, которые будут созданы до того, как я их создам. Другими словами, мне нужно знать символ или строку, которая будет отделять имя устройства диска от номера раздела при создании разделов.
Есть ли в дереве /sys/block файл, который я могу найти в корневом узле устройств, содержащий эту информацию?
В настоящее время я проверяю, содержит ли имя корневого устройства nvme
или mmcblk
, и в этом случае я использую p
в качестве разделителя. В противном случае я использую пустую строку.
Но это кажется хрупким и, вероятно, неполным.
Чтобы напрямую ответить на ваш вопрос, код назначения имени устройства для раздела находится в ядре Linux, в add_partition
в block/partitions/core.c
: https://github.com/torvalds/linux/blob/88fac17500f4ea49c7bac136cf1b27e7b9980075/block/partitions/core .c#L330
if (isdigit(dname[strlen(dname) - 1]))
dev_set_name(pdev, "%sp%d", dname, partno);
else
dev_set_name(pdev, "%s%d", dname, partno);
Это довольно просто. Если базовое устройство заканчивается цифрой, между ним и индексом раздела стоит буква «p». В противном случае нет буквы «п».
В качестве альтернативы этому подходу рассмотрите возможность написания правила udev, которое создавало бы запись в /dev/disk/by-uuid
или by-id
. Это даст вам что-то, что вы сможете явно найти, как только появится новая запись об устройстве раздела.
Идеальный. Правило udev не работает в данной ситуации, но логика очень проста (и, ну, логична). Так что я могу легко повторить это там, где мне это нужно. Большое спасибо!