不使用 initramfs,如何启动 Linux

2018-10-28 19:43:50 +08:00
 station

我之前问题帖子有人说到来了无 initramfs/initrd

受启发我找到了 https://www.zhihu.com/question/30599860/answer/49143877

我用 efi-stub 代替 grub

裁剪的内核基础驱动(硬盘驱动,文件系统)和一些硬件驱动都编译进内核了

我也知道是错误问题是 root device,但找不到头绪

5644 次点击
所在节点    Linux
55 条回复
station
2018-10-28 23:00:18 +08:00
@henglinli 看来是卡在 init 上。。。。
xivisi
2018-10-28 23:07:34 +08:00
@station 如果用的 systemd 需要在启动时,配置内核参数,init 路径
flynaj
2018-10-28 23:29:05 +08:00
自己编译本机内核就行,openwrt 一直就没有 initramfs
likuku
2018-10-28 23:34:53 +08:00
@station [最后,选择性可以把 /etc/fstab 里其它分区也都按 /dev/sda1 / 类似的格式]

既然 kernel 已经直接用了 root=/dev/sda1 之类,
那么 /etc/fstab 里也要用类似写法替换掉原有的 UUID / Labe 命名方式

若所有分区都加载正常,那么无视之。
henglinli
2018-10-28 23:35:00 +08:00
@station 估计他把我给的例子直接照搬了。

@station 解释下 /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 系统的拷贝。
wwhc
2018-10-29 00:05:37 +08:00
如果楼主用 Gentoo,建议不要使用 systemd,Gentoo 有更好的选择:OpenRC
station
2018-10-29 07:13:01 +08:00
@likuku 我想我应该理解你的意思了:

现在提示我找不到 init: /usr/lib/systemd/systemd,我想应该是其他分区没挂载

正如 @henglinli l 说的 partuuid 兼容性更好,而 fstab 默认是 uuid,而一楼说了 uuid 是由 initramfs 中的用户空间识别

我想在的环境是 centos/fedora,编译的内核是采用 CONFIG_CMDLINE 来传递参数

晚上试试
likuku
2018-10-29 10:55:49 +08:00
@station fstab 默认是 UUID ... 三十年河东,三十年河西... 变化真得大。的确 UUID 很方便,尤其弄个 U 盘上跑的系统。
station
2018-10-29 17:08:55 +08:00
@cattyhouse 给个关键词呗😬
henglinli
2018-10-29 17:48:44 +08:00
@likuku fstab 没有默认选项,那是发行版自动识别出添加的。变化大的事启动挂在文件系统时 systemd.mount 取代了 fstab。之所以 fstab 配置能起作用,是因为 systemd.mount 会读取并转换它。当然 mount 任然在使用 fstab。system 做了太多,所以有人开始害怕它,于是出现了 devuan without-systemd.org
station
2018-10-29 18:06:21 +08:00
@henglinli 感谢科普
likuku
2018-10-29 20:04:00 +08:00
@henglinli systemd 流行起来也没多少年,就这么快遭人害怕了...
station
2018-10-29 20:19:37 +08:00
@henglinli @likuku @flynaj 要死啦

我一直卡在这
centos,标准分区,对比了下其他内核启动是快速闪过的画面,似乎是其他分区没挂在?
https://s1.ax1x.com/2018/10/29/i28DDf.png
station
2018-10-29 20:22:28 +08:00
google 也没有找到相关的,还是我的关键词不对?加了金不国的 QQ,在等回复
henglinli
2018-10-29 20:38:00 +08:00
@station 你先确定下你使用的 CentOS 版本是否使用了 systemd。一般情况下不需要指定 init。默认 init 是 /sbin/init,我猜测任何发型版本都会有这个文件,叛徒 Android 除外,它是 /init。
station
2018-10-29 20:45:20 +08:00
@henglinli centos 7 默认 init 是 systemd 啊,/sbin/init 也试过也是卡在这边。。。。。。。
henglinli
2018-10-29 20:48:31 +08:00
@likuku 我可能说过了,应该说担心吧。
henglinli
2018-10-29 20:54:24 +08:00
@station 提供更多信息。包括并不限于 bootloader 配置,cmdline .config。然后 google 一下有 error 的那一句。很少有人碰到别人没有碰到的问题。
station
2018-10-29 21:36:32 +08:00
@henglinli 首先感谢你这么不厌其烦的帮助我这个菜鸟,直接把.config 发你吧

https://pan.baidu.com/s/1-XThPssbBv3jl-GXpojEmw
station
2018-10-29 21:46:35 +08:00
那句话,Google 了下没看到希望,,应了你那叫:很少有人碰到别人没有碰到的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501949

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX