Suponha que eu tenha um disco localizado em /dev/DISK_NAME
. Estou curioso para saber se existe um comando para encontrar a n
partiçã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, n
o ú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=sda
e 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=nvme0n1
e 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 sda1
exista - 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 -l
comando 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 lsblk
a saída JSON e jq
a ferramenta para esse fim, parece menos hacky IMHO:
lsblk -J ${disk} | jq ".blockdevices[0].children[${partiton_number}].name"