GRUB(Grand Unified Bootloader)是Linux系统中广泛使用的引导加载程序,负责在计算机启动时加载操作系统内核和初始化内存盘(initramfs),是系统启动流程的核心组件,在Linux系统中安装GRUB通常出现在以下场景:新安装系统后手动配置引导、修复因误操作或系统更新导致的引导丢失、更换启动设备(如从机械硬盘更换为固态硬盘)或引导模式(如从BIOS切换至UEFI)等,以下是详细的安装步骤及注意事项,涵盖BIOS和UEFI两种主流启动模式。
安装前的准备工作
-
获取root权限
GRUB安装需要修改系统关键分区(如MBR、ESP分区),必须使用root用户或通过sudo
执行命令,可通过sudo -i
切换至root用户。 -
确认系统根目录所在分区
使用lsblk -f
或fdisk -l
命令查看所有磁盘及分区信息,找到Linux系统的根目录(通常标记为,文件系统类型为ext4
、xfs
等),若输出显示/dev/sda2
的FSTYPE
为ext4
且MOUNTPOINT
为,则根目录分区为/dev/sda2
。 -
确认启动模式(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模式:传统启动方式,引导信息写入磁盘的MBR(主引导记录),适用于Legacy设备,可通过
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
为磁盘设备,需替换为实际磁盘名):
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-pc
或yum 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
常见问题及解决方法
-
grub-install
报错“efi directory not found”
原因:UEFI模式下未指定正确的ESP挂载点,或ESP分区未挂载。
解决:检查/boot/efi
是否存在且已挂载,使用mount /dev/sdXn /boot/efi
挂载(sdXn
为ESP分区)。 -
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
的条目。 -
安装后无法进入GRUB菜单
原因:GRUB配置文件中内核路径错误,或启动顺序未设置正确。
解决:- 检查
/boot/grub/grub.cfg
中linux
和initrd
路径是否正确(如/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