我觉得社区早就需要一份关于如何在一些极其常见的场景下安装 Grub2 的简洁指南。当答案针对每个场景都有一个部分并且除了指定的内容之外不做任何其他假设时,我会接受该答案为已解决。请以 wiki 风格添加现有答案,并保持原始假设。
规则:
1. 在回答的任何时候,您都无法调用 Ubiquity(Ubuntu 安装程序)。2
. 我强烈建议不要使用任何自动修复工具,因为它们没有什么教育意义
场景 1:无法启动 Linux 操作系统,没有启动分区,通过 Live CD 修复
设置:
/dev/sda1
已格式化ext*
/dev/sda2
已格式化linux_swap
/dev/sda1
无法启动,因为 MBR 被扰乱并被/boot/grub/*
删除- 相当于跑步
rm -rf /boot/grub
和dd if=/dev/zero of=/dev/sda bs=440 count=1
解释:
- 如何启动 Live CD/USB 并将 Grub2 恢复到 MBR
/boot
以及/dev/sda1
场景 2:无法启动 Linux 操作系统,启动分区,从 Live CD 修复
设置:
/dev/sda1
已格式化fat
/dev/sda2
已格式化ext*
/dev/sda3
已格式化linux_swap
/dev/sda2
由于 MBR 混乱且/dev/sda1
已格式化,因此无法启动
解释:
- 如何启动到 Live CD/USB 并将 Grub2 恢复到 MBR,
/dev/sda1
然后fstab
更新/dev/sda2
场景 3:安装到 U 盘,启动各种操作系统,从 Linux 操作系统
设置:
/dev/sdb
是可移动媒体/dev/sdb1
已格式化fat
/dev/sdb2
已格式化ext*
/dev/sdb3
已格式化fat
- 的 MBR
/dev/sdb
尚未初始化 - 您正在执行安装在 Linux 上的操作系统
/dev/sda
解释:
- 如何在 上安装 Grub2
/dev/sdb1
,标记/dev/sdb1
为活动,并能够在启动时选择/dev/sdb2
和。/dev/sdb3
场景 4:(奖励)从 Linux 操作系统安装到 U 盘,启动 ISO
设置:
/dev/sdb
是可移动媒体/dev/sdb1
已格式化fat
/dev/sdb1
包含/iso/live.iso
/dev/sdb2
已格式化ext*
/dev/sdb3
已格式化fat
- 的 MBR
/dev/sdb
尚未初始化 - 您正在执行安装在 Linux 上的操作系统
/dev/sda
解释:
- 如何在 上安装 Grub2
/dev/sdb1
,标记为活动,并在启动时/dev/sdb1
能够在/dev/sdb2
、/dev/sdb3
和之间进行选择。/iso/live.iso
答案1
Grub2 相关命令的一般背景
grub-install
sudo grub-install /device
指/device
的是 Grub 将把主 grub 可执行文件写入 MBR 或分区引导记录的物理驱动器。 形式的设备/dev/sd[a-z]
将把 MBR 写入其中,而 形式的设备/dev/sd[a-z][0-9]
将把 PBR 写入其中。主要区别在于硬件始终执行 MBR 中的内容,然后由那里的代码决定是否执行 PBR。有些设置可能会将 Grub2 以外的其他东西安装到 MBR(例如 grub legacy),并让其加载安装在其中一个分区的 PBR 中的 Grub2。但一般而言,建议使用 将 Grub2 安装到 MBR。 该/dev/sd[a-z]
命令的所有形式都需要此选项。sudo grub-install {--no-floppy|--allow-floppy} /device
这两个标志可以与命令行的任何其他变体一起使用grub-install
。第一个选项--no-floppy
用于告诉 grub 不要查找软盘,这减少了总体执行时间。Grub 的较新版本现在有--allow-floppy
专门启用此功能的选项,因为现在默认不搜索软盘。sudo grub-install [--force] /device
添加该--force
选项只会允许将 Grub 安装到分区引导记录而不是主引导记录中。通常不允许这种行为。以下场景之一可能会详细说明为什么会这样做。sudo grub-install [--recheck] /device
/boot/grub/device.map
这将重新生成用于[填写]的 文件sudo grub-install [--target=] /device
如果您想指定在启动时执行的特定固件,请使用此选项。BIOS 和 UEFI 以及 x86 和 x64 都有不同的版本。如果您使用 BIOS 并在您计划启动的同一台机器上安装 Grub2,那么这完全是可选的,建议让 Grub2 自行检测这一点。
grub-mkconfig
sudo grub-mkconfig -o /boot/grub/grub.cfg
这是此命令的标准格式。这将导致每个脚本/etc/grub.d
按顺序运行,并将所有脚本的输出附加到选项指定的文件中-o file
。文件的位置取决于正在执行的安装或修复类型。请参阅条目grub/grub.cfg
grub-update
sudo grub-update [*]
这是唯一grub-update
可以调用的形式。它只是 的包装器,grup-mkconfig -o /boot/grub/grub.cfg
这意味着/boot
必须安装 才能工作。所有参数都直接传递给grub-mkconfig
Grub2 相关文件的一般背景
/boot/grub/device.map
(可选)
[填写此内容]/boot/grub/core.img
(必填)
这是 grub2 的主要可执行文件。[填写更多]grub/grub.cfg
(大多数情况下是必需的)
此文件是读取 grub 的所有菜单项的文件。它由/etc/grub.d
安装 grub 的操作系统的脚本列表生成(这可能是也可能不是 grub 最终要启动的操作系统)。请参阅 的条目grub-mkconfig
。如果发生以下情况,此文件将被覆盖(Grub 有更新并且/boot
已安装)或(grub-update
正在运行)或(grub-mkconfig -o /boot/grub/grub.cfg
正在运行)。此文件以相对路径列出,因为它的确切位置取决于您是安装还是修复。如果是修复,则需要将包含的分区/boot
安装在某个地方,例如/mnt/boot
。在这种情况下,路径将为/mnt/boot/grub/grub.cfg
。如果安装在已启动的 linux 系统上,路径将为/boot/grub/grub.cfg
。如果缺少此文件,仍然可以通过 grub 命令 shell 进行启动。这超出了本文档的范围(因此大多必需的)。
场景 1:没有启动分区
- 启动 Live CD、USB 或其他 Linux 环境
场景 2:启动分区
- 启动 Live CD、USB 或其他 Linux 环境
场景 3:U盘
- 将 USB 驱动器连接到现有 Linux 环境
- 创建挂载点
/dev/sdb1
并挂载它 - 安装 grub 到
/dev/sdb
- ???
命令:
# Step 2
sudo mkdir /mnt/usb-boot-part
sudo mount /dev/sdb1 /mnt/usb-boot-part
# Step 3
sudo grub-install --boot-directory=/mnt/usb-boot-part /dev/sdb
场景 4:环回设备
- 将场景 3 中的 USB 驱动器连接到现有 Linux 环境
真正信息丰富的网站
- [主题] :关联