디스크의 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의 는 문제의 파티션 번호를 나타냅니다.

위의 명령은 현재 사용 중인 아치 Linux 시스템에서 작동하며, DISK_NAME=sda그 출력은 다음과 lsblk -nlpo NAME,TYPE같습니다.

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

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

/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

목적에 맞게 lsblkJSON 출력 및 도구를 사용할 수 있습니다 . IMHO는 덜 해킹적으로 보입니다.jq

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

관련 정보