Существует ли скриптовый способ определения n-го раздела диска?

Существует ли скриптовый способ определения n-го раздела диска?

Предположим, у меня есть диск, расположенный по адресу /dev/DISK_NAME. Мне интересно, есть ли команда для поиска nраздела th этого диска.

Кажется, что такого рода вещи должны быть возможны с lsblk. Лучшее, что я могу придумать, это:

lsblk -nlpo NAME,TYPE /dev/DISK_NAME | awk '/part$/ {print $1}' | grep "[^0-9]n$"

Здесь nв последнем grep-выражении обозначает номер раздела, о котором идет речь.

Приведенная выше команда работает на машине Arch Linux, на которой я сейчас работаю, DISK_NAME=sdaи вывод ее lsblk -nlpo NAME,TYPEследующий:

/dev/sda  disk
/dev/sda1 part
/dev/sda2 part
/dev/sda3 part
/dev/sda5 part

Моя команда также работает на моей машине Arch Linux, где DISK_NAME=nvme0n1вывод lsblk -nlpo NAME,TYPEбудет следующим:

/dev/nvme0n1   disk
/dev/nvme0n1p1 part
/dev/nvme0n1p2 part

Тем не менее, это кажется довольно неуклюжим решением, и я не уверен, будет ли оно работать на произвольном диске.

Есть ли лучшие способы сделать это?

решение1

Нет никакой гарантии, что это sda1вообще существует - у меня SSD только с sda4 и sda5. Так будет ли первый раздел тем, у которого самый низкий начальный LBA?

Или, может быть, первая запись в таблице разделов? Согласно parted -l,

...
Number  Start  End    Size    File system  Name                   Flags
 2      316MB  333GB  333GB   ext4         /mnt/backup
 3      333GB  791GB  457GB   ext4         /mnt/filestore
 4      791GB  832GB  41.9GB  ext4         /run/timeshift/backup
 1      832GB  841GB  8590MB  ext4         /mnt/music

Какой первый раздел - это2(у которого самый низкий LBA) или это1(имеющий наименьший номер раздела).

Если вы предпочитаете старую fdisk -lкоманду, то она отсортирует таблицу разделов за вас [так, что разделы с наименьшими номерами будут на первом месте].

решение2

Для этой цели можно использовать lsblkвывод JSON и соответствующий инструмент, на мой взгляд, это выглядит менее хакерски:jq

lsblk -J ${disk} | jq ".blockdevices[0].children[${partiton_number}].name"

Связанный контент