为什么根文件系统被加载到ramdisk中?

2024-01-01

我正在研究Linux的启动过程。我遇到过这样一句话“RAM 比软盘快几个数量级,因此 ramdisk 的系统运行速度很快”

无论如何,内核都会将根文件系统加载到 RAM 中来执行它。所以我的问题是,如果内核将根文件系统加载到 RAM 中,为什么我们需要 ramdisk 来加载根文件系统?


The 文档 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch12s03.htmlfor SUSE Linux 很好地解释了为什么 Linux 使用 RAMDisk 启动:

一旦 Linux 内核完成 引导和根文件系统 (/) 安装后,程序可以运行并且 进一步的内核模块可以是 集成以提供额外的 功能。挂载根文件 系统必须具备一定的条件 遇见了。内核需要 相应的驱动程序来访问 根文件系统所在的设备 位于(尤其是 SCSI 驱动程序)。内核还必须包含 读取文件所需的代码 系统(ext2、reiserfs、romfs 等)。 也可以想象,根 文件系统已经加密。在 在这种情况下,需要输入密码 挂载文件系统。

针对SCSI驱动的问题, 不同解的数量是 可能的。内核可以包含所有 可以想象的驱动程序,但这可能是 一个问题,因为不同的驱动程序 可能会互相冲突。还, 内核会变得非常大 因为这。另一种可能性 就是提供不同的内核,每个 仅包含一个或几个 SCSI 司机。这个方法有问题 即大量不同的 需要内核,然后出现问题 通过不同的优化增加 内核(Athlon 优化、SMP)。加载SCSI驱动程序的想法为 一个模块导致了一般问题 通过初始概念解决 ramdisk:运行用户空间程序 甚至在根文件系统之前 安装。

这可以防止潜在的先有鸡还是先有蛋的情况,即在可以访问根文件系统所在的设备之前无法加载根文件系统,但在加载根文件系统之前也无法访问该设备:

初始虚拟磁盘(也称为 initdisk 或 initrd)正好解决了上述问题。 Linux 内核提供了一个选项,可以将小文件系统加载到 RAM 磁盘并在安装实际根文件系统之前在其中运行程序。initrd 的加载由引导加载程序(GRUB、LILO 等)处理。引导加载程序只需要 BIOS 例程即可从引导介质加载数据。如果引导加载程序能够加载内核,它还可以加载初始 ramdisk。不需要特殊的驱动程序。

当然,RAMDisk 不是绝对必要的以便进行引导过程。例如,您可以编译一个内核,其中包含启动时加载的所有必需的硬件驱动程序和模块。但显然这对大多数人来说工作量太大,而 RAMDisk 被证明是一个更简单、更具可扩展性的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么根文件系统被加载到ramdisk中? 的相关文章

  • 在spring boot中使用configuration注解无法注入bean

    1 在spring boot和spring中bean注入的方式 xff0c 基于Java类配置的 xff0c 即通过configuration注解注入 xff0c 其中遇到发现在springboot中 xff0c 无法自动注入 xff0c
  • Spring Boot 接口统一前缀

    需求 需求如题 xff0c 想给一个 spring boot 项目的所有请求路径添加统一前缀 xff0c 可以通过 context path 来配置 但是在同时存在静态资源和 Controller 接口的项目中 xff0c 如果希望静态资源
  • Spring Boot 配置文件配置自动提示 Configuration Processor

    效果 在使用Idea等开发工具时 xff0c 配置文件中输入前缀就有对应的补全提示 xff0c 使开发者可以很方便配置相应属性 xff0c 效果截图如下 xff1a 元数据说明 这些提示来自于 spring 自动配置规范中的源数据文件 sp
  • spring boot自动打开浏览器和配置打开首页

    目录 前言 一 配置自动打开浏览器 在启动器同级目录下创建config文件夹来放启动配置类 下面是application properties的配置 二 配置默认首页 总结 前言 如何配置自动打开浏览器 和默认页面设置 一 配置自动打开浏览
  • redisson-spring-boot-starter

    redisson spring boot starter spring boot 配置 spring redis redisson config classpath redisson beta yml 或者 spring redis red
  • Spring Boot+Spring Security+JWT 实现 RESTful Api 认证(二)

    摘要 上一篇Spring Boot 43 Spring Security 43 JWT 实现 RESTful Api 认证 xff08 一 xff09 我们已经sql教程 实现了基本的登录和token认证接口 xff0c 但是这里有个问题
  • spring boot 注册成 windows 服务

    1 windows系统下将 34 java jar 34 注册成 windows 服务 demo bat 64 echo off d span class token builtin class name cd span d span cl
  • 毕业设计源码基于Spring Boot的论坛管理系统的实现

    摘要 xff1a 在社会快速发展的影响下 xff0c 论坛管理系统 继续发展 xff0c 使 论坛管理系统 的管理和运营比过去十年更加 信息化 依照这一现实为基础 xff0c 设计一个快捷而又方便的网上 论坛管理系统 是一项十分重要并且有价
  • AIX系统启动

    复杂度2 5 机密度3 5 最后更新2021 04 23 AIX的启动过程粗略来看 大概是这样的 其中有通过硬件 微码 只能调整少量设置 完成的过程 也有通过操作系统软件 可修改 完成的功能 to be continue 关于SMS的介绍在
  • how to free up more space in boot partition with Ubuntu16.04

    Your boot partition is full Since this is a kernel update these files will be copied to the boot partition so you need t
  • java spring cloud 使用nacos配置多数据源(druid)AbstractRoutingDataSource

    第一步 在nacos中加入 spring datasource master url jdbc mysql base mysql 3306 XXX characterEncoding utf8 zeroDateTimeBehavior co
  • 【linux kernel】挂载根文件系统之rootfs

    挂载根文件系统之rootfs 文章目录 挂载根文件系统之rootfs 一 开篇 二 rootfs根文件系统 2 1 初始化rootfs 2 2 挂载rootfs文件系统 2 3 创建简单的rootfs根文件系统目录和文件 2 4 打开0 1
  • 如何调试在启动时启动的进程?

    我正在尝试在启动时启动的 Windows 服务中设置断点 由于我犯了一个不幸的错误 该服务迫使机器进入重新启动循环 这意味着我无法达到可以部署修复程序的稳定状态 而且显然我无法尝试调试该服务在更方便的时间 我可以在内核模式下使用windbg
  • 编写我自己的 init 可执行文件

    我想创建自己的 init 并为下雪的周末带来一些 Linux 乐趣 我知道 内核使用 rootfs 启动 并在加载驱动程序和安装磁盘后将流程提供给 sbin init 我下载了ubuntu云镜像并尝试使用kvm直接启动内核 如下所示 kvm
  • BIOS 将哪些信息加载到 RAM 中?

    我知道 启动时 BIOS 会在内存 0x7c00 上加载预定义设备驱动器的第一个扇区 512 字节 然后跳转到该地址 因此 0x7c00 到 0x7dff 的内存被占用 RAM 是否还有其他部分被占用 如果我正在编写操作系统 我可以将除 0
  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • 为什么 receive_boot_completed 在我的设备上不起作用?

    我正在开发一些需要使用的应用程序receive boot completed重新启动以重置一些警报 它可以在模拟器和 Samsung tab 2 10 1 上正常工作 但它不能在我的 android 版本 2 2 1 的 Galaxy Mi
  • 获取在 mac 中启动时运行的 python 脚本

    如何让 python 脚本在每次计算机启动时运行 如何在启动时运行 shell 脚本 OSX http www osxfaq com Tutorials LearningCenter HowTo Startup index ws 在该脚本中
  • 普通的 x86 或 AMD PC 是直接从 ROM 运行启动/BIOS 代码,还是先将其复制到 RAM? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我知道现代计算机已经修改了哈佛架构 它们可以从保存数据的地方以外的地方读取指令 这一事实是否允许它们直接从 ROM 芯片获取指令 他们是先
  • java:无法访问org.springframework.boot.SpringApplication错误的类文件

    java cannot access org springframework boot SpringApplication bad class file C Users xyz m2 repository org springframewo

随机推荐

  • 如何在 Sails js (nodejs MVC) 中使用外部 REST API

    我正在使用 sails js 作为 Node js 的 MVC 我仍在学习它 我设法从自己的数据库中获取数据并使用它 但现在我需要 想要从外部 REST API 获取数据 我在我的控制器中使用了这个 api controllers Some
  • C++ 的首选命名约定是什么?

    通过查看 boost 库和 stl 然后查看人们的示例 我感到非常困惑 看起来大写的类型名称都散布在所有小写字母中 并用下划线分隔 如今 事情到底应该怎样做呢 我知道 NET 世界有自己的一套约定 但它似乎与 C 领域完全不同 你打开了一个
  • 监听来自 Dart 的 javascript 事件

    Dart 有没有办法监听 javascript 库中的事件 例如 jqrangesliderhttp ghusse github io jQRangeSlider http ghusse github io jQRangeSlider 当有
  • 过滤字典内的数组 - Swift

    我正在尝试搜索索引字典以根据客户的姓氏返回特定客户 以下是我正在使用的数据结构 每个客户端对象都有一个名称属性 它是一个字符串 var clients Client loadAllClients Returns client array v
  • 滚动条触发的jquery mouseleave文档

    document ready function document mouseleave function desktop subscribe modal modal show 我试图在鼠标离开文档窗口时触发一个功能 上面的代码在 Firef
  • knitr 的 kable 将 2.29e-30 打印为“0”

    CODE some data dat lt data frame log2fc c 0 28 10 82 8 54 5 64 8 79 6 46 pvalue c 0 00e 00 2 29e 30 7 02e 30 4 14e 29 1
  • Firebase 流式 REST 连接是否计入并发连接限制?

    In a 最近的问题 https stackoverflow com q 28229543 209103有人指出Firebase 定价文档 https www firebase com pricing html states REST AP
  • 是否可以在 Eclipse 中从多个包运行 JUnit 测试?

    是否可以同时运行多个包的 JUnit 测试 而无需手动创建测试套件 例如 如果我有层次结构 代码 branchone代码 branchone aaa代码 branchone bbb代码 branchtwo代码 branchtwo aaa代码
  • 在整个 Webresource.axd 中使用嵌入式 WebResources

    问题很简单 如何在 ASP NET 应用程序中使用嵌入式资源 将资源包含在程序集中的步骤是什么 以及如何引用它 可能会遇到哪些问题 编辑 对于未引用 Page 和 ClientScript 的版本 请参阅在 Razor 视图上处理嵌入式资源
  • 正则表达式匹配星号和换行符之间的字符串

    例子 blah blah Match this text Match this text Match this text Match this text Match this text more text more text 如何从星号内部
  • Semantic-ui 与 Bootstrap [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 哪一种最好用 如果可能 请提供这两者的区别和优点 语义用户界面 http semantic ui com vs 引导程序 http getboo
  • 将 Rails 应用程序部署到 Heroku 不断崩溃

    这个答案似乎已经以多种方式得到了回答 但似乎没有一个适合我的确切问题 我正在使用 RailsApps 中的应用程序https github com RailsApps rails devise pundit https github com
  • 如何将git存储库的根设置为vi/vim查找路径?

    我想设置 vim 文件搜索路径以包括 git 存储库根 可以通过以下方式找到 git rev parse show toplevel 我不知道如何附加这个输出git命令 set path 在 vimrc 中 Thanks 您可以使用此命令
  • 在从 XAML 实例化的控件中使用 MEF

    我创建了一个 UserControl 它使用 Import 属性 public class MyUserControl UserControl IPartImportsSatisfiedNotification Import public
  • 使用正确的派生类型调用泛型方法

    我有以下场景 我有三个课程 我们称它们为A B and C 它们的共同点是它们继承自相同的接口 ISomeInterface它们是使用实体框架映射到实体的类 我有一个方法接收实现此接口的对象列表 但对象本身将是A B or C 方法外壳看起
  • 网格碰撞器在应该有孔的地方有墙壁并且变形了

    我的曲线水管模型需要一个曲线圆柱对撞机 以便我的玩家红色立方体可以轻松通过 我尝试了网格碰撞器 它不起作用 还尝试了另一种技巧 我在搅拌机中构建了 2 个模型 一个用于网格渲染 一个用于碰撞器 作为一个整体 九分之一导致网格碰撞器无法在整个
  • Gtest:“{”之前预期的类名

    我正在尝试将 Gtest 下的测试用例转换为使用测试夹具 以便在添加更多测试时可以有一个通用的设置 然而 这会导致错误 test integrate cc 4 47 error expected class name before toke
  • 使用 perl 和 Net::DNS 检查 DNS

    所以 在 有一个小脚本 参见第 173 页 其目的是迭代检查 DNS 服务器以查看它们是否为给定主机名返回相同的地址 然而 书中给出的解决方案仅当主机具有静态IP地址时才有效 如果我希望该脚本能够与具有多个关联地址的主机一起使用 我该如何编
  • jquery 相当于 getcompulatedstyle()

    我在一个中找到了这个 getCompulatedStyle polyfillJavaScript 插件 https github com viljamis responsive nav js if computed window getCo
  • 为什么根文件系统被加载到ramdisk中?

    我正在研究Linux的启动过程 我遇到过这样一句话 RAM 比软盘快几个数量级 因此 ramdisk 的系统运行速度很快 无论如何 内核都会将根文件系统加载到 RAM 中来执行它 所以我的问题是 如果内核将根文件系统加载到 RAM 中 为什