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

问题描述 投票:0回答:3

如果我知道分区是例如 /dev/sda1,我如何获取包含该分区的磁盘名称(在本例中为 /dev/sda)?

输出应该只是磁盘路径。 (如“/dev/sda”)

编辑:它不应该是字符串操作

linux bash
3个回答
0
投票

您可以使用 shell 的内置字符串切割功能:

$ d=/dev/sda1
$ echo ${d%%[0-9]*}
/dev/sda
$ d=/dev/sda11212
$ echo ${d%%[0-9]*}
/dev/sda

这仅适用于某些磁盘名称。如果名称中可以有多个数字,它将截断第一个数字之后的所有数字。

将磁盘名称与分区名称分开的确切规范是什么?


0
投票

您可以使用

sed
获取磁盘。因为分区只是磁盘名称的增量,所以很容易执行:

echo "/dev/sda1" | sed 's/[0-9]*//g'

产生输出

/dev/sda

另一个可用于获取磁盘信息的命令是

lsblk
。只需键入不带参数的内容即可打印出与磁盘和分区相关的所有信息。


0
投票

我发现的唯一可靠的方法是在非特权用户运行时读取

partx
的输出。

例如:

partx --show /dev/sda1

将输出:

partx: cannot open /dev/sda: Permission denied

另一个例子:

partx --show /dev/nvme1n1p1

将输出:

partx: cannot open /dev/nvme1n1: Permission denied

以下是如何从此类输出中提取设备名称的示例:

partx --show /dev/nvme0n1p1 2>&1 | awk -F'[ :]' '{print $5}'

这将输出:

/dev/nvme0n1p1

您还可以使用其他工具,如

grep
sed
来提取部分。

© www.soinside.com 2019 - 2024. All rights reserved.