seteuid0's blog
Themed by Diary.
ubuntu下initramfs相关内容记录

为了适应不同的运行环境,Linux发行版的启动基本都分为两个阶段,第一阶段使用initramfs文件系统,加载所需要的硬件驱动、文件系统驱动等;当完成根文件系统挂载后执行chroot,进入真实的文件系统。 initramfs类似与一个极其简化的文件系统,里面包含了系统启动时驱动的最小集合,这样使得initramfs的体积尽可能的变小。但不同发行版本的initramfs中内容的制作方式不尽相同,例如在fedora、rhel、centos的版本中,使用dracut工具包来生成相对应的initrd,而在ubuntu系统中使用initramfs-tools工具包所提供的相关工具。 当安装内核、内核升级的时候,内核的postinst脚本会在安装结束后调用update-initramfs工具更新相关的initramfs文件。查看update-initramfs文件发现,其主要调用mkinitramfs来完成相关操作。 update-initramfs与mkinitramfs文件都是BASH脚本文件,mkinitramfs文件基于事先约定的规则拷贝相关的程序、库、脚本、配置等到特定的目录,然后打包成initramfs格式的文件。mkinitramfs文件会引用/usr/share/initramfs-tools/hook-functions中事先约定好的函数,例如copy_exec可以完成二进制程序的拷贝,同时拷贝该程序所以来的动态库。/usr/share/initramfs-tools/scripts/目录中存放着生成initramfs中所需要的脚本。 修改//usr/sbin/mkinitramfs或者其他相关的内容,自己重新生成一个initramfs文件和之前的对比下,就可以看到效果。 例如:mkinitramfs -o test.img即可使用当前运行的内核版本生成一个对应的initramfs文件。 initramfs-tools软件包中除了mkinitramfs、update-initramfs工具外还有lsinitramfs等工具来帮助用户进行操作。 当然,最后生成的initramfs.img文件只是一种打包好的文件而已,方便grub加载及运行,我们也可自行进行解压、修改、再打包。 命令大致如下: 解压:zcat in.img |cpio -dium 打包:find . |cpio -H newc -o |gzip -9 > out.img