Bash:找到某个分区所在的磁盘并将结果放入变量中

Posted

技术标签:

【中文标题】Bash:找到某个分区所在的磁盘并将结果放入变量中【英文标题】:Bash: Find the disk a certain partition is on and put result into a variable 【发布时间】:2021-01-17 03:26:25 【问题描述】:

有哪些(可靠的)测试可以找到某个分区所在的磁盘并将结果放入变量中?

例如lsblk的输出:

...
sda           8:0    0   9.1T  0 disk
└─sda1        8:1    0   9.1T  0 part /foopath
...
mmcblk0     179:0    0  29.7G  0 disk
├─mmcblk0p1 179:1    0   256M  0 part /barpath
└─mmcblk0p2 179:2    0  29.5G  0 part /foobarpath

如果partition="/dev/mmcblk0p2",我如何将mmcblk0 作为它所在的磁盘放入变量中?或者类似地,如果partition="/dev/sda1",如何将sda作为它所在的磁盘放入变量中?

disk=$partition::-1 似乎是一个 hack,直到我遇到了诸如mmcblk0p1 这样的分区,因此请求更可靠的测试......

隔离磁盘并使用变量的目的是将其传递给smartctl -n standby /dev/sda以查找磁盘当前是否正在旋转等

运行环境为 Linux Mint 19.3 和 Ubuntu 20。

有什么想法吗?

【问题讨论】:

那么提取最后一个/和第一个数字之间的部分字符串? 我相信 OP 希望根据磁盘名称提取字符串,例如:mmcblk0sda... 是的,我不确定模式匹配是否可行,因为磁盘名称似乎可以改变结构?不过我不确定。找到驱动器的“根”名称是我所追求的(如上面的lsblk 输出)。希望这有助于清除它! is to pass it to smartctl 只是通过/dev/sda1,它会自己挑选光盘。 @edit 好的,所以似乎取决于光盘,据我所知适用于我的分区。 这里是答案:unix.stackexchange.com/questions/226420/… 【参考方案1】:

感谢@KamilCuk 和@don_crissti ;)

使用lsblk“仅打印父设备”

#!/bin/bash
partition="/dev/sda1"
disk="$(lsblk -no pkname "$partition")"

【讨论】:

以上是关于Bash:找到某个分区所在的磁盘并将结果放入变量中的主要内容,如果未能解决你的问题,请参考以下文章

用结果填充数组时,bash,奇怪的变量范围

按子字符串拆分字符串并将其放入数组bash

Linux 磁盘分区详解

bash 脚本在变量中使用剪切命令并将结果存储在另一个变量中

如何在bash脚本中运行curl并将结果保存在变量中[重复]

数据库数据恢复SQL Server数据库所在磁盘分区空间不足报错的数据恢复案例