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/15 10:02:32

Product Hunt 每日热榜 | 2025-12-16

1. Unloop 标语:为注意力缺陷多动症(ADHD)和神经多样性思维者设计的视觉模式映射 介绍:Unloop 是一款可视化的模式映射工具,帮助你识别那些让你感到陷入困境的触发因素、想法、情绪和行为。把这些内容可视化&#xf…

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

软考高项|老金团队三位大神老师,总有一位适合你!

备考软考高项还在为选老师纠结吗? 今天给大家安利老金团队的三大王牌老师 他们各有所长,能cover所有备考需求👇🏆 学术泰斗:金老师▪️ 教学特色:30年高校教学经验,理论功底深厚 ▪️ 拿手绝活&…

作者头像 李华
网站建设 2026/4/17 15:51:07

大模型学习笔记

公司私有数据大模型应用方案1. RAG(Retrieval Augmented Generation)1)工作原理RAG 通过从外部知识库中检索相关信息,并将其作为提示输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能…

作者头像 李华
网站建设 2026/4/4 0:21:32

Windows Subsystem for Linux (WSL) 介绍

💻 Windows Subsystem for Linux (WSL) 介绍 WSL(适用于 Linux 的 Windows 子系统)是微软开发的一项 Windows 功能,它允许开发人员直接在 Windows 操作系统上运行完整的 GNU/Linux 环境,包括大多数命令行工具、实用程序…

作者头像 李华
网站建设 2026/4/17 20:14:55

sward全面介绍(13) - 集成Ldap,使用Ldap用户登录sward

集成ldap用户功能划入社区版本,本篇文章将全面介绍如何在sward中集成ldap用户并实现ldap用户登录sward。1、配置Ldap进入系统设置->用户->用户目录,点击Ldap后的配置按钮,填写Ldap的配置信息。参数说明类型选择Ldap服务器类型AD/LDAP名…

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

高效RANSAC

GitHub - ShiPC-AI/TCF: [RAL 2024] RANSAC Back to SOTA: A Two-Stage Consensus Filtering for Real-Time 3D Registration

作者头像 李华