BIOS,MBR与grub-我从哪里来
计算机运行起来后,一切都很正常,并且很多理论你都可以在很多资料上学到,然而,一切是如何开始的呢?开始意味着诞生,生活是乏味的,然而诞生一个生命却是需要十月怀胎的,一个生命总是在充满激情与畅想的十月之后诞生的,计算机的运行也不例外,在计算机中,对于运行而言最重要的东西其实不是操作系统,也不是应用程序,而是BIOS或者类似的东西,它里面记录着一张拓扑图,这张拓扑图描述了计算机的硬件是如何连接在一起的-比如网卡芯片在第几条pci总线上,以及各个硬件是如何配置的-比如时钟的值或者启动顺序,有了这张图,以后的操作系统才可以在这张图上谱写绚美的华章。在操作系统中,经常要处理与中断相关的信息, 每个设备的中断号从哪里来?这些都需要bios对信息的提供,计算机的启动程序存放在哪里?这些信息也需要bios的提供。比方说从ide的第一个磁盘启动操作系统的话,那么系统自然会把执行权力交给ide第一块磁盘中存放的某个程序。为了不同磁盘对不同操作系统的标准化,每个启动磁盘的前512字节被称作MBR。
mbr中存放了启动程序和该磁盘的分区表,分区表一共描述了4个分区,其中一个分区为可启动分区,mbr中的启动程序的任务就是在分区表中找到这个启动分区,然后将执行权力交给启动分区的引导程序,至于这个引导程序如何做,那就交给操作系统的设计者来完成了,可以直接启动操作系统,也可以在启动操作系统前完成一些别的工作。以上就是标准化的操作系统自举的过程,然而为何必须这么做呢?因为第一,如果不是通过用户的设置,计算机不知道系统存储在哪个外部存储设备上,因此有了bios的启动顺序;第二,即使计算机知道了从第一块磁盘启动,由于磁盘可以有很多分区,它也不知道操作系统在哪个分区,因此就有了磁盘分区表中必须有一个启动分区。
就是因为计算机太傻,有了上述的两个“不知道”,所以如果解决了这两个不知道,那么就不用在计算机内部设计这么多复杂的所谓的“智能化”了,bios已经解决了第一个计算机不知道的问题,而lilo/grub等bootloader解决了第二个不知道的问题,因此自从有了grub之后,启动操作系统也成了可配置的了,和在bios中配置从特定设备启动计算机一样,在grub中可以配置在哪个磁盘分区启动哪个操作系统,因此grub根本不需要磁盘分区的active标志,一切全部都由用户的配置搞定,之所以拥有分区的active标志,那纯粹是为了操作系统自举时的自动判断启动分区所在时使用。自从有了grub,大家可以放弃很多概念了,比如启动分区之类的。
说实话,grub等bootlaoder就是一个mini OS,它的作用就是启动另一个real OS,grub的实现比简单的执行mbr的代码,判断哪个分区是启动分区,然后跳转到启动分区这种“自动化的配置”要复杂,这个复杂性主要表现在这个bootloader是可以配置的。如此复杂的代码不可能仅仅占据446字节(512-分区表)的空间,于是grub采用了“跳蛙”战术,从最简单的mbr中的代码加载其后的更大的一点的代码从而可以识别“文件系统”,然后跳转到具体的“文件系统”中,执行grub命令,加载存在于具体“文件系统”中的内核和内存盘,最终启动linux操作系统(启动windows等不直接支持grub的操作,需要显式跳转到windows的启动分区来完成启动)。
以linux为例,如果启动到了initrd,那么此时肯定已经完成了内核的加载,可以说一个系统已经完全启动完成了,余下来的只是“根”的挂载问题了,对于liveCD之类的系统,到此步就完成了,因此我们的讨论也仅到此步。那么此时的linux还会“记得”它是从那块磁盘的哪个分区加载的吗?答案是不!因为grub的kernel和initrd命令将内核和内存盘从具体的“文件系统”加载到内存,只要完成了此步,内存中就已经有了系统运行的全部信息,此时将所有的磁盘拔下,内核还是会从解压开始到达initrd的执行的,毕竟数据和代码都在内存中,此时内核仅仅是内存中的内核,它是一个全新的执行体,并不知道grub的任何信息,也不知道是谁将它引导起来的(grub和linux内核的解耦合),内核将丢失所有grub所知道的硬件信息,当然包括磁盘信息,如想知道此时内存中的内核和initrd是从哪一块磁盘的哪一个分区被加载到内存的,不得不从sysfs的block目录中得到更详细的信息,然后遍历所有的磁盘,寻找特征从而加以判断。
如果我事先做好了一个dom盘,cf卡或者磁盘,然后事后可能将之插入到不同的机器上,鉴于每台机器的ide口的硬连线可能顺序不同,比如在pc1上的ide口是hda,在pc2上或许就是hdb,如果我将grub的配置文件写成root=/dev/hda1那么在pc2上可能就无法启动,如何能做到自适应启动呢?在仅有一块块设备(磁盘)的情况下,我可以在initrd的/init脚本中挂载sysfs在/sys,然后再在/sys/block/下查找唯一的磁盘,然后直接挂载之,然而如果不仅仅有一块磁盘呢?那么一个可选的方法就是在启动磁盘的/下创建一个文件abc(确保唯一性),然后分别挂载所有的/sys/block下的磁盘,查找/下是否有一个abc的文件...仅此...
BIOS,MBR与grub-我从哪里来相关推荐
- BIOS, UEFI, MBR, GPT, GRUB介绍
1. 前言 在学习 Linux 系统启动原理之前,我们先了解下与操作系统启动相关的几个概念. 2. 与操作系统启动相关的几个概念 不管是 Windows 还是 Linux 操作系统,底层设备一般均为物 ...
- Network 之十 BIOS + MBR、UEFI + GPT、GRUB、BOOTMGR、SYSLINUX、Option ROM
最近,正在学习 iPXE 的源代码,于是开始各种 Google 查找 iPXE 的资料进行学习.学习中发现需要重点了解计算机的启动方式,现将学习过程中遇到的很多新的知识点整理为此文,作为后续的参考 ...
- BIOS+MBR,BIOS+GPT,EFI+GPT/MBR几种安装方式的区别及grub位置的记录
关于grub位置的一点记录 有四种安装情况(BIOS vs. EFI和MBR vs. GPT),但是其中两个具有相同的需求(其中一个极为罕见): **BIOS+MBR:**在具有传统MBR分区表的基于 ...
- 操作系统安装必备基础知识----浅谈电脑系统里的那些UEFI, BIOS, MBR, GPT。
操作系统安装也是一门简单学问,要想真正搞懂,还是需要一点基础知识做铺垫.前两天耍手机看到了这篇关于装机的这些基础理论知识,总结的还是不错的.所以拿来既是自己收藏也是分享看我博客的人.之后再抽出时间写一 ...
- 【AWSL】之Linux引导过程及服务控制(MBR、GRUB、runlevel、systemcl、init、ntsysv、chkconfig)
序言 这里我主要介绍的是Linux引导过程及服务控制 Linux 序言 一.Linux操作系统引导过程 1.引导过程总览 2.系统初始化进程 二.排除故障 1.MBR ①.修复MBR扇区故障 ②.排除 ...
- rufus中gpt和mrb磁盘_UEFI/BIOS/MBR/GPT启动过程详解与常见系统启动问题
做系统一大头疼事情就是UEFI/BIOS/MBR/GPT等等的选择.系统平台和硬件日新月异,基本上中文站的解释正确性参差不齐,出了问题也查不到正确解决方案,我也遇到过很多次系统启动的问题(这就是为什么 ...
- Linux-开机引导过程 | MBR、GRUB、ROOT密码找回讲解 | 超详细
Linux--引导过程与服务控制 开机引导过程 ✶ 开机自检(BIOS) ✶MBR引导 ✶GRUB菜单 ✶加载内核(Kernel) ✶init进程初始化 系统初始化进程 ✶init 进程 ✶syste ...
- Legacy BIOS MBR 安装黑苹果 High sierra
编辑中: 首先看看机器配置,史前时代 2007--2008年的机器,和 UEFI + GPT 没有半毛钱的关系,够老了.应该很少人比这个还老了. 搞错了.这个CPU最多安装 10.13 High Si ...
- nvme分区选mbr还是guid_win10 双系统 Ubuntu UEFI+GPT bios+mbr 理论与实践
以前都是在虚拟机和阿里云的服务器上玩Linux,这次鉴于需要在笔记本上装双系统.装双系统对配置的要求不高.毕竟每次只运行一个系统.我的笔记本是4G内存,混合硬盘(比较差那种,只有8G固态),4核的i7 ...
- bios+mbr方式以及gpt+uefi方式安装win10和ubuntu18.10
接上一篇grub rescue继续讲这次ubuntu18安装的故事! 1. ubuntu18.10安装 ubuntu18.10真的特别好用!特别好用!特别好用!暂时有几个体验很爽的地方,第一个是界面非 ...
最新文章
- 终于!有本书把我从“拖延+不专注”的低效深坑里救出来了!
- jquery 只能输入汉字
- linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf)
- Quartz 框架快速入门(三)
- boost::hana::reverse用法的测试程序
- 《中国人工智能学会通讯》——8.25 基于演化优化的生物网络配准
- kotlin学习笔记——内联函数
- iText报表Java_(例)Java生成PDF报表 iText
- 第25月第3天 Mxshop项目记录01
- 医院耗材管理系统开发_12
- 个税服务器系统繁忙,2021个人所得税系统异常进不去怎么办?系统繁忙请稍后再试怎么回事...
- 135编辑器html点击图片播放音乐,135编辑器怎么给文章添加音频和视频?135编辑器给文章添加音频和视频教程...
- IMPROVING ADVERSARIAL ROBUSTNESS REQUIRES REVISITING MISCLASSIFIED EXAMPLES
- 人工智能发展历史概述
- 高手实战!Windows 7开机加速完全攻略
- 什么是云计算?云计算概念集合
- 华硕ASUS路由器AC86U无线掉线解决方法
- UEditor之——图片上传组件大小4M的限制
- 捐一个亿的是加多宝,不是王老吉!只喝加多宝,不喝王老吉!
- 但行好事 莫问前程(四月)
热门文章
- 华为无线ac更改wifi密码
- 《网络编程》基本 TCP 套接字编程
- 三十多岁女计算机考研,三十岁考研女
- 名著导读 | 《我与地坛》
- 千古名著 库布里克
- 车企数字化转型研究:如何实现“以用户为中心”的数字化转型?
- JS 保留两位小数,不足用0补齐;js 实现对数字保留两位小数时 不足两位 自动补0;JavaScript保留两位小数,自动补零
- 苹果健康的“人民战争”
- 使用批处理文件(.bat)批量在文件名前面加序号(递增)
- 细说会声会影各版本安装的配置要求及注意事项