从 USB 启动现有的 sda1

Hab*_*ual 3 grub2 usb

我可以从我的 U 盘手动启动我唯一的 Ubuntu 10.10 安装,输入以下命令:

set root=(hda0)
linux /vmlinux root=/dev/sda1 ro
initrd /initrd.img
boot
Run Code Online (Sandbox Code Playgroud)

希望的是让 USB 为我做这件事。不需要打字...?

我按照这些网址的指示(大多数没有用)

可启动 USB 救援棒上的 grub

如何将 GRUB 2 安装到 U 盘/随身碟

GRUB2 和 USB 闪存驱动器

如何恢复 GRUB2 Linux

和一些相当广泛的搜索在这里。有 10 页,每页 50 页。我做了我能做的,现在求助于专家。

到目前为止,用于使 USB 引导到 grub2 的步骤摘要...

mkdir -p /media/GRUB2_RESCU/boot/grub
sudo cp /usr/lib/grub/i386-pc/* /media/GRUB2_RESCU/boot/grub
echo '(hd0) /dev/sda' > /media/GRUB2_RESCU/boot/grubdevice.map
sudo grub-install --root-directory=/media /dev/sdb
sudo grub-mkconfig -o /media/GRUB2_RESCU/boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

感谢您的时间。

Jor*_*gla 5

你给出的步骤接近工作,但让我评论每一步。

mkdir -p /media/GRUB2_RESCU/boot/grub
Run Code Online (Sandbox Code Playgroud)

这是完全正确的。

sudo cp /usr/lib/grub/i386-pc/* /media/GRUB2_RESCU/boot/grub
Run Code Online (Sandbox Code Playgroud)

这不是必需的,但不应该伤害任何东西(grub-install 会自动执行此操作)

echo '(hd0) /dev/sda' > /media/GRUB2_RESCU/boot/grubdevice.map
Run Code Online (Sandbox Code Playgroud)

这也不是必需的,也不应该伤害任何东西。大部分 GRUB2 不再需要 device.map。

sudo grub-install --root-directory=/media /dev/sdb
Run Code Online (Sandbox Code Playgroud)

我不知道这是否只是您写问题时的一个错字,或者这实际上是您运行的命令,但它应该是“--root-directory /media/GRUB2_RESCU/”。否则 grub 将安装其模块,并在 /media/boot/grub(不在闪存驱动器上)而不是 /media/GRUB2_RESCU/boot/grub/ 中查找其 grub.cfg。这可以解释为什么您尝试的方法不起作用。

sudo grub-mkconfig -o /media/GRUB2_RESCU/boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

这应该可以工作,但是每次内核升级时您都必须手动运行 grub-mkconfig 以获得更新的菜单。相反,我建议编写一个手动 grub.cfg,它只是从您的内部驱动器加载 grub.cfg,如下所示:

root=(hd0,1)
configfile /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

为确保即使驱动器四处移动也能正常工作,请更换

root=(hd0,1)
Run Code Online (Sandbox Code Playgroud)

search --set --fs-uuid UUID_GOES_HERE
Run Code Online (Sandbox Code Playgroud)

您可以使用此终端命令找到 UUID:

sudo grub-probe --target=fs_uuid --device /dev/sda1
Run Code Online (Sandbox Code Playgroud)