Linux系统中如何正确安装和配置GRUB引导程序?

GRUB(Grand Unified Bootloader)是Linux系统中广泛使用的引导加载程序,负责在计算机启动时加载操作系统内核和初始化内存盘(initramfs),是系统启动流程的核心组件,在Linux系统中安装GRUB通常出现在以下场景:新安装系统后手动配置引导、修复因误操作或系统更新导致的引导丢失、更换启动设备(如从机械硬盘更换为固态硬盘)或引导模式(如从BIOS切换至UEFI)等,以下是详细的安装步骤及注意事项,涵盖BIOS和UEFI两种主流启动模式。

linux如何安装grub

安装前的准备工作

  1. 获取root权限
    GRUB安装需要修改系统关键分区(如MBR、ESP分区),必须使用root用户或通过sudo执行命令,可通过sudo -i切换至root用户。

  2. 确认系统根目录所在分区
    使用lsblk -ffdisk -l命令查看所有磁盘及分区信息,找到Linux系统的根目录(通常标记为,文件系统类型为ext4xfs等),若输出显示/dev/sda2FSTYPEext4MOUNTPOINT为,则根目录分区为/dev/sda2

  3. 确认启动模式(BIOS或UEFI)

    • BIOS模式:传统启动方式,引导信息写入磁盘的MBR(主引导记录),适用于Legacy设备,可通过df -h检查是否存在独立的/boot分区(通常与根目录在同一分区),或使用ls /sys/firmware/efi——若目录不存在则为BIOS模式。
    • UEFI模式:现代启动方式,引导文件存储在ESP(EFI系统分区,FAT32格式),挂载点通常为/boot/efi,可通过efibootmgr -v查看已启动的UEFI项,或确认/boot/efi分区存在且格式为vfat

BIOS模式下安装GRUB

BIOS模式下,GRUB需安装到磁盘的MBR区域,并覆盖原有的引导记录(若为双系统,需谨慎操作避免覆盖其他系统引导)。

步骤1:挂载根目录(若未在当前系统运行)

若通过Live USB安装或修复,需先挂载根目录分区:

mount /dev/sda2 /mnt  # 假设根目录为/dev/sda2
# 若有独立的/boot分区,需额外挂载:
mount /dev/sda1 /mnt/boot  # 假设/boot分区为/dev/sda1

步骤2:安装GRUB到MBR

执行以下命令,将GRUB安装到目标磁盘的MBR(/dev/sda为磁盘设备,需替换为实际磁盘名):

linux如何安装grub

grub-install --target=i386-pc /dev/sda
  • --target=i386-pc:指定BIOS模式的目标架构。
  • 若提示"grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist",需安装grub2-pc包(如apt install grub2-pcyum install grub2-pc)。

步骤3:生成GRUB配置文件

GRUB配置文件(grub.cfg)包含内核路径、启动参数等信息,需手动生成:

grub-mkconfig -o /boot/grub/grub.cfg
  • 若在Live USB环境下,需指定挂载点:grub-mkconfig -o /mnt/boot/grub/grub.cfg

UEFI模式下安装GRUB

UEFI模式下,GRUB需安装到ESP分区,并生成UEFI启动项。

步骤1:挂载ESP分区

ESP分区通常为FAT32格式,挂载点为/boot/efi,若未挂载:

mount /dev/sda1 /boot/efi  # 假设ESP分区为/dev/sda1

步骤2:安装GRUB到ESP分区

执行以下命令(/dev/sda为目标磁盘,/boot/efi为ESP挂载点):

grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot /dev/sda
  • --target=x86_64-efi:指定UEFI模式的目标架构(64位系统);若为32位系统,使用i386-efi
  • --efi-directory:ESP分区的挂载路径。
  • --boot-directory:GRUB核心文件的存放路径(默认为/boot,与ESP分区中的/boot/efi区分)。

步骤3:生成GRUB配置文件

与BIOS模式相同,执行grub-mkconfig生成配置文件:

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

常见问题及解决方法

  1. grub-install报错“efi directory not found”
    原因:UEFI模式下未指定正确的ESP挂载点,或ESP分区未挂载。
    解决:检查/boot/efi是否存在且已挂载,使用mount /dev/sdXn /boot/efi挂载(sdXn为ESP分区)。

    linux如何安装grub

  2. grub-mkconfig报错“cannot find a device for /boot/efi”
    原因:ESP分区未在/etc/fstab中正确配置,导致系统无法识别。
    解决:通过blkid获取ESP分区的UUID,编辑/etc/fstab添加类似UUID=XXXX-XXXX /boot/efi vfat defaults 0 2的条目。

  3. 安装后无法进入GRUB菜单
    原因:GRUB配置文件中内核路径错误,或启动顺序未设置正确。
    解决

    • 检查/boot/grub/grub.cfglinuxinitrd路径是否正确(如/boot/vmlinuz-5.15.0-76-generic)。
    • UEFI模式下,使用efibootmgr -v确认GRUB启动项是否存在,若无则手动创建:
      efibootmgr --create --disk /dev/sda --part 1 --label "GRUB" --loader "\EFI\ubuntu\grubx64.efi"

BIOS与UEFI模式安装GRUB对比

对比项 BIOS模式 UEFI模式
目标架构 i386-pc x86_64-efi(64位)/i386-efi(32位)
安装位置 磁盘MBR(如/dev/sda ESP分区(如/boot/efi
依赖分区 根目录分区() ESP分区(FAT32格式)+ 根目录分区
启动文件 core.img写入MBR grubx64.efi写入ESP/EFI/BOOT/
启动顺序管理 需通过BIOS设置 可通过efibootmgr命令管理

相关问答FAQs

问题1:安装GRUB时提示“error: no such partition”,如何解决?
解答:通常是因为grub-install命令中指定的磁盘路径错误(如误将分区/dev/sda1当作磁盘/dev/sda),需通过lsblk确认目标磁盘名称(如/dev/sda),而非分区(/dev/sda1),若为双系统,还需确保根目录分区正确(通过blkid查看根分区UUID,与/etc/fstab中的条目一致)。

问题2:如何验证GRUB是否安装成功?
解答

  • BIOS模式:检查MBR是否写入GRUB信息,执行dd if=/dev/sda bs=512 count=1 | strings | grep GRUB,若输出包含GRUB则成功。
  • UEFI模式:检查ESP分区是否存在GRUB引导文件,执行ls /boot/efi/EFI/BOOT/BOOTX64.EFI(64位系统),文件存在且大小不为0则成功。
  • 通用方法:重启计算机,若能进入GRUB启动菜单并选择Linux系统,则安装成功。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/19510.html

(0)
酷番叔酷番叔
上一篇 2025年8月29日 10:07
下一篇 2025年8月29日 10:22

相关推荐

  • 网卡不见了?试试ip link命令

    在Linux系统中,MAC地址(Media Access Control Address)是网络接口的唯一硬件标识符,由48位二进制数组成,通常表示为12位十六进制数(如00:1A:2B:3C:4D:5E),它用于在局域网中精确识别设备,对网络配置、故障排查、安全策略(如MAC地址过滤)至关重要,以下是在RHE……

    2025年7月29日
    15700
  • 如何快速提取data.txt第2、4、5列?

    方法1:使用 cut 命令(简单分隔符场景)适用场景:列由固定分隔符(如逗号、制表符)分隔,且列位置连续,命令格式:cut -d '分隔符' -f 列序号列表 文件名示例:# 提取第1到第3列(分隔符为制表符,默认)cut -f 1-3 data.txt注意:-d 指定分隔符(默认制表符),-f……

    2025年7月28日
    16300
  • Linux系统如何运行sh程序的具体步骤是什么?

    在Linux系统中,Shell脚本(通常以.sh为扩展名)是自动化任务、管理系统和简化操作的重要工具,运行Shell脚本是Linux日常运维和开发的基础技能,本文将详细介绍Linux运行sh程序的完整流程、方法及注意事项,Shell脚本的基础结构在运行脚本前,需先了解其基本结构,一个典型的Shell脚本通常包含……

    2025年10月8日
    15700
  • 磁盘空间不足怎么办?

    Linux 分区与挂载点详解:从基础到实战为什么需要分区和挂载点?在 Linux 系统中,分区是将物理硬盘划分为逻辑存储单元的过程,而挂载点则是将分区连接到文件系统目录的桥梁,将 /dev/sda1 分区挂载到 /home 目录,意味着所有存储在家目录的文件实际保存在该分区合理的分区方案能提升系统安全性(如隔离……

    2025年7月28日
    17700
  • Linux如何安全登录Oracle数据库?

    前提条件安装Oracle客户端或服务端需已安装Oracle数据库服务端(如oracle-database-server)或客户端工具(如oracle-instantclient),验证安装:执行 sqlplus -v 查看版本信息,若未安装需下载安装包,配置环境变量在用户配置文件(如 ~/.bashrc 或……

    2025年7月17日
    18200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信