news 2026/4/18 8:34:06

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/17 23:49:05

FreeSWITCH 实用工具集(个人开发整理)

FreeSWITCH 实用工具集(个人开发整理) 本仓库由一名 FreeSWITCH 爱好者维护,整理了本人在日常开发和部署中编写的一些小工具、配置模板与集成脚本。部分基础逻辑已在社区分享,完整版(含注释、部署脚本、使用示例&#…

作者头像 李华
网站建设 2026/4/18 9:57:25

模型编辑 vs 参数微调:给零算法基础AI从业者的讲解

一、先给一句话结论(先有整体感)参数微调(Fine-tuning) :通过训练,让模型整体慢慢学会一类新能力或新风格。模型编辑(Model Editing) :不重新训练模型,只是精…

作者头像 李华
网站建设 2026/4/18 8:15:46

【震惊!】护士注册选错机构?这3点必须知道!

护士资格证注册行业技术分析与解决方案行业痛点分析当前护士资格证注册领域面临多重技术挑战。测试显示,传统注册流程中信息核验环节平均耗时达5-7个工作日,材料审核通过率仅为68%。数据表明,由于各地注册政策差异和材料要求不统一&#xff0…

作者头像 李华
网站建设 2026/4/17 18:11:00

Dify默认端口修改全攻略(含API配置)

Dify 默认端口修改全攻略(含 API 配置) 在部署 AI 应用开发平台时,端口冲突几乎是每个开发者都会遇到的“第一道坎”。特别是像 Dify 这类基于 Docker Compose 构建的全栈系统,默认使用 80 和 443 端口提供 Web 服务,…

作者头像 李华
网站建设 2026/4/18 3:40:32

ES6模板字符串深度解析:原理、应用与Tagged Template高级用法

引言 在ES6(ECMAScript 2015)之前,JavaScript开发者处理字符串时面临着诸多痛点:繁琐的拼接语法、多行文本的转义处理、变量插入的可读性问题等。ES6引入的模板字符串(Template Strings)彻底改变了这一局面…

作者头像 李华