假设我有一个位于 的磁盘/dev/DISK_NAME
。我很好奇是否有命令可以找到n
该磁盘的第 th 分区。
看来这种事情应该是可以实现的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
存在 - 我有一个只有 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
工具来达到目的,恕我直言,它看起来不那么老套:
lsblk -J ${disk} | jq ".blockdevices[0].children[${partiton_number}].name"