假設我有一個磁碟位於/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"