Я шукаю портативний спосіб отримати назву пристрою батьківського блоку (наприклад /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
...)