Existe uma maneira programável de identificar a enésima partição de um disco?

Existe uma maneira programável de identificar a enésima partição de um disco?

Suponha que eu tenha um disco localizado em /dev/DISK_NAME. Estou curioso para saber se existe um comando para encontrar a npartição deste disco.

Parece que esse tipo de coisa deveria ser possível com lsblk. O melhor que posso fazer é:

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

Aqui, no último grep representa o número da partição em questão.

O comando acima funciona para a máquina Arch Linux em que estou atualmente, onde DISK_NAME=sdae a saída de lsblk -nlpo NAME,TYPEé

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

Meu comando também funciona na minha máquina Arch Linux, onde DISK_NAME=nvme0n1e a saída de lsblk -nlpo NAME,TYPEé

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

Ainda assim, isso parece um tanto hackeado e não tenho certeza se funcionaria em um disco arbitrário.

Existem maneiras melhores de fazer isso?

Responder1

Não há nenhuma garantia de que sda1exista - tenho um SSD com apenas sda4 e sda5. Então a primeira partição seria aquela com o LBA inicial mais baixo?

Ou talvez a primeira entrada na tabela de partições? De acordo com 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

Qual é a primeira partição - é2(que tem o menor LBA) ou é1(que tem o número de partição mais baixo).

Se você preferir o fdisk -lcomando antigo, isso classificará a tabela de partições para você [para que as partições com números mais baixos venham primeiro].

Responder2

Você pode usar lsblka saída JSON e jqa ferramenta para esse fim, parece menos hacky IMHO:

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

informação relacionada