bios+mbr下“embedding is not possible”需确保/boot分区从第2048扇区起始(1mb对齐),用fdisk/parted检查并重分区;禁用--force,改用grub-install --target=i386-pc --recheck --debug /dev/sdx排查。

grub-install 报错 “embedding is not possible” 怎么办
这是 BIOS + MBR 模式下最常遇到的引导修复失败提示,本质是 GRUB 2 无法在主引导记录(MBR)后预留的“空闲扇区”里写入 core.img——通常因为分区起始位置太靠前、磁盘用了 Advanced Format(4K 扇区)、或存在 LVM/加密/RAID 等干扰结构。
- 确认当前启动模式:
ls /sys/firmware/efi有输出才是 UEFI;没输出且fdisk -l显示 DOS 分区表,就是 BIOS+MBR - BIOS+MBR 下必须保证
/boot所在分区从第 2048 扇区起始(1MB 对齐),用fdisk或parted检查Start列数值,小于 2048 就得重分区(备份数据!) - 不要强行加
--force:它可能绕过检查但导致后续启动失败 - 正确做法是先用
grub-install --target=i386-pc --recheck --debug /dev/sdX(/dev/sdX是磁盘,不是分区),观察日志里embedding area是否被识别
Windows 和 Linux 双系统启动项不显示对方
GRUB 默认通过 os-prober 扫描其他系统的启动文件,但它在多数发行版中默认禁用,且对 Windows Boot Manager(尤其是 UEFI 模式)识别不稳定。
- Ubuntu 22.04+ 默认关闭
os-prober,需手动启用:编辑/etc/default/grub,确保有GRUB_DISABLE_OS_PROBER=false - 运行
sudo os-prober看是否能列出 Windows 分区(如/dev/nvme0n1p1);若无输出,可能是 Windows 启动分区未挂载或被 BitLocker 加密 - UEFI 多系统时,
os-prober常漏掉 Windows,此时应直接配置链式启动:在/etc/grub.d/40_custom中添加:menuentry 'Windows Boot Manager' { insmod part_gpt insmod fat set root='hd0,gpt1' chainloader /EFI/Microsoft/Boot/bootmgfw.efi }注意hd0,gpt1要按实际 EFI 系统分区调整,用lsblk -f和sudo blkid确认
UEFI 模式下 grub-mkconfig 不生成 Windows 启动项
这不是 grub-mkconfig 的问题,而是它根本不负责发现操作系统——它只读取 /boot/grub/grub.cfg 模板和 /etc/grub.d/ 下脚本。Windows 条目依赖 os-prober 输出,而该工具在 UEFI 下对 FAT32 格式的 ESP 分区支持脆弱。
- 先确认 ESP 分区已挂载到
/boot/efi(mount | grep efi),且权限可读:ls /boot/efi/EFI/Microsoft/Boot/应能看到bootmgfw.efi - 若
os-prober仍不工作,别硬等,直接手写启动项(见上一条),并确保/etc/default/grub中有GRUB_TIMEOUT_STYLE=menu,否则即使条目存在也可能跳过菜单 - 注意:某些 OEM 机器(如 Dell、Lenovo)会在 ESP 里放多个
bootmgfw.efi变体(带版本号或厂商前缀),os-prober只认标准路径,手写时得自己找对文件
修复后进不了 Linux,卡在 “Loading initial ramdisk…”
这说明 GRUB 成功加载了内核,但 initramfs 无法挂载根文件系统——常见于根分区 UUID 变更、LVM 名称变动、或加密卷密钥未正确注入 initramfs。
- 重启进 GRUB 菜单,按
e编辑启动项,在linux行末尾临时加rd.debug systemd.log_level=4,看卡在哪一步(比如停在dracut-initqueue就是根设备找不到) - 检查当前根设备是否匹配:
lsblk -f查 UUID,再对比/etc/fstab和/etc/crypttab(如有加密)里的配置 - 如果改过 LVM 卷名或 VG 名,
dracut --regenerate-all --force重新生成 initramfs(CentOS/RHEL)或update-initramfs -u -k all(Debian/Ubuntu) - 最容易被忽略的是:UEFI 模式下,如果 ESP 分区挂载点从
/boot/efi改成别的路径(如/efi),grub-install会失败,但错误不明显,导致后续所有引导操作都不可靠
事情说清了就结束










