Linux-initramfs

本文详细探讨了Linux内核启动时遇到的问题及其解决方案,重点关注了initramfs作为临时文件系统的作用。文章从ramdisk与ramfs的区别入手,深入讲解了initramfs的工作原理和查看、创建方法。同时,介绍了如何制作自己的initramfs以及进行Initramfs编程,为高级用户提供更深入的实践指导。
摘要由CSDN通过智能技术生成

 

1. 内核启动问题
2. 解决方案
2.1 ramdisk(比如initrd)
2.2 tmpfs(比如initramfs)
2.3 ramdisk vs ramfs
2.4 临时文件系统
2.4.1 观察tmpfs
2.4.2 Initramfs
2.4.3 查看initramfs
2.4.4 创建initramfs
2.5 Linux系统中的initramfs
2.6 cpio归档文件
3. 高级用户
3.1 制作自己的initramfs
3.2 Initramfs编程
3.3 使用更新的工具

1. 内核启动问题

当Linux内核引导系统时,它必须找到并运行第一个用户程序,通常称为“init”。(大多数较新的版本使用systemd作为默认init)
用户程序存在于文件系统中,因此Linux内核必须找到并挂载第一个(或“根”)文件系统才能成功启动。
通常,可用的文件系统列在文件 /etc/fstab 中,通过 mount 程序可以找到它们。但是 /etc/fstab 本身就是一个存储在文件系统中的文件。
找到第一个文件系统是鸡和蛋的问题,为了解决这个问题,内核开发人员创建了内核命令行选项“root =”,以指定根文件系统所在的设备。

二十年前,“root =”很容易解释。它可能是软盘驱动器,也可能是硬盘驱动器上的分区。(可用硬件设备及文件系统非常少,很容易指定)
现在,根文件系统可以在几十种不同类型的硬件上,文件系统也有几十种,甚至可以在RAID中分布在其中的几种硬件上。压缩,加密,环回挂载,存在与网络上等等情况。
新的硬件,新的文件系统,新的压缩,加密方法还会越来越多。

2. 解决方案

为了避免将如此多的特殊情况硬编码到内核中,使用了具有临时根文件系统的初始启动阶段 - 现在称为早期用户空间。此根文件系统可以包含用户空间帮助程序,它们执行硬件检测,模块加载和设备发现,以便安装真正的根文件系统。

2.1 ramdisk(比如initrd)

在2.4及更早版本上,主要使用ramdisk(比如initrd), 基于ram的块设备, 但由于模仿块设备,导致它是固定大小的内存块,需要像磁盘一样进行格式化和安装,(操作工具mke2fs,losetup)。需要文件系统驱动。这造成额外的开销,资源的浪费。固定的大小还不能扩展。

2.2 tmpfs(比如initramfs)

Rootfs是ramfs(或tmpfs,如果已启用)的特殊实例,具体表现比如Initramfs文件。
到2.6版本时期,Linus在缓存周围写了一个名为“ramfs”的小包装器,Ramfs是一个非常简单的文件系统,它将Linux的磁盘缓存机制(页面缓存和dentry缓存)导出为可动态调整大小的基于RAM的文件系统。
ramfs的一个缺点是你可以继续写入数据直到你填满所有内存,而VM无法释放它,因为VM认为文件应该写入后备存储(而不是交换空间),但是ramfs没有任何后备存储。
因此,只允许root(或可信用户)对ramfs mount进行写访问。

其他内核开发人员创建了一个名为“tmpfs”的改进版本.tmpfs(以前称为shmfs)基于启动时使用的ramfs代码,,但与ramfs不同,它支持交换较少使用的页面以交换空间以及文件系统大小和inode限制以防止内存不足的情况(默认为物理RAM的一半和RAM页面的一半)。
### 回答1: 这是一个Linux命令,用于更新initramfsinitial RAM file system)的镜像文件。它需要使用sudo权限来执行,以确保安全性和权限。执行此命令将更新initramfs文件,以便在系统启动时正确加载所需的驱动程序和文件系统。 ### 回答2: sudo update-initramfs -u 这是一个Linux命令,用于更新系统的initramfs镜像文件。initramfsinitram文件系统,是一个临时文件系统,在Linux系统启动时被挂载,用来在硬件启动时提供必要的文件系统支持,并加载在真正的根文件系统之前。在升级内核或更改硬件时,更新initramfs镜像文件是必要的步骤之一,以确保系统的正常启动。 在执行此命令之前,需要使用sudo以管理员权限运行。该命令使用update-initramfs工具,该工具可用于管理initramfs映像文件。通过 -u 选项,命令可以更新当前运行的内核的initramfs镜像文件。在执行此命令之后,系统将重新生成initramfs映像文件,并将其替换为旧版本。新的initramfs映像文件将包含所有必要的驱动程序和模块,以确保系统在启动时能够正常加载。 总之,sudo update-initramfs -u是一个必要的命令,用于更新系统的initramfs镜像文件,以确保系统在升级内核或更改硬件时能够正常启动。在执行此命令之前,需要以管理员权限运行。 ### 回答3: sudo update-initramfs -u 是一个Linux系统命令,其作用是更新Linux系统的初始化内存文件系统(initramfs)。initramfsLinux系统在引导过程中加载的临时文件系统,其包含必要的设备驱动程序、文件系统、网络支持以及其它一些用于引导的资源,以保证系统能够顺利启动。因此,更新initramfs非常重要,它可以解决一些引导过程中的问题。 具体来说,当系统内核中的某些模块或驱动程序被更新或安装之后,我们就需要更新initramfs来保证系统的正常启动。因为在Linux系统初始化过程中,内核会先加载initramfs中的驱动程序和模块,再进一步加载硬盘上的系统分区并启动系统。 使用sudo update-initramfs -u命令,会根据当前系统的配置重新生成initramfs,并将其存储在/boot目录下,以便引导时读取。这个命令也可以手动添加,对于自定义内核或者修改了系统配置文件的用户,可以在更新系统之前手动执行一次sudo update-initramfs -u,以确保系统可以正常启动。当然,这个命令也可以自动执行,例如当安装新的内核或更新驱动程序时,系统会自动执行该命令以更新initramfs。 总的来说,sudo update-initramfs -u 命令是一个非常重要的Linux系统命令,它可以保证系统可以正常启动,并且对于那些需要自行更新系统的用户来说也非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值