是否有可編寫腳本的方法來識別磁碟的第 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"

相關內容