如何在 shell 脚本中确定从哪个块设备启动?

如何在 shell 脚本中确定从哪个块设备启动?

我正在编写一个 shell 脚本(由 cron 调用),该脚本每周在启动的磁盘上运行 smartctl。有没有一种相当通用的方法来确定启动块设备是什么(例如 - /dev/sda、/dev/hdb 等)?预期的安装将是标准的,我想我可以使用 /etc/fstab 上的 grep " / ",我只是想知道是否有更优雅的方法。

该脚本将专门部署在 Fedora 和可能的 Ubuntu 机器上。

答案1

df -P / | tail -n 1 | awk '/.*/ { print $1 }'

将返回根 FS 块设备。但不一定是启动设备。

更好的问题可能是为什么您没有扫描服务器中所有磁盘上的 SMART?

答案2

对于/boot:

读取链接-f / dev / block / $(挂载点-d / boot)

对于 rootfs:

读链接-f /dev/block/$(挂载点-d /)

解释:1)mountpoint -d - 给出安装的设备的主要:次要编号

2)/dev/block 文件夹 - 包含所有块设备的符号链接,这些块设备按设备号指向 /dev 中的常规设备文件

3)readlink -f - 从符号链接重建设备名称

适用于所有现代 Linux

答案3

cat /proc/mounts |grep /boot |awk '{print $1}'

如果您的 /boot 不在根设备上,则会返回类似 /dev/sda1 的内容。
将此与 Chris S 的回答结合起来。

答案4

您可能早已不再进行这项任务,但我正尝试做类似的事情,并认为我会研究您拼图中缺失的部分,即获取驱动器名称(例如/dev/sda)而不是分区名称(例如/dev/sda1)。

我开始Chris S 的精彩回答(这也解决了我想要完成的任务),然后只需使用老式的 bash 字符串操作来修剪末尾的数字(剩下驱动器与分区):

# first, save the output (e.g. /dev/sda1) to a variable
rootpart=$(df -P / | tail -n 1 | awk '/.*/ { print $1 }')

# now you can trim the number off:
echo ${rootpart//[[:digit:]]/}

# if ${rootpart} was "/dev/sda1", output would be "/dev/sda"

相关内容