¿Existe una forma programable de identificar la enésima partición de un disco?

¿Existe una forma programable de identificar la enésima partición de un disco?

Supongamos que tengo un disco ubicado en /dev/DISK_NAME. Tengo curiosidad por saber si existe un comando para encontrar la nenésima partición de este disco.

Parece que este tipo de cosas debería ser posible con lsblk. Lo mejor que se me ocurre es:

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

Aquí, nel último grep representa el número de partición en cuestión.

El comando anterior funciona para la máquina Arch Linux en la que estoy actualmente, donde DISK_NAME=sday la salida lsblk -nlpo NAME,TYPEes

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

Mi comando también funciona en mi máquina Arch Linux donde DISK_NAME=nvme0n1y la salida lsblk -nlpo NAME,TYPEes

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

Aún así, esto parece bastante complicado y no estoy seguro de si funcionaría en un disco arbitrario.

¿Hay mejores maneras de hacer esto?

Respuesta1

No existe sda1ninguna garantía: tengo un SSD solo con sda4 y sda5. Entonces, ¿la primera partición sería la que tuviera el LBA inicial más bajo?

¿O quizás la primera entrada en la tabla de particiones? De acuerdo a 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

¿Cuál es la primera partición?2(que tiene el LBA más bajo) o es1(que tiene el número de partición más bajo).

Si prefiere el fdisk -lcomando antiguo, esto ordenará la tabla de particiones [para que las particiones con el número más bajo aparezcan primero].

Respuesta2

Puede usar lsblkla salida JSON y jqla herramienta para este propósito, en mi humilde opinión parece menos complicado:

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

información relacionada