Я ищу портативный способ получить имя устройства родительского блока (например /dev/sda), учитывая имя устройства раздела (например /dev/sda1). Я знаю, что могу просто выбросить последний символ, но в некоторых случаях это не сработает:
- Кард-ридеры MMC обычно имеют имена вроде
/dev/mmcblk0, в то время как их разделы имеют имена как/dev/mmcblk0p1(обратите внимание на дополнительныеp). - необязательно: некоторые блочные устройства вообще не имеют таблицы разделов и отформатированы как один раздел. В этом случае устройство разделения и родительское блочное устройство совпадают.
Объемы LVM - это совершенно другой котелок с рыбой. Мне не нужно сейчас их поддерживать, но если их учет требует небольших дополнительных усилий, я бы не возражал.
/dev/sda1и /dev/mmcblk0p1, в любом случае , зависят от Linux. lsblkхотя относительно недавно.
lsblkтакже использует номера узлов устройства, чтобы найти правильный, вместо того, чтобы просто использовать имя. кажется, самое простое решение для Linux и util-linux, вероятно, всегда будет доступно в любом случае.
lsblk -dpno pkname $devnameпрошел все мои тесты! Возможно, вам следует добавить ответ.
/dev/sd0cв этом случае. Подходят ли ответы ниже для вас?
/dev/sd0aно нет/dev/sd0устройства (есть/dev/sd0c...)