当前位置: 首页 > 面试题库 >

是否可以在不创建initrd映像的情况下引导Linux内核?

芮朗
2023-03-14
问题内容

据我了解,initrd是一个小图像,可以在RAM中加载。它用于引导带有所有可加载模块的完整内核。在此过程中,我们需要vmlinuz内核映像,它是bzImage的重命名版本。

是否可以在不创建initrd映像的情况下引导内核?


问题答案:

initrd /
initramfs是可选的,不是必需的。bzImage是纯内核映像,可以由引导加载程序直接引导。但是,可能需要执行某些任务(通常需要访问文件系统和用户空间工具)(例如,加载文件系统模块,用于磁盘访问的驱动程序,从不具有固定名称/路径的可交换媒体安装文件系统等)。

那就是 initramfs的
目的:它是一个CPIO存档,它在内核映像本身或在引导时由引导程序附加到内核映像(内核映像是initramfs的容器,而不是其他方式)。

该CPIO存档包含一个初始rootfs,其中包含设置所有设备以访问正确的根文件系统所需的模块,以及一些程序来标识那些设备,加载模块,执行其他一些启动任务,以将正确的根文件系统重新安装到/并启动/
sbin /在里面

initrd 与之相似,主要区别在于它是一个文件系统映像,可以并且通常被压缩。内核必须支持内置使用的文件系统,并将此映像安装为初始/。

由于CPIO简化了几个数量级,因此initramfs比initrd更受青睐,因为这样既节省了对内置任何文件系统模块的需求,又使initramfs的创建更加容易。无需创建ext2映像,而是通过loopdevice挂载并填充它,它可以简化为一个简单的存档创建过程,与使用tar不同。

但是,如果您使用内核映像中内置的所有必需的驱动程序和模块来编译内核,并且您的根文件系统设备在系统中具有固定名称,则您不需要initramfs,因为内核可以自行完成操作。



 类似资料:
  • (是的,这是hacky,可能不是最佳实践,但它是体积最小的解决方案) 我有一个涉及几个jar的项目——一个可运行的启动器、一个服务器、一个服务器的包装器和服务器的插件。 启动器通过启动一个新的未连接的进程、一个子进程或者只是实例化它来运行包装器,这取决于配置。对于这个问题来说,这应该不重要。 包装器使用URLClassLoader来加载服务器jar并启动它,这工作正常。 在启动服务器之前,包装器会

  • 我正在试验OSGi条件权限机制。更具体地说,我试图使用org.osgi.service.condpermadmin.BundleSignerCondition来限制哪些包可以启动。我所拥有的文档指出,为了使用该权限,我必须使用org.osgi.framework.trust.repositories框架配置属性指定到JKS密钥库的路径。但是,同一文档提到该属性中提到的JKS不能有密码。所以问题是:

  • 我的AWS ECR中有一个Docker映像,我想将其转换为AWS AMI,以便在环境中创建实例。 尝试在Docker容器上使用AMI的原因 我必须在m4中的Docker容器中运行计算密集型ML任务。xlarge在一些文本文件上的实例。然而,使用Docker时,实例的CPU利用率达到了100%,脚本也在提前终止。 但是,它在Docker外部的同一实例中运行良好。 因此,我想从Docker转移到AMI

  • 问题内容: 我有以下情况。 我有一个从另一个基类继承并重写一个方法的Java类。基本方法不会引发异常,因此没有声明。 现在我自己的方法应该能够引发异常,但是我要么有选择 吞下异常 添加抛出声明 两者都不令人满意,因为第一个会默默地忽略异常(好的,我可以执行一些日志记录),第二个会因为方法头不同而产生编译器错误。 问题答案: 如果确实需要,可以抛出未经检查的异常而不必声明它们。未检查的异常扩展。扩展

  • 问题内容: 如果要使用Linq-SQL,还必须将DB Table拖到设计器表面以创建实体类。 我一直喜欢我的应用程序中的完全控制权,并且不喜欢dotnet创建的类。 是否可以使用我自己的数据访问层实体类在Linq和DB之间提供此连接? 我该如何完成? 问题答案: 您可以使用Linq-to-SQL非常轻松地编写自己的类-只需使用一些属性绘制类即可。 例如,这是我的一个项目中有一个非常简单的表,它可以