我正在寻找一种可移植的方式来获取/dev/sda
给定分区设备名称(例如/dev/sda1
)的父块设备名称(例如)。我知道我可以删除最后一个字符,但在某些情况下不起作用:
- MMC读卡器的名称通常为
/dev/mmcblk0
,而其分区的名称则为/dev/mmcblk0p1
(请注意p
)。 - 可选:某些块设备根本没有任何分区表,并且被格式化为单个分区。在这种情况下,分区设备和父块设备相同。
LVM的体积完全不同。我现在不需要支持他们,但是如果考虑到他们需要很少的额外努力,我也不会介意。
@don_crissti,
—
斯特凡Chazelas
/dev/sda1
并且始终/dev/mmcblk0p1
是特定于Linux的。lsblk
虽然是相对较新的。
lsblk
还使用设备节点号来查找正确的节点号,而不仅仅是使用名称。似乎最简单的Linux和util-linux解决方案始终可以使用。
@don_crissti
—
德米特里·格里戈里耶夫
lsblk -dpno pkname $devname
通过了我所有的测试!也许您应该添加答案。
@thrig是的,
—
德米特里·格里戈里耶夫
/dev/sd0c
在这种情况下,我绝对希望脚本返回。以下答案对您有用吗?
/dev/sd0a
但没有/dev/sd0
设备(有一个/dev/sd0c
...)