如何获取包含特定分区的磁盘名称

Sno*_*p05 9 linux partition block-device disk

例如,如果我知道一个分区是/dev/sda1如何获得/dev/sda包含该分区的磁盘名称(在这种情况下)?

  • 输出应该只是磁盘路径(如/dev/sda)。
  • 它不应该需要字符串操作,因为我需要它为不同的磁盘类型工作。

meu*_*euh 14

您可以在/sys块设备中观察给定分区名称。例如,/dev/sda1:

$ ls -l /sys/class/block/sda1
lrwxrwxrwx 1 root root /sys/class/block/sda1 -> \
 ../../devices/pci0000:00/.../ata1/host0/target0:0:0/0:0:0:0/block/sda/sda1
Run Code Online (Sandbox Code Playgroud)

获取 arg/dev/sda1并打印的脚本/dev/sda是:

part=$1
part=${part#/dev/}
disk=$(readlink /sys/class/block/$part)
disk=${disk%/*}
disk=/dev/${disk##*/}
echo $disk
Run Code Online (Sandbox Code Playgroud)

我没有 lvm 等可以尝试,但可能有一些类似的路径。


还有lsblk

$ lsblk -as /dev/sde1
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sde1    8:65   1  7.4G  0 part 
`-sde   8:64   1  7.4G  0 disk 
Run Code Online (Sandbox Code Playgroud)

正如@don_crissti 所说,您可以通过以下方式直接获取父项:

lsblk -no pkname /dev/sda1
Run Code Online (Sandbox Code Playgroud)

  • 不需要脚本来执行此操作,只需打印父设备运行:`lsblk -no pkname /dev/sda1` (6认同)