Предположим, у меня есть диск, расположенный по адресу /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"