det*_*tly 3 bootloader system-installation 14.04
对于实验的缘故,我想记录一个最小的程序在一台Mac Mini的14.04纯EFI启动。
这涉及将基本系统(使用 Mac 风格的服务器安装 ISO)安装到硬盘驱动器,但不将 GRUB 安装到 MBR。GRUB被安装到硬盘的第一个分区,但直到我手动设置EFI引导分区,系统将无法启动。
有没有办法使用 USB 安装程序上的引导加载程序手动引导到已安装的系统?我可以访问安装程序上的“高级选项”(即引导加载程序命令行),但我不知道它是什么引导加载程序,因此我找不到它的完整文档。
不要使用 Mac 特定的安装程序。使用普通(服务器、桌面)安装程序,使用所有默认设置(避免 LVM 除外)安装系统,然后重新启动。
再次启动 USB 安装程序,但是当您看到 GRUB 菜单时,按C以调出 GRUB 控制台。
在 GRUB 控制台,执行
grub> ls
(memdisk) (hd0) (hd0,msdos) (hd1) (hd2) (hd2,gpt3) (hd2,gpt2) (hd2,gpt1)
Run Code Online (Sandbox Code Playgroud)
您可能不会得到与此完全相同的结果,但您有一些选择。您要查找新安装,而不是安装程序/实时系统。我建议找到一个包含新用户主目录的分区:
grub> ls (hd2,gpt2)/home
jason/
Run Code Online (Sandbox Code Playgroud)
继续尝试这种模式,直到找到为止。
如果你知道你把所有东西都安装到了一个分区,那么你就完成了——只需使用最后一步的结果,(hdX,gptY). 如果您没有,或者您不确定,请保留该hdX部分,但通过所有gptY选项查找/boot/grub目录:
grub> ls (hd2,gpt1)/boot/grub
error: file `/boot/grub' not found.
Run Code Online (Sandbox Code Playgroud)
不,不是那个。
grub> ls (hd2,gpt2)/boot/grub
unicode.pf2 [...] grub.cfg
Run Code Online (Sandbox Code Playgroud)
找到了!
现在您想将其设置为您的根以执行进一步的命令:
grub> set root=(hd2,gpt2)
Run Code Online (Sandbox Code Playgroud)
我发现正确启动的唯一方法是使用驱动器的 UUID(即没有快捷方式/dev/sdaX!) - 所以让我们明白:
grub> ls -l (hd2,gpt2)
Partition hd2,gpt2: Filesystem type ext* [...snip...] UUID e86c20b9-83e1-447d-a3be-d1ddaad6c4c6 - Partition start at [...]
Run Code Online (Sandbox Code Playgroud)
注意 UUID 字符串!你的会不一样。现在告诉 GRUB Linux 在哪里:
grub> linux /boot/vmlinuz[...tab here!...].efi.signed root=UUID=<the UUID from above>
Run Code Online (Sandbox Code Playgroud)
GRUB的控制台可以做tab完成,所以如果你只是打出来的vmlinuz部分,命中tab,然后打.并tab再次...你将不必键入出整个文件名。但一定要确保.efi.signed位在那里!是的,您必须输入整个 UUID。
现在设置initrd(初始 RAM 磁盘):
grub> initrd /boot/initrd[...tab here!...]
Run Code Online (Sandbox Code Playgroud)
类型:
grub> boot
Run Code Online (Sandbox Code Playgroud)
您应该会发现自己已启动到您的安装中!
我不是 GRUB 向导,所以我欢迎任何关于如何减少它的提示。尤其是 UUID 部分,这有点令人发指。
| 归档时间: |
|
| 查看次数: |
5005 次 |
| 最近记录: |