#1 - 2018-3-18 01:59
Lrolic.holic (holic都是异端!lrolic.rng如是说.)
设备:surface pro 3乞丐版
焦点:GUID分区表的ESP分区
问题:引导咋写啊为啥啊咋整啊
关于引导,主要纠结于GRUB4DOS,grub的语法,以及它的配置文件(脚本?);
关于配置文件,先说目录结构(bgm88)
C12A7328-F81F-11D2-BA4B-00A0C93EC93B这东西分区,可以说是esp分区,系统保留分区,一个孤独的被抛弃的FAT32分区,至于这个“分区类型GUID ”还是“磁盘GUID”还是“分区GUID”还是“卷GUID”是个啥,我估计弄不懂了;总之BOOTx64.efi就是在这里的,暂且说它是esp分区。
1,        Esp分区里有boot和EFI两个文件夹,windows boot manager是{通过esp\efi\bootx64.efi启动的}还是{随着efi shell在bios固件里启动的}还是{windows boot manager本身就是bootx64.efi};
2,        Efi固件肯定不是写在硬盘里的,如此肯定,是因为同学的傻多戴开机按f12有EFI boot选项,列出(由efi所搜寻?)所有efi启动项,同一磁盘甚至有2-3个EFI启动项,初步判定系统有个优于BCD的存在,默默管理着启动项,但不知这个机制是一个文件还是一串代码,它存储在哪里?(bgm38)(bgm38)
3,        就是在这个一片混乱的情况下,我安装了rEFInd,一个efi环境下的启动管理程序,安装方法是复制给esp分区一个文件夹,并用easyUEFI去添加启动项:{文件路径:\EFI\refind\refind_x64.efi},easyUEFI所修改的奇怪的东西就是问题2中的,emmm总之是添加进去了,我把它的优先级提到了windows boot manager之上,关了安全启动,一切正常。eEFInd可以引导linux发行版,win,黑苹果,我去它的配置文件看了看这是什么黑魔法,得到启动项的语法
例如:
menuentry "My Mac OS X" {
    icon \EFI\refind\icons\os_mac.png
    volume "OS X boot"
    loader \System\Library\CoreServices\boot.efi
    disabled
}

menuentry "Windows 7" {
    loader \EFI\Microsoft\Boot\bootmgfw.efi
    disabled
}
还有
menuentry Ubuntu {
    loader /EFI/ubuntu/grubx64.efi
    icon /EFI/refind/icons/os_linux.png
    disabled
}
看到这里我就很难过,因为和PhoenixOS生成的grub.cfg有那么一些不一样;
4,        PhoenixOS
凤凰系统,说到底还是Androidx86,它在自动安装过程中在ESP分区中写了一个PHOENIXOS文件夹,里面有启动所必须的内核文件还有一个我不清楚的initrd.img,phoenixos自建的grub配置文件的一部分是这样的:
menuentry "Phoenix OS" {
        search --file --set=root /EFI/PhoenixOS/kernel
        linux /EFI/PhoenixOS/kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 SRC=/PhoenixOS vga=788
        initrd /EFI/PhoenixOS/initrd.img
}
看到这里我就有点开心,甭管phoenixos是咋启动失败的,我都要试试我的复制粘贴大法于是这一段就顺理成章的grub.cfg->menu.lst(bgm38)
menuentry 'Phoenix OS' {
        icon \EFI\refind\icons\os_mac.png
            volume "OS X boot"
          set root=(hd1,gpt4)
linux /PhoenixOS/kernel root=/dev/ram0 androidboot.hardware=android_x86 quiet DATA= vga=788
initrd /PhoenixOS/initrd.img
boot
}
以上是我在rEFInd中发挥聪明才智写出来的,原理都不懂,不过安卓x86终于正常启动了,当时就没去深究;
5,导火索是学校发新书了,2016年出版的《Linux操作系统实用教程》竟然只提供MBR分区表硬盘的安装方法,而且给的办法一点都不解释明白,可以,这很百度经验= =,
诸位dalao,本萌新实在想弄懂GPT,grubfordos,refind,efi这几个东西之间的关系,确切的说是想要原理(甚至efi shell的),之后可以自由编写启动脚本,无奈百度不出,谷歌不懂,走投无路了(bgm42)
#2 - 2018-3-18 02:52
GPT是文件系统
GRUB是引导器
refind是引导器
EFI是主板上的系统

所以你在问什么(bgm38)
#2-1 - 2018-3-18 03:14
Lrolic.holic
嗯,具体是想问set root这个是怎么用的,和加载非eif文件所引导的Linux怎么手动引导(比如kernel xxx这几个指令怎么用)还有衍生出来的引导器的工作原理(引导器就是一个图形化的shell上的批处理还是本身是个被编译的efi程序...)(又说多了,我对这些事是懵逼的也不知道咋提问)
#2-2 - 2018-3-18 03:31
铃猫
Lrolic.holic 说: 嗯,具体是想问set root这个是怎么用的,和加载非eif文件所引导的Linux怎么手动引导(比如kernel xxx这几个指令怎么用)还有衍生出来的引导器的工作原理(引导器就是一个图形化的shel...
set root 是指定启动程序所在分区 set root='hd0,gpt2'
linux 内核路径 参数
initrd 内存镜像路径

引导器本身是汇编
#2-3 - 2018-3-18 09:54
Lrolic.holic
MagicFish1990一边吃草一边 说: set root 是指定启动程序所在分区 set root='hd0,gpt2'
linux 内核路径 参数
initrd 内存镜像路径

引导器本身是汇编
引导器原来是汇编大佬。。。怪不得找不到efi编辑器(bgm38)easyuefi所编辑的东西是个{文件}还是{mbr(类似)分区表}还是{bios}。。。这应该是最后的问题了(bgm38)
#2-4 - 2018-3-19 00:39
菜叶
GPT 是分区表不是文件系统
#2-5 - 2018-3-19 04:32
铃猫
菜叶 说: GPT 是分区表不是文件系统
脑抽(bgm38)
#2-6 - 2018-3-19 04:34
铃猫
Lrolic.holic 说: 引导器原来是汇编大佬。。。怪不得找不到efi编辑器easyuefi所编辑的东西是个{文件}还是{mbr(类似)分区表}还是{bios}。。。这应该是最后的问题了
UEFI分成2部分,一部分保存在BIOS里的参数(一般是默认引导文件,可选),另一部分是EFI分区里的文件。
所以它大概两个都编辑(bgm38)
#2-7 - 2018-3-19 09:37
LunarShaddow🌙
Lrolic.holic 说: 引导器原来是汇编大佬。。。怪不得找不到efi编辑器easyuefi所编辑的东西是个{文件}还是{mbr(类似)分区表}还是{bios}。。。这应该是最后的问题了
我一般是用efibootmgr来捣鼓UEFI的启动项
bcd和grub2都是装载/boot/efi/EFI/里的(这其实就是那个efi分区)
UEFI启动时候会找到第一个EFI分区,然后就读里面的文件夹
我一般不用grub4dos的
#2-8 - 2018-3-25 12:28
Userbot
200円一次
#2-9 - 2018-3-25 14:44
铃猫
NASA 说: 200円一次
先来一万円的(bgm108)
#3 - 2018-3-19 00:02
(Q, Σ, Γ, δ, q0, Z0, F)
在surface 上装linux吗?
#3-1 - 2018-3-21 09:39
Lrolic.holic
linux自动安装的那个镜像不起作用,不知道是不是个例
#3-2 - 2018-3-21 12:13
fantasy
Lrolic.holic 说: linux自动安装的那个镜像不起作用,不知道是不是个例
自动安装?
#3-3 - 2018-3-23 15:46
Lrolic.holic
fantasy 说: 自动安装?
做成镜像自己安装的那个
#4 - 2018-3-19 08:29
(那谁谁家那小谁)
不同的bootloader的语法当然是不一样的……只是长得像而已……
uefi我就没用过grub了……现在用的是systemd-boot……
#4-1 - 2018-3-21 09:42
Lrolic.holic
长得像可以用,撸好了先用着。。等换电脑。。
#5 - 2018-3-19 09:37
(BGMのTrinitas<=>婊冈妈<=>补冈妈<=>拜冈妈 三位一体 ...)
现在grub还在用吗?
#5-1 - 2018-3-19 09:41
LunarShaddow🌙
大部分distro的默认安装还是会装上grub的,毕竟grub有shim,不需要关闭secureboot,否则你得手工导入那个发行版的公钥了
#5-2 - 2018-3-19 10:32
lhb5883-吹冈王♛⑩
LunarShaddow 说: 大部分distro的默认安装还是会装上grub的,毕竟grub有shim,不需要关闭secureboot,否则你得手工导入那个发行版的公钥了
我一般都是去关掉的(bgm38),不过苏菲似乎关不掉?
#5-3 - 2018-3-19 15:09
LunarShaddow🌙
lhb5883-污喵王VIP⑩ 说: 我一般都是去关掉的,不过苏菲似乎关不掉?
嘛,发行版都是为了最大兼容性考虑啦(bgm24)
#5-4 - 2018-3-21 09:43
Lrolic.holic
lhb5883-污喵王VIP⑩ 说: 我一般都是去关掉的,不过苏菲似乎关不掉?
苏菲可以关,只是开机背景变成红色。。慎得慌(bgm38)
#5-5 - 2018-3-21 10:06
lhb5883-吹冈王♛⑩
Lrolic.holic 说: 苏菲可以关,只是开机背景变成红色。。慎得慌
想起来了,是没有CSM启动,只能UEFI Boot(bgm38)
#6 - 2018-3-19 09:56
(Death is the gateway to Eternity, my dear.)
从我的知识来看,
1. /EFI/BOOT/bootx64.efi是默认的引导器(它是什么都可能),当主板NVRAM里啥条目都没写的时候使用;微软的BCD在/EFI/MICROSOFT/BOOT/BCD里
2. 启动条目信息存在主板NVRAM里,有一次我的主板发抽根本保存不了EFI引导项,重刷固件刷好的;如果主板没有写,有时会扫描EFI分区
3. refind和winbcd和grub(或它的shim)是同一个层级,都是引导器
4.1. initrd是initial ram disk的简称,在kernel载入的同时载入到内存里,代替你真正的/提供驱动(因为很有可能你的root partition通过iscsi/pxe/奇怪的设备载入,驱动如果在奇怪的设备上,那不就死循环了);如果你是量身定制的系统(Gentoo/LFS),可以直接把本机要用的驱动编译到kernel里,就不用initrd了;但是发行版如果把所有驱动打进去,内核就太大了……
4.2. 有关语法,请RTFM https://www.gnu.org/software/gru ... dboot-manual-config
5. 通常来说,请不要信中文书,尽量看原文(或译作);教材的时效性实在是不敢恭维(比如谭浩强)
PS. 如果想弄懂系统启动原理,可以尝试自己编译一个LFS出来,当然,不要用寨板,请用PC
#6-1 - 2018-3-21 09:45
Lrolic.holic
谢谢谢谢,走心的解答;过几天我给我的新本子设置好回来就研究这些(bgm38)
#7 - 2018-3-21 10:25
(你的爱还不够啊!)
从来都是 refind 自动发现启动项的路过(bgm38) menuentry 写不来的
#8 - 2018-3-25 11:37
(考前记一记,喝前摇一摇)
所以楼主的问题解决了吗
#9 - 2018-3-25 11:42
Surface Pro3 i5版 装linux好用不?下学期得上计算机系统课,估计要被强装linux了