看来这个问题已经在这里被问过很多次了,例如:
但这些问题都没有得到充分回答(或者可能本身就是问题的答案,没有在这里列出的问题,但这里提出的问题并没有得到充分回答)。所以让我再问一遍,这样我们就可以在一站式的地方进行全面的问答。
情况很简单:
- 有一个分区(分区 A)的引导加载程序已损坏或丢失,
- 我们正在启动另一个 Linux 系统,无论是从不同的分区(分区 B)还是 Live-CD,
- 目标是完全安装 grub2 作为其引导加载程序。即从分区 B 中的操作系统到分区 A 中的操作系统。
任务也很简单:
- 安装 grub2 作为引导加载程序。这是通过 完成的
grub-install
。 - 更新 grub2 菜单以启动在分区 A 上找到的任何内核。这是通过 完成的
update-grub
,对吗?
好吧,现在魔鬼就在细节里,
- 要
grub-install
安装到 PBR,- 它抱怨它不安全/不可靠:
GRUB 只能通过使用阻止列表在此设置中安装。但是,阻止列表不可靠,不鼓励使用。
error: embedding is not possible, but this is required for cross-disk install
当我阅读时,有时它也会抱怨。
- 它抱怨它不安全/不可靠:
- 如果只用
grub-install
而不用update-grub
,那么- 分区 A 可以启动,但只能启动到带有命令行提示符的黑色 GRUB2 屏幕。
- 但是,我没有看到
update-grub
在分区 A 上进行操作的选项,而是在其自己的分区 B 上进行操作。
因此,总而言之,请详细说明如何将 grub2 安装到不同分区的 PBR,并使用菜单启动在分区 A 上找到的任何内核。谢谢。
更新:
好吧,为了让它成为一个一站式的地方,对于那些甚至不知道 PBR 是什么的人来说——
光生物反应器是一个通常用于多重引导情况,指的是分区引导记录,除了主引导记录(MBR)。
更新2:
将此chroot
方法应用于分区 A,我得到了以下结果:
% grub-install /dev/sdc5
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.
为什么它拒绝继续使用黑名单?
% fdisk -l /dev/sdc
Disk /dev/sdc: 74.5 GiB, 80000000000 bytes, 156250000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x44c4f501
Device Boot Start End Sectors Size Id Type
/dev/sdc1 1 12289724 12289724 5.9G 7 HPFS/NTFS/exFAT
/dev/sdc2 * 12289725 28676024 16386300 7.8G 83 Linux
/dev/sdc3 28676025 156248189 127572165 60.9G 5 Extended
/dev/sdc5 28676026 45062324 16386299 7.8G 83 Linux
/dev/sdc6 45062326 61448624 16386299 7.8G 83 Linux
. . .
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
答案1
仅适用于 BIOS 系统。自 2012 年发布 Windows 8 以来的所有系统都是 UEFI。因此您不需要也不想在已有 35 年历史的 BIOS/MBR 配置中安装。
安装 grub 到 PBR 仅用于 BIOS 启动。并且,如果使用安装到 MBR 的另一个 grub 进行启动,则只能从 PBR 启动,因为 BIOS 仅通过 MBR 启动。
现在有了 grub2,启动另一个安装有许多更好的方法。grub 必须使用阻止列表,这些阻止列表是 grub 其余部分的硬编码地址,而不是搜索。地址甚至可以使用 fsck 进行更改。
通常,MBR 中的 grub 来自上次安装,它控制启动过程。如果您不想从实时安装程序安装 grub:
sudo ubiquity -b
您可以随时启动任何安装并将其 grub 安装到 MBR。从您的安装内部:
sudo grub-install /dev/sdX where sdX is your drive.
您可以使用 grub2 的 os-prober 查找其他安装并添加到 grub 菜单。您可以使用配置文件加载另一个安装 grub。并且您可以在 40_custom 中使用您自己的启动节来加载最新内核的链接,因此不需要使用较新的内核更新第二个安装的启动条目。
BIOS 模式下的 Grub 还会保存有关重新安装位置的驱动器(和分区)信息。如果不正确,也必须更新。按 Enter 进入第一页,按 Tab 键确定,按空格键选择/取消选择驱动器,按 Enter 键接受,不要选择分区或不选择任何内容,这样 grub 就不会在任何地方重新安装。
sudo dpkg-reconfigure grub-pc
https://ubuntuforums.org/showthread.php?t=2189643
用于引导最新内核和配置文件类型 grub 条目的引导链接的引导节示例。不仅适用于 USB 驱动器,还适用于任何安装。
如何添加 GRUB2 菜单项以启动 USB 驱动器上安装的 Ubuntu?
您始终可以手动安装 grub,只需安装其他安装或完全 chroot。如果您确实希望将其安装在分区中,则可能需要 --force 参数。
https://help.ubuntu.com/community/Grub2/Installing#Fixing_a_Broken_System
也可以看看:
https://help.ubuntu.com/community/Grub2/Setup#Configuring_GRUB_2
答案2
我认为@oldfred 的回答几乎涵盖了所有内容,但您的问题有点令人困惑。
尽管可以将 grub 安装到 PBR,但是您总是将分区中的操作系统的 grub 安装A
到分区的 PBR A
,而绝不会将 grub 安装到任何其他分区的 PBR。
A
但是如果您确实想在启动实时会话或分区上的操作系统时将 grub 实例(重新)安装到分区的 PBR B
,则必须chroot
进入分区上的操作系统A
,然后运行该grub-install
命令。示例:
sudo mount /dev/sdaX /mnt
for i in dev sys proc dev/pts ; do sudo mount --bind /$i /mnt/$i ; done
chroot /mnt
grub-install --force /dev/sdaX
update-grub
exit
for i in dev sys proc dev/pts ; do sudo umount /mnt/$i ; done
sudo umount /mnt
/dev/sdaX
根据您的需要调整此示例中的设备名称!
/dev/sdX
但如果操作系统使用单独的分区,事情就会变得更加复杂,甚至不可能,/boot
我从未使用过单独的/boot
分区,所以我无法告诉你。如果所讨论的操作系统不使用单独的分区,则此示例将有效/boot
。