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)
酷番叔酷番叔
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信