news 2026/4/16 12:28:27

linux系统新增启动项,支持从数据盘启动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux系统新增启动项,支持从数据盘启动

linux系统(PE系统)挂载数据盘并支持从数据盘启动的情况大多使用在云上机器排查问题等场景。

本文简绍如何在PE系统中新增启动项,并指向数据盘。

主要采用grub2中链式启动能力

什么是链式启动?

主要用于实现跨操作系统的链式加载引导。其核心功能是将控制权转移至其他操作系统的启动程序,通过加载目标分区的引导扇区或EFI文件完成多系统启动环境的构建

https://www.gnu.org/software/grub/manual/grub/grub.html#Chain_002dloading

选择从数据盘启动系统时,既要支持 bios 和 uefi

数据盘系统为bios 启动的时候,PE系统走bios 启动模式,实现方式: set root=(hd1) + chainloader +1

数据盘系统 为uefi 启动的时候,PE系统走uefi启动模式。 实现方式:首选要选择uefi shim path,记得要跳过PE 系统盘本身的 shim path, 选择该设备为root,并从该 shim path 启动。

x86 支持的从数据盘已有系统启动的 grub 配置
cat /etc/grub.d/40_custom #!/usr/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. # # 设置了一个uefi启动项的列表,覆盖主流Linux版本的shimx64.efi路径 set os_shim_list="/EFI/ubuntu/shimx64.efi /EFI/centos/shimx64.efi /EFI/debian/shimx64.efi /EFI/redhat/shimx64.efi /EFI/almalinux/shimx64.efi /EFI/rocky/shimx64.efi /EFI/fedora/shimx64.efi /EFI/opensuse/shim.efi /EFI/sles/shim.efi /EFI/BOOT/fbaa64.efi" # 新增一个启动项"Booting From Existing OS" menuentry "Booting From Existing OS" { # 判断启动方式是 BIOS if test "${grub_platform}" = "pc"; then insmod chain # 设置从数据盘启动 hd1 set root=(hd1) chainloader +1 boot else insmod chain insmod fat set root="" #启动方式是uefi,遍历 uefi启动项 for shimpath in $os_shim_list;do # 在数据盘 hd1 上search uefi启动项 search --no-floppy --set=root --file ${shimpath} --hint hd1, # 没有找的 uefi启动项 ,continue if [ -z "$root" ];then echo "root not found, continue" continue else # 找的uefi启动项后 echo "finally find root: $root" # 判断这个uefi启动项是不是 pe系统的 hd0(一般不会) regexp --set 0:matched_harddisk "hd0" "$root" # 如果是pe系统的uefi启动项,continue if [ "$matched_harddisk" = "hd0" ];then echo "root is pe root, skip" #remember reset matched_harddisk set root="" set matched_harddisk="" continue else # 不是pe系统的uefi启动项,就是数据盘系统的,从这个启动项启动 if [ -n "$root" ];then chainloader ${shimpath} boot fi fi fi done fi }
arm 支持的从数据盘已有系统启动的 grub 配置
cat /etc/grub.d/40_custom #!/usr/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. # # 设置了一个uefi启动项的列表,覆盖主流Linux版本的shimaa64.efi路径 set os_shim_list="/EFI/ubuntu/shimaa64.efi /EFI/centos/shimaa64.efi /EFI/debian/shimaa64.efi /EFI/redhat/shimaa64.efi /EFI/almalinux/shimaa64.efi /EFI/rocky/shimaa64.efi /EFI/fedora/shimaa64.efi /EFI/opensuse/shimaa64.efi /EFI/sles/shim.efi /EFI/BOOT/fbaa64.efi" # 新增一个启动项"Booting From Existing OS" menuentry "Booting From Existing OS" { insmod chain insmod fat set root="" #遍历 uefi启动项 for shimpath in $os_shim_list;do # 在数据盘 hd1 上search uefi启动项 search --no-floppy --set=root --file ${shimpath} --hint hd1, # 没有找的 uefi启动项 ,continue if [ -z "$root" ];then echo "root not found, continue" continue else # 找到uefi启动项后 echo "finally find root: $root" # 判断这个uefi启动项是不是 pe系统的 hd0(一般不会) regexp --set 0:matched_harddisk "hd0" "$root" # 如果是pe系统的uefi启动项,continue if [ "$matched_harddisk" = "hd0" ];then echo "root is pe root, skip" #remember reset matched_harddisk set root="" set matched_harddisk="" continue else # 不是pe系统的uefi启动项,就是数据盘系统的,从这个启动项启动 if [ -n "$root" ];then chainloader ${shimpath} boot fi fi fi done }

注:

#测试过程发现arm缺失grub mod,故安装 yum -y install grub2-efi-aa64-modules.noarch cp -r /usr/lib/grub/arm64-efi/ /boot/grub2/
设置grub等待时间并重新生成grub配置文件

/etc/default/grub 文件中 GRUB_TIMEOUT 配置为10秒,启动时给用户选择时间

配置完成需重新生成grub配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

例如

您采用一个 centos 7 系统的数据盘挂载在了PE系统上,修复了问题后,想进入centos 7系统,即 在PE系统下 reboot后在启动项中选择“Booting From Existing OS”即可从数据盘启动(即centos 7)

相关参考:

https://docs.opencloudos.org/OCS/Install_Guide/ocs-UEFI/#1-uefi

https://www.gnu.org/software/grub/manual/grub/grub.html#Chain_002dloading

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 20:47:07

机房内怎么估算光纤使用长度,每次估算不是长了就是短了,好难受!

在机房干久了,你一定遇到过这种场景: 光纤刚插上,一头到位,另一头差 30 厘米; 或者更惨——算多了,盘成一坨“光纤方便面”,运维巡检一看就想骂人。 很多同事都会说一句话: “光纤长度,真不好算。” 但说实话,光纤长度不是算不准,而是大多数人压根没“按工程方…

作者头像 李华
网站建设 2026/4/11 13:41:31

大模型中 System Prompt 与 Instruction 的区别

在大模型应用开发中,System Prompt(系统提示)和 Instruction(指令)是两种常用的提示工程技术,它们在定义、作用范围和使用场景上存在明显区别。一、定义与基本概念System Prompt(系统提示&#…

作者头像 李华
网站建设 2026/4/15 10:06:21

MySQL

官网:MySQL :: Developer Zone 安装 官网下载地址(社区版):https://downloads.mysql.com/archives/community/ 解压 下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.34 的软件本体…

作者头像 李华
网站建设 2026/4/15 21:48:43

LobeChat能否支持太空旅行规划?星际航线与生存条件模拟

LobeChat能否支持太空旅行规划?星际航线与生存条件模拟 在人类迈向深空的征途上,每一次任务规划都像是一场跨学科的精密交响——轨道动力学、生命保障系统、能源管理、材料科学……这些领域的知识如同星图般庞杂。传统的设计流程依赖专家团队反复迭代计算…

作者头像 李华