Dmi*_*yev 17 partition shell-script block-device
我正在寻找一种可移植的方式来获取/dev/sda给定分区设备名称(例如/dev/sda1)的父块设备名称(例如)。我知道我可以删除最后一个字符,但在某些情况下不起作用:
/dev/mmcblk0,而它们的分区名称则类似于/dev/mmcblk0p1(注意额外的p)。LVM 卷是完全不同的鱼。我现在不需要支持他们,但如果考虑到他们需要一点额外的努力,我不会介意。
Sté*_*las 20
如果一个设备是另一个设备的分区,那么/sys/class/block/$dev将包含一个名为partition(其内容是分区号)的文件。
如果是这种情况,您可以使用以下命令获取父设备的名称:
basename "$(readlink -f "/sys/class/block/$dev/..")"
Run Code Online (Sandbox Code Playgroud)
或与zsh:
echo /sys/class/block/$dev(:A:h:t)
Run Code Online (Sandbox Code Playgroud)
例子:
$ dev=sda1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
sda
$ dev=nbd0p1
$ basename "$(readlink -f "/sys/class/block/$dev/..")"
nbd0
Run Code Online (Sandbox Code Playgroud)
LVM 卷完全不同,它们不是分区,除非它们是linear物理 PV 的一个连续映射的特殊情况。
如果您遇到这种情况,您可以使用以下命令获取该 PV 的名称:
ls "/sys/class/block/$dev/slaves"
Run Code Online (Sandbox Code Playgroud)
哪里$dev是一样的东西dm-2(你可以从获得"$(basename "$(readlink -f /dev/VG/LV)")")。
don*_*sti 19
如果您使用的是 linux,则可以使用lsblk(这是 的一部分util-linux):
lsblk -no pkname /dev/sda1
Run Code Online (Sandbox Code Playgroud)