디스크의 n번째 파티션을 식별하는 스크립트 가능한 방법이 있습니까?

디스크의 n번째 파티션을 식별하는 스크립트 가능한 방법이 있습니까?

에 디스크가 있다고 가정해 보겠습니다 /dev/DISK_NAME. n이 디스크의 6번째 파티션을 찾는 명령어가 있는지 궁금합니다 .

이런 일이 가능해야 할 것 같습니다 lsblk. 내가 생각할 수 있는 최선은 다음과 같습니다.

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

여기서 n마지막 grep은 문제의 파티션 번호를 나타냅니다.

위 명령은 현재 내가 사용하고 있는 아치 리눅스 머신에 적용되며, DISK_NAME=sda그 출력은 lsblk -nlpo NAME,TYPE다음과 같습니다.

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

DISK_NAME=nvme0n1내 명령은 출력이 lsblk -nlpo NAME,TYPE다음 과 같은 아치 Linux 시스템에서도 작동합니다.

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

하지만 이것은 다소 구식으로 느껴지며 임의의 디스크에서 작동할지 확신할 수 없습니다.

이를 수행하는 더 좋은 방법이 있습니까?

답변1

이것이 사실이라는 보장은 없습니다 sda1. sda4와 sda5만 있는 SSD가 있습니다. 그렇다면 첫 번째 파티션은 시작 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. IMHO는 덜 해킹된 것처럼 보입니다.

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

관련 정보