ramdisk_size 设定过小导致 initrd 无法使用进而系统挂死问题

ramdisk_size 是什么?

从内核的 Documentation 目录中找到如下相关信息:

Field name: ramdisk_size
Type:       write (obligatory)
Offset/size:    0x21c/4
Protocol:   2.00+

  Size of the initial ramdisk or ramfs.  Leave at zero if there is no
  initial ramdisk/ramfs.

这个 ramdisk_size 表示的是 ramdisk 或 ramfs 的大小,它是以 kbytes 为单位的。

扩展 initrd 时的问题

最近搞某些问题时需要扩展现有的 initrd,向其中添加一些必要的命令与动态库,于是就按照标准的流程搞了搞,在扩展完成后也使用 chroot 测试了下命令能够正常执行。

确认没有问题后,备份机器上正在使用的 initrd,然后使用新的 initrd,启动系统后发现系统挂死了

排查过程

一开始怀疑是制作的 initrd 文件内容有问题,再次确认后检查 md5 也是正确的。重新复制到 cf 卡中,重启系统后仍旧挂死

恢复旧的 initrd 后,系统正常引导,很明显应该是新的 initrd 文件的问题

仔细琢磨了下,注意到了 grub 引导的配置文件——grub.conf 中对 ramdisk_size 的配置项目。

原来是 15M,现在由于我扩充了 initrd,15M 已经不够了,这就导致了问题。

解决方案

将 grub.conf 中 ramdisk_size 的配置调整为大于当前 initrd 的值后,重新引导系统这次正常了!

存在的问题

出现问题的内核是 3.10 的内核,我在 4.19 的内核中尝试复现这个问题,没有复现出来,怀疑可能是 cmdline 有区别,或者高版本的内核与老版本内核的处理逻辑不同了,有时间研究下内核解压 initrd 这部分的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值