是否有可编写脚本的方法来识别磁盘的第 n​​ 个分区?

是否有可编写脚本的方法来识别磁盘的第 n​​ 个分区?

假设我有一个位于 的磁盘/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

您可以使用lsblkJSON 输出和jq工具来达到目的,恕我直言,它看起来不那么老套:

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

相关内容