にディスクがあるとします。このディスクの 番目のパーティション/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
この目的にはlsblk
JSON 出力とツールを使用できますが、私見ではそれほどハッキングっぽくないようです。jq
lsblk -J ${disk} | jq ".blockdevices[0].children[${partiton_number}].name"