Linux Boot Process

Linux Boot Process

Refer:

Linux系统的启动流程分为几个阶段

  1. BIOS(这里是指从按开机键开始,至系统开始执行至BIOS阶段),这里一般是由硬件决定的。BIOS开始读取磁盘扇区MBR,引导bootloader(grub,grub2,LILO…)(stage 1)

  2. grub自引导,加载core.img(stage 1.5)

  3. grub加载kernel,kernel完成自解压,并启动systemd,老系统(非systemd启动)为init(stage 2)

  4. kernel将initrd解压并加载至内存,initrd的任务是完成平时使用的real rootfs系统的挂载

    real rootfs:我们平时所使用的Linux,在上完成编码等内容的环境

  5. switch_root real rootfsunmount initrd,完成real rootfs中的系统加载

initrd

在前面,我们提到了initrd,内核加载initrd并完成real rootfs地挂载。

那么现在的问题是

  • initrd具体是什么
  • 它如何完成real rootfs的挂载
initrd是什么?

Initial ramdisk – Wikipedia

一般情况下,我们不用了解initrd,甚至在使用Linux开发这么久后,相信很多人和我一样根本不知道它的存在。

initrd其实是一个完整的操作系统,包含完整的文件系统,以及系统运行所需的基础依赖。也即我们可以在initrd中完成任何在real rootfs环境中可进行的操作。

initrd可以干什么?

因为它是一个完整的Linux系统,所以大部分Linux系统基础命令都可以执行。

这里提一个实用的操作,如果我们忘记了系统的root登陆密码,那么我们可以通过此种方式重置密码。

在grub未设置的密码的情况下(默认不设置密码),我们可以通过在grub2.cfg中内核启动项添加命令行参数,直接进入initrd中,并对real rootfs挂载,通过chroot切换至real rootfs完成密码修改,具体可参考[这篇文章](rhel – How can we change root password? – Unix & Linux Stack Exchange)和[这一篇](How to Reset Forgotten Root Password in Ubuntu (tecmint.com))

initrd与real_rootfs的区别

initrd和real_rootfs都是完整的Linux系统,但initrd的空间特别小,大概就200M左右(仅包含kernel和系统基础命令),而real_rootfs的大小由我们的使用而定,它包含了我们的开发环境,业务环境等。

现在的疑问是,既然都是完整的Linux系统,为何不直接使用real_rootfs,反而需要initrd这一步而多此一举。

这里,需要说明一些被忽视的内容。

  1. initrd被kernel加载至内存中,(内存的大小肯定比real_rootfs的空间更小)

  2. 内核中的驱动仅能启动大部分硬件,如果我们需要启动其他硬件,则需要留出一个阶段,允许我们进行操作。

    假设:我们是以NFS的方式启动Linux,那么我们需要保证network是通畅的,这里需要做一些准备工作。

initrd和initramfs

initrd其实分为两种:initrdinitramfs
https://stackoverflow.com/questions/10603104/the-difference-between-initrd-and-initramfs

如何制作initrd

系统的进程管理有两种方式initsystemdsystemd是目前大多数的Linux发行版所采用的进程管理方式。因为之前的系统大多采用init的方式,故systemd做了向下兼容,可将init中控制脚本的rc*.d转为systemd的方式运行,当然,经过太多前人踩坑后,基本能够顺利执行了,具体可参看链接:

systemdinit间还有些轶闻,可以参看:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708

systemd与init的区别

Minimal Linux with kernel and BusyBox: /etc/inittab is ignored, only /init is executed – Unix & Linux Stack Exchange

如何启动initrd
initrd的启动流程

Linux 的启动流程 – 阮一峰的网络日志 (ruanyifeng.com)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注