我之前问题帖子有人说到来了无 initramfs/initrd
受启发我找到了
https://www.zhihu.com/question/30599860/answer/49143877
我用 efi-stub 代替 grub
裁剪的内核基础驱动(硬盘驱动,文件系统)和一些硬件驱动都编译进内核了
我也知道是错误问题是 root device,但找不到头绪

要使用 uuid5 来指定根,恐怕 initramfs 少不了,印象中这是 initramfs 里的用户空间程序识别的,不使用 initramds 只有指定 /dev/sdxy 这种了,或者试试 /dev/disk/by-uuid/xxxxx 这种?
它下面不是列出了识别出来的分区 UUID 了吗,没有你指定的那个,要么你指定的 UUID 所需要的驱动没有,所以没找到,要么你指定的 UUID 是错的,你看它列出来的 ID 哪个是你的 root 分区,改成那个
编译内核把驱动加进去
启动 linux 连 bootloader 都可以不要,直接 UEFI Shell

root device 可以了 但现在又卡住了,看上一楼回复图片
root 分区所使用的文件系统一定要 builtin,否则得用 initramfs。
使用内核参数 root=PARTUUID=更好,兼容 说的那种。使用 blkid | grep sda2 获取。
bootload 建议用 systemd-boot。多数系统都使用 systemd 了,估计也会自带 systemd-boot。
我的 /etc/kernel/cmdline
root=PARTUUID=f0db77e4-6f83-4c85-b6d7-135c9b0582c9 rw rootfstype=btrfs rootflags=subvol=exherbo,autodefrag,compress=lzo init=/usr/lib/systemd/systemd
把 init 换成 sh 启动试下吧,不知道是不是 init 卡住了
想起以前玩 gentoo 时候的经验了,也是不用 EFI,不用 UUID
确保:
内核里 把正确的硬盘控制器编进去 y 而非 m,
内核里 把 kernel 和 root 所在分区的文件系统编进去 y 而非 m
引导工具 (不确定你使用 grub ) 里,所在的分区要写对,
假若是 GRUB 里是这么写: kernel(hd0,0) 代表 sda1 设备和分区都从 0 开始,告诉 GRUB kernel 所在的分区
kernel 后面的 root=/dev/sda1 这么写,是让 kernel 完成加载后,传递给 kernel 的参数,让 kernel 找到 /
若以上都可以正常工作,那么 / 已经就可以载入了。
最后,选择性可以把 /etc/fstab 里其它分区也都按 /dev/sda1 / 类似的格式写,不要用 UUID
还在试
接这张图真费劲 https://s1.ax1x.com/2018/10/28/igeQHI.png
确定下 /usr/lib/systemd/systemd 是否存在吧,error -2 的意思是文件不存在
存在是肯定的
换成 sh 也是同样的问题,估计是挂载问题吧
/usr/lib/systemd/systemd 提示找不到文件,看 10 楼图
最后,选择性可以把 /etc/fstab 里其它分区也都按 /dev/sda1 / 类似的格式写 这个怎么讲
这是我的例子啊。你的 init 是什么要看发行版或者管理员原配置。一般情况下不指定 init 或者使用 /sbin/init。
发现你使用的是 xfs,已经挂载上了。这个搞定之后,建议你在折腾下安全启动,给 bootloader kernel 都签下名。
我目前就没有用 initramfs
gentoo
应该无关签名和安全启动,之前编译的使用了 initramfs 和 efi-stub 的都能启动
我也没用 initramfs 而且所有模块 builtin,包括网卡和蓝牙的固件。
可惜前不久电脑意外断电就再也不行了。
没说有关啊。给他进一步折腾找个新路。也可以装下黑苹果。
看来是卡在 init 上。。。。
如果用的 systemd 需要在启动时,配置内核参数,init 路径
自己编译本机内核就行,openwrt 一直就没有 initramfs
[最后,选择性可以把 /etc/fstab 里其它分区也都按 /dev/sda1 / 类似的格式]
既然 kernel 已经直接用了 root=/dev/sda1 之类,
那么 /etc/fstab 里也要用类似写法替换掉原有的 UUID / Labe 命名方式
若所有分区都加载正常,那么无视之。
估计他把我给的例子直接照搬了。
解释下 /etc/kernel/cmdline,这些都是 kernel 的参数,不是 initramfs 的参数。多数 bootloader bootmanager 把这二者的参数放到一个配置项目中,比如 systemd-boot 的 option 项。把该 cmdline 配置到 linux 内核里面就可以不经过 bootloader 而是由 uefi 固件直接引导 linux 内核。编译安装 linux 内核的时候的 make install 以及 dracut 都会用到它。
root=PARTUUID=f0db77e4-6f83-4c85-b6d7-135c9b0582c9 指定根文件系统类型。
rw 默认是文件系统以 r 只读形式挂载,设置成 rw 就可以不用配置 /etc/fstab 以及更为现代的 systemd 的.mount 了。
我配置成 rw 是认为这样要快一点,而且我使用的 btrfs 更本不需要启动时候 fsck,没必要设置成只读。
rootfstype=btrfs 指定文件系统类型,如果不设置内核会自己尝试支持的文件系统。
rootflags=subvol=exherbo,autodefrag,compress=lzo 我只在过用 zfs 和 btrfs 时候会配置这个参数。
init=/usr/lib/systemd/systemd 我的 rootfs 是 btrfs 的一个子卷,我觉得不用 /sbin/init 这个软连接,而直接使用 /usr/lib/systemd/systemd 要快一点。而且我使用的发现版他就是把 systemd 放到这个位置,而不是 gentoo 的 /usr/sbin/systemd (没记错的话)。我估计其他发现版本都会有 /sbin/init 这个软链接或者其他 init 系统的拷贝。
如果楼主用 Gentoo,建议不要使用 systemd,Gentoo 有更好的选择:OpenRC
我想我应该理解你的意思了:
现在提示我找不到 init: /usr/lib/systemd/systemd,我想应该是其他分区没挂载
正如 l 说的 partuuid 兼容性更好,而 fstab 默认是 uuid,而一楼说了 uuid 是由 initramfs 中的用户空间识别
我想在的环境是 centos/fedora,编译的内核是采用 CONFIG_CMDLINE 来传递参数
晚上试试
fstab 默认是 UUID ... 三十年河东,三十年河西... 变化真得大。的确 UUID 很方便,尤其弄个 U 盘上跑的系统。
给个关键词呗