我之前问题帖子有人说到来了无 initramfs/initrd
受启发我找到了 https://www.zhihu.com/question/30599860/answer/49143877
我用 efi-stub 代替 grub
裁剪的内核基础驱动(硬盘驱动,文件系统)和一些硬件驱动都编译进内核了
我也知道是错误问题是 root device,但找不到头绪
1
Osk 2018-10-28 19:57:48 +08:00 via Android
要使用 uuid5 来指定根,恐怕 initramfs 少不了,印象中这是 initramfs 里的用户空间程序识别的,不使用 initramds 只有指定 /dev/sdxy 这种了,或者试试 /dev/disk/by-uuid/xxxxx 这种?
|
2
choury 2018-10-28 19:58:40 +08:00
它下面不是列出了识别出来的分区 UUID 了吗,没有你指定的那个,要么你指定的 UUID 所需要的驱动没有,所以没找到,要么你指定的 UUID 是错的,你看它列出来的 ID 哪个是你的 root 分区,改成那个
|
3
rock6y 2018-10-28 20:01:13 +08:00 via Android
编译内核把驱动加进去
|
4
cattyhouse 2018-10-28 20:34:12 +08:00 via iPhone
启动 linux 连 bootloader 都可以不要,直接 UEFI Shell
|
5
station OP @choury ![igEKun.png]( https://s1.ax1x.com/2018/10/28/igEKun.png)
|
7
henglinli 2018-10-28 21:05:37 +08:00
root 分区所使用的文件系统一定要 builtin,否则得用 initramfs。
使用内核参数 root=PARTUUID=更好,兼容 @cattyhouse 说的那种。使用 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 |
9
likuku 2018-10-28 21:33:46 +08:00
想起以前玩 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 |
10
station OP |
11
choury 2018-10-28 22:21:56 +08:00
@station #10 确定下 /usr/lib/systemd/systemd 是否存在吧,error -2 的意思是文件不存在
|
15
station OP @likuku 最后,选择性可以把 /etc/fstab 里其它分区也都按 /dev/sda1 / 类似的格式写 这个怎么讲
|
16
henglinli 2018-10-28 22:42:44 +08:00
@station 这是我的例子啊。你的 init 是什么要看发行版或者管理员原配置。一般情况下不指定 init 或者使用 /sbin/init。
发现你使用的是 xfs,已经挂载上了。这个搞定之后,建议你在折腾下安全启动,给 bootloader kernel 都签下名。 |
17
xivisi 2018-10-28 22:42:56 +08:00
我目前就没有用 initramfs
gentoo |
19
henglinli 2018-10-28 22:49:26 +08:00
@xivisi 我也没用 initramfs 而且所有模块 builtin,包括网卡和蓝牙的固件。
可惜前不久电脑意外断电就再也不行了。 |
23
flynaj 2018-10-28 23:29:05 +08:00 via Android
自己编译本机内核就行,openwrt 一直就没有 initramfs
|
24
likuku 2018-10-28 23:34:53 +08:00
@station [最后,选择性可以把 /etc/fstab 里其它分区也都按 /dev/sda1 / 类似的格式]
既然 kernel 已经直接用了 root=/dev/sda1 之类, 那么 /etc/fstab 里也要用类似写法替换掉原有的 UUID / Labe 命名方式 若所有分区都加载正常,那么无视之。 |
25
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 系统的拷贝。 |
26
wwhc 2018-10-29 00:05:37 +08:00
如果楼主用 Gentoo,建议不要使用 systemd,Gentoo 有更好的选择:OpenRC
|
27
station OP |
28
likuku 2018-10-29 10:55:49 +08:00
@station fstab 默认是 UUID ... 三十年河东,三十年河西... 变化真得大。的确 UUID 很方便,尤其弄个 U 盘上跑的系统。
|
29
station OP @cattyhouse 给个关键词呗😬
|
30
henglinli 2018-10-29 17:48:44 +08:00 via iPhone
@likuku fstab 没有默认选项,那是发行版自动识别出添加的。变化大的事启动挂在文件系统时 systemd.mount 取代了 fstab。之所以 fstab 配置能起作用,是因为 systemd.mount 会读取并转换它。当然 mount 任然在使用 fstab。system 做了太多,所以有人开始害怕它,于是出现了 devuan without-systemd.org 。
|
33
station OP @henglinli @likuku @flynaj 要死啦
我一直卡在这 centos,标准分区,对比了下其他内核启动是快速闪过的画面,似乎是其他分区没挂在? https://s1.ax1x.com/2018/10/29/i28DDf.png |
34
station OP google 也没有找到相关的,还是我的关键词不对?加了金不国的 QQ,在等回复
|
35
henglinli 2018-10-29 20:38:00 +08:00
@station 你先确定下你使用的 CentOS 版本是否使用了 systemd。一般情况下不需要指定 init。默认 init 是 /sbin/init,我猜测任何发型版本都会有这个文件,叛徒 Android 除外,它是 /init。
|
36
station OP @henglinli centos 7 默认 init 是 systemd 啊,/sbin/init 也试过也是卡在这边。。。。。。。
|
38
henglinli 2018-10-29 20:54:24 +08:00
@station 提供更多信息。包括并不限于 bootloader 配置,cmdline .config。然后 google 一下有 error 的那一句。很少有人碰到别人没有碰到的问题。
|
39
station OP |
40
station OP 那句话,Google 了下没看到希望,,应了你那叫:很少有人碰到别人没有碰到的问题
|
41
henglinli 2018-10-30 00:12:30 +08:00 via iPhone
@station 就差一点了。看图片应该时 init 找不到。你可以 mount 到另外的虚拟机上看看 init 究竟是在什么位置?我当年装 gentoo 时候可是把 gentoo.org 上到安装相关文档都读了的,要有耐心。没有百度账号不能下载百度云盘的文件,最近百度才改的。/sbin/init 也不行的原因可能是这是个符号链接,能确定 /usr 和 /是同一个分区吗?
|
42
wwhc 2018-10-30 04:24:28 +08:00
楼主用其它系统挂载后查看硬盘分区到底是怎么回事:
lsblk -o +fstype,label,uuid,partuuid |
44
station OP lrwxrwxrwx. 1 root root 22 10 月 20 08:56 /sbin/init -> ../lib/systemd/systemd
.. 这是? |
45
station OP ‘".. " 这是?
|
46
station OP CONFIG_CMDLINE="root=PARTUUID=c0fb10a1-884b-412a-a5ee-198e7ff9d157 rootfstype=xfs rw LANG=zh_CN.UTF-8 init=/usr/lib/systemd/systemd
|
47
station OP |
48
likuku 2018-10-30 17:44:05 +08:00
@henglinli Gentoo 嘛...想起来当年刚参加工作,上工第二天,对口同事就手把手教我如何快速安装(现成 gentoo 用 tar 打的包,自带内核源码),简单直接粗暴,10 分钟装完,然后启动时让前辈尴尬了...找不到硬盘控制器。好在一起合作 livecd 下重编了内核,把硬盘控制器驱动加进去就 OK 了,还是蛮顺利的。那时还是 2007 年,systemd 似乎还没有。
|
49
likuku 2018-10-30 17:47:08 +08:00
@station
[CONFIG_CMDLINE="root=PARTUUID=c0fb10a1-884b-412a-a5ee-198e7ff9d157 ] 这段试试改成 /dev/sda1 之类风格的吧。 死马当活马医:/etc/fstab 也编辑下,改为 /dev/sdaNumber /mountPoint 这样类似 风格的吧。 |
50
henglinli 2018-10-30 18:01:12 +08:00 via iPhone
@station 首先挂在其他分区是由 systemd 执行的,所以要确保更分区下有 systemd 能顺利执行的所有文件资源,万一 systemd 需要 /usr 呢?
(然后我觉得得自己确认下。我估计引导一个..都不明白的有点新手的方式应该再浅显一定,就找到了这个 https://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken/ 。我没有看完,但是看标题我知道你应该把 /usr 和 /合并,即使不能解决你当前这个问题。) 既然觉得自己不需要 initramfs,它做了什么想必你也知道些。说一下我对分区的认识。很久以前磁盘空间是很小的,以至于一个 /下面需要很多磁盘。分区组织的由管理员规划,/usr 一个盘、/硬盘。万一需要 1 万个呢?管理员这么玩估计有点慌,在他慌之前就应该有 lvm 了,现在是 lvm2,估计没 lvm3 了。因为已经有支持分卷功能的文件系统。比如 btrfs,磁盘空间不够了,你给再他加一个盘就完了。后面的事它会处理。 这也是我喜欢 btrfs 的原因之一。最后,磁盘空间不够的情况下再考虑分区,做到用户 /home 和系统 /分区就够了。 |
51
henglinli 2018-10-30 18:08:56 +08:00 via iPhone
@likuku 我用了很久,不喜欢他一点是,如果 portage 出问题还得会 python,很无助 google 后“重装”了好几次。当然 gentoo 的重装有点不一样。
|
52
henglinli 2018-10-30 18:12:51 +08:00 via iPhone
#50 补充,有没有 lvm1,其实我也不知道。接触到过这玩艺儿,但是没有实质去了解过。lvm2 万一是 lvmm 的意思我就尴尬了。特此补充。
|
53
likuku 2018-10-30 18:38:00 +08:00
@henglinli 独立 / 分区,和其它 /home /usr /var 什么 分开,个人用户其实无所谓,大不了 liveCD 或者拆硬盘去修,
服务器就比较麻烦,只用一个 / 的话,有可能突发暴增的 log 阿,core dump 什么 直接爆破 / , 然后系统就死了,远程修起来就很烦了。 gentoo 也滚死过好几次,portage 也搞死过,有次是直接从官网的 stage3 里 /其它同版本还在跑的服务器上 提取的,直接在线 复制替代,lib 什么搞的灾难不够猛时,这么救还是很大机会可以救回来。LiveCD 搭配 tar 自己作包,来快速安装,会玩之后,应对几乎所有 Linux 发行版都 OK。 btrfs 这个真得踩坑好几次,至今还是有些怕。 |
54
station OP @likuku
@henglinli 关于没有挂载其他分区,这点之前从启动所提示的信息上我也想过,今天看到你们的回复,我重做系统和分区,将 /和 /usr 还是有其余必要的挂载点分在一个分区了,编译后成功启动了😀,这次踩坑虽然消耗较多的时间与精力但增加了我的知识积累,还是有所值 https://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken 这个有空细细读下 不知道 gentoo 是怎么做的,分区这块 |