ディスクの n 番目のパーティションを識別するためのスクリプト可能な方法はありますか?

ディスクの n 番目のパーティションを識別するためのスクリプト可能な方法はありますか?

にディスクがあるとします。このディスクの 番目のパーティション/dev/DISK_NAMEを見つけるコマンドがあるかどうか知りたいです。n

この種のことは で可能になるはずです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

この目的にはlsblkJSON 出力とツールを使用できますが、私見ではそれほどハッキングっぽくないようです。jq

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

関連情報