Gibt es eine skriptbasierte Möglichkeit, die n-te Partition einer Festplatte zu identifizieren?

Gibt es eine skriptbasierte Möglichkeit, die n-te Partition einer Festplatte zu identifizieren?

Angenommen, ich habe eine Festplatte unter /dev/DISK_NAME. Ich bin neugierig, ob es einen Befehl gibt, um die n-te Partition dieser Festplatte zu finden.

Es scheint, dass so etwas mit möglich sein sollte lsblk. Das Beste, was mir einfällt, ist:

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

Dabei nstellt das im letzten grep die betreffende Partitionsnummer dar.

Der obige Befehl funktioniert für die Arch-Linux-Maschine, auf der ich gerade bin, wobei DISK_NAME=sdadie Ausgabe lsblk -nlpo NAME,TYPElautet

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

Mein Befehl funktioniert auch auf meiner Arch-Linux-Maschine, wo DISK_NAME=nvme0n1und die Ausgabe lsblk -nlpo NAME,TYPEist

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

Das fühlt sich allerdings ziemlich wie ein Hack an und ich bin nicht sicher, ob es auf einer beliebigen Festplatte funktionieren würde.

Gibt es bessere Möglichkeiten, dies zu tun?

Antwort1

Es gibt überhaupt keine Garantie dafür sda1– ich habe eine SSD mit nur sda4 und sda5. Wäre also die erste Partition die mit dem niedrigsten Start-LBA?

Oder vielleicht der erste Eintrag in der Partitionstabelle? parted -lLaut

...
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

Welches ist die erste Partition - ist es2(welches den niedrigsten LBA hat) oder ist es1(das die niedrigste Partitionsnummer hat).

Wenn Sie den alten fdisk -lBefehl bevorzugen, wird hiermit die Partitionstabelle für Sie sortiert [so dass die Partitionen mit der niedrigsten Nummer zuerst kommen].

Antwort2

Sie können zu diesem Zweck lsblkJSON-Ausgabe und -Tool verwenden , das sieht meiner Meinung nach weniger hackig aus:jq

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

verwandte Informationen