如何确定 Linux 系统的实际启动设备?

如何确定 Linux 系统的实际启动设备?

我需要在 shell 脚本中确定系统从哪个设备(物理设备,而不是分区)启动。

我正在使用该脚本来创建磁盘映像,并希望防止有人意外擦除系统启动的磁盘。
每个物理磁盘可能包含 /boot 和 /EFI 分区,因此我不能只检查磁盘是否包含此类分区。

我需要知道在启动过程中实际使用了哪个磁盘。

答案1

只是没有办法可靠地确定启动磁盘。

原因很简单,内核无法获取此信息。
内核以一种即发即忘的方式从 RAM 中开始执行,无论何种方式(通常是一些匿名引导加载程序)都将内核加载到 RAM 中。

所以你只能猜测。因为内核知道 / 在哪里,(参见根=/proc/cmdline)取决于您的引导加载程序配置文件上的环境,您可以押注 / 位于系统启动设备上的概率...或不。


请注意,在 x86 架构上,您可以尝试使用以下命令从 BIOS 获取该信息int 13H 中断调用。这当然是一条艰难的(而且仍然不可靠)的路。

作为墨菲在一些评论中建议,如果您绝对确定您正在运行的系统只能依赖 UEFI 启动,那么您可以找到此信息正在运行启动管理器

您也可以尝试其他几种方法,尝试摆弄 MBR……,但所有方法仍然会带来不确定性(根据您的环境,不确定性可能会再次减少)。
试想一下,如果您从网络启动,您的内核由 kexec 启动,您的磁盘被组织在某些 RAID 阵列中,那么这些信息意味着什么……?


顺便说一句,如果您唯一的兴趣是防止用户意外删除启动分区......那么......简单地制作所有这些分区怎么样?只读? (因为您只需要在安装新内核时这些分区可写)

相关内容