Linux Grub 引导配置详解

3次阅读

grub命令行下手动启动linux需依次执行ls探路、set root、linux指定内核、initrd指定镜像、boot启动;顺序错误或路径不匹配将导致失败。

Linux Grub 引导配置详解

GRUB 命令行模式下怎么手动启动 Linux

grub.cfg 损坏、菜单不显示或内核路径写错时,grub> 提示符就是最后的救命通道。它不依赖配置文件,纯靠手输命令加载内核和 initrd。

  • 先用 ls 探路:grub> ls (hd0,1)/boot/ —— 确认分区里真有 vmlinuz-*initrd.img-*,别凭记忆硬写
  • set root= 用的是 GRUB 命名(如 (hd0,1)),但 linux 行里的 root=/dev/sda1 是给 Linux 内核看的,必须匹配系统实际设备名,否则卡在 “VFS: Unable to mount root fs”
  • initrd 必须紧跟 linux 之后,顺序颠倒会报 kernel requires an initrd
  • Tab 补全路径——grub> linux /boot/vm<tab></tab> 能列出所有匹配内核,比猜省心十倍

/etc/default/grub 修改后为什么没生效

直接改 /boot/grub/grub.cfg 是白忙活,它每次都是自动生成的。真正起作用的是 /etc/default/grub/etc/grub.d/ 下的脚本。

  • GRUB_DEFAULT=0 表示默认选第一个菜单项;想按名称设,得写成 GRUB_DEFAULT="ubuntu"(引号不能少)
  • GRUB_TIMEOUT_STYLE=menu 才能确保超时前显示菜单;设成 hiddencountdown 会导致按住 Shift 才弹出菜单,新手常在这里懵圈
  • 改完必须运行 update-grubdebian/Ubuntu)或 grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/centos),漏掉这步等于没改
  • 如果 update-grub 报错 “cannot find a device for /”,大概率是 GRUB_DEVICE 没自动识别到根分区,可临时加 GRUB_DEVICE=/dev/sda2 再试

chainloader +1 引导 windows 为什么失败

链式加载不是万能钥匙,它只把控制权交给目标分区的第一个扇区(即 PBR),前提是那个扇区真有能干活的引导代码。

  • Windows 10/11 UEFI 安装默认不用 BIOS+MBR 模式,chainloader +1 在 UEFI 系统上根本跑不通,得用 efibootmgr 或 GRUB 的 efi 模块
  • BIOS 模式下,若 Windows 分区不是活动(active)分区,chainloader +1 会停在黑屏或 “Error: no such partition” —— 用 fdisk -l 确认 Boot 标志在对应分区
  • set root=(hd0,1) 中的分区编号要对:NTFS 分区通常在 (hd0,1)(hd0,2),但逻辑分区从 4 开始计数(比如 (hd0,4)),不是 sda5 对应 (hd0,5)
  • 安全启动(Secure Boot)开启时,chainloader 会被 UEFI 拦截,需关闭 Secure Boot 或换用 ntldr 兼容方式(不推荐)

重装 GRUB 时最危险的一步是什么

grub-install /dev/sda 这条命令本身没错,错在装错了目标设备——它会直接覆写 MBR 或 EFI 系统分区,一旦指向错误磁盘,整机可能无法启动。

  • 务必确认 /dev/sda 是系统盘,不是数据盘或 USB 盘。用 lsblk -f 对照 /boot/ 所在设备
  • UEFI 系统必须指定 --efi-Directory,例如:grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB,漏掉 --efi-directory 会静默失败
  • Live 环境中 chroot 后再装:先 mount /dev/sda2 /mnt,再 mount /dev/sda1 /mnt/boot/efi(如有),然后 chroot /mnt,否则 grub-install 找不到模块路径
  • 装完立刻验证:grub-probe -t device /boot 应返回 /dev/sda2grub-file --is-x86-bios-core-img /boot/grub/i386-pc/core.img 确认核心镜像完整

GRUB 配置里最绕的从来不是语法,而是命名体系混用:GRUB 自己的 (hd0,1)、Linux 内核的 /dev/sda1、UUID 字符串、UEFI 的 HD(1,gpt,...) —— 同一个分区在不同上下文里有四五种写法,抄错一个就进不了系统。

text=ZqhQzanResources