linuxinitrd
1. linux开机 | initramfs、initrd、systemd、kernel等
开机过程中的初始化文件系统(initramfs)与initrd、systemd和kernel之间的关系以及它们在Linux系统启动中的作用。当系统处于hibernation状态时,initramfs从该状态恢复到可以正常使用的状态。如果在安装另一操作系统后,swap分区的UUID发生变化,可能会出现一些提示信息,但通常并不需要干预。默认情况下,initrd会指定当前的swap分区作为resume分区,通过设置RESUME变量可以覆盖这种行为。
休眠和唤醒的概念在此上下文中涉及到从hibernation状态恢复到系统可以正常运行的过程。CPio(Copy In and Out)文件格式在系统启动时用于复制文件和目录。initramfs文件系统在系统启动时加载根文件系统,它是一个包含了用于引导内核的根文件系统镜像的压缩cpio存档。
initramfs工具管理和监控本地机器上的initramfs映像,包括创建、更新或删除操作。update-initramfs命令调用mkinitramfs来根据所需参数管理initramfs。initrd盘(初始化RAM盘)在引导加载程序加载内核之前初始化为读取只写块设备,用于在引导过程中加载额外模块和启动根文件系统。
initrd.img-5.4.0.89-generic文件中的“5.4.0.89”代表Linux内核的版本号,与ubuntu版本不完全一致。此文件的发布日期和系统实际更新日期之间的差异可能需要特定的操作来处理,如使用linux-update-symlinks命令更新损坏的软链接,或者确认grub BootLoader在其他地方查找旧内核的信息。
对于查看安装的内核版本,可以使用特定的命令,如在ubuntu 20.04下执行“linux-version list”。内核文件,如/boot/initrd.img*,在某些情况下可以删除并重新生成,以确保系统的稳定运行。
在Linux内核的演变中,从早期的vmunix和vmlinux到后来的vmlinuz,名称保持不变,尽管压缩功能等特性已被添加。init和systemd在系统管理和启动中扮演了关键角色,其中systemd提供了系统和服务管理器,具有并行化能力,使用socket和D-Bus激活来启动服务,以及在需求时启动守护进程。
systemctl命令用于控制systemd系统和管理器,尽管在新应用程序中不再推荐使用。Upstart作为一种历史性的进程管理工具,在Linux系统中已被systemd所取代,尽管它曾提供异步服务启动,减少了Linux系统的启动时间。
重启(reboot)与hibernate或睡眠后恢复(resume)的概念有所不同。禁用resume功能后,系统可以正常启动但无法hibernate,这可以通过在initramfs配置中添加“RESUME=none”来实现。重启通常通过调用shutdown -r命令来完成。
2. initrd和initramfs的区别是什么
Initrd 的英文是 initial ram disk,initi指linux的初始阶段,ram disk指RAM 盘。initrd文件中包含各种可执行程序和驱动程序。在嵌入式Linux系统中,initrd 就是最终的根文件系统。
initramfs:init ram filesystem,它是一个cpio格式的内存文件系统。现在的 initramfs 是一个 gzip 压缩的 cpio 文件系统打包。遇到特殊情况时,可建立一个临时目录,解压initramfs,再直接解压 cpio -idv,改之后再用 cpio 和 gzip 封上。其工作方式更为简单直接,启动时加载内核和 initramfs 到内存执行,内核初始化之后,切换到用户态执行 initramfs
的程序/脚本,加载需要的驱动模块、必要配置等,然后加载 rootfs 切换到真正的 rootfs 上去执行后续的 init 过程。
现在所说的initrd都指的是 initramfs 。因为initrd 是2.4 及更早的用法,运行过程大概是内核启动,执行一些 initrd 的内容,加载模块啥的,然后交回控制权给内核,最后再切到用户态去运行用户态的启动流程。