Я ищу портативный способ получить имя устройства родительского блока (например /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
...)