MBR的Linux分区机制启动过程,linux系统启动流程(MBR)

总:POST---> Boot Squence ---> Bootloader ---> kernel ---> init

---> 完成启动

系统:CentOS6

1、按下电源,cpu找到CMOS中的BIOS并运行起来,这个小程序会完成硬件自检。

BIOS:Basic Input and Output System

2、bios会根据设置的boot squence来找设备上的MBR,找到以后控制权移交给MBR中的bootloader(1 stage).

MBR存在磁盘上的0号扇区。

有3部分组成:

446:bootloader

64: 分区表 16个字节表示一个分区

2: 55AA

3、bootloader加载MBR之后的一部分扇区中的基本文件系统驱动(1.5 stage),如之后的27个扇区。然后再加载引导分区中的第2阶段。linux上面的bootloader程序是GRUB.

GRUB有3个阶段组成。

bootloader:1st stage

Partition:filesystem driver, 1.5 stage

Partition:/boot/grub, 2nd

stage

因为1.5阶段的文件系统驱动只能驱动基本文件系统,所以第2阶段所在的分区不能使用lvm或软raid之类的上层文件系统。

4、加载第2阶段以后,会提供一个选择启动系统的窗口。内容就是/boot/grub/grub.conf文件中的各条目。

如果所选条目就是本机的linux系统的话:

在点击进入系统之后。GRUB会加载grub.conf文件中指定的内核和要传递给内核的参数。参数中有真实根的地址。有时候还要加载与内核同版本的initrd。 initrd是一个模拟根的文件,由GRUB把它与内核一起加载到内存。此文件展开以后就是一个虚拟的根。内核工作于此根中并开始以只读方挂载真实的根。所需驱动和程序在此根中加载。挂载完成以后开始把一些必要文件,如设备文件复制到真实的根。然后执行根切换。如果没有initrd文件,内核会直接挂载真实的根,如果内核里面没有根分区的驱动,则系统启动失败。

12d63fef3ed9792cfb376231a495fe9a.png

而如果所选条目是指向其它分区的另一个系统,则GRUB的控制权移交给那个分区首部的引导程序来管理(各个分区首部保留有引导空间(linux上面好像是1024Byte),也正是这样才有了双系统或多系统)。

kernel:自身初始化:

探测可识别到的所有硬件设备;

加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

以只读方式挂载根文件系统;

运行用户空间的第一个应用程序:/sbin/init

initrd文件有两种:ramdisk

ramfs

Linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;

在使用ramdisk的时候,在内存中模拟成磁盘,但因为磁盘都要有缓冲(buffer)和缓存(cache),这样的结果就是还要在内存中使用缓冲和缓存。多此一举,所以就有了ramfs。

在使用ramfs的时候,直接在内存中模拟成文件系统,不需要在内存中使用缓冲和缓存。

可以生成initrd的工具。可以手动用以下工具生成。

CentOS 5: initrd(ramdisk)

工具程序:mkinitrd

CentOS 6,7:

initramfs(ramfs)

工具程序:dracut, mkinitrd(脚本)

5、根切换完成以后,内核开始执行第一个用户空间应用程序(如果之前的切换根不算的话)/sbin/init。之后内核退居幕后,前面由init程序来负责。init负责启动初始化已定义的各种服务程序和环境。

init就是用户空间的所有程序的祖先。

init是完成系统用户空间初始化的项目总称,它在不同的系统版本上有不同的实现:

init程序的类型:

CentOS 5-:SysV init

配置文件:/etc/inittab

CentOS 6:Upstart

配置文件:/etc/inittab

/etc/init/*.conf

CentOS 7:Systemd

配置文件:/usr/lib/systemd/system/,

/etc/systemd/system/

443357b86b99bec766606cb7f0501bb6.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.netcore 极速接入第三方登录

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:Github: https://github.com/mrhuo/MrHuo.OAuth唯一官网:https:…

linux watch 文件大小,Linux watch命令的使用

1.命令简介watch 命令以周期性的方式执行给定的命令,并全屏显示执行结果。watch 是一个非常实用的命令,基本所有的 Linux 发行版都带有。如同名字一样,watch 可以帮助监测一个命令的运行结果,省得我们一遍遍地手动运行。比如 tail…

在ISA 2006标准版上定制带宽和限制流量(测试)

最的忙于工作上的事,有点烦躁,很少有心情能静下来去看看书或是做些实验了。这是个不好的现象。 一直想着在ISA SERVER上做一些带宽和流量方面的测试,没有找到较好的软件。偶尔从朋友那得到一款,虽说是英文的,也蛮不错…

.NET 中 async 和 await

前言C# 中的 Async 和 Await 关键字是异步编程的核心。使用这两个关键字可以轻松创建异步方法。使用 async 关键字定义的异步方法简称“异步方法”。异步编程并发的一种形式,它采用furture模式或回调(callback)机制,以避免产生不必要的线程。.Net中futur…

Javascript 常用技巧 [2]

Javascript 常用技巧 [2] /**请问如何去掉主页右面的滚动条&#xff1f; <!-- <body scroll"no"> --> <!-- <body style"overflow-y:hidden"> --> ******************************** 怎样不使用页面的缓存&#xff1f;即每一次打…

mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具

MongoDB 提供了 linux 各发行版本 64 位的安装包&#xff0c;你可以在官网下载安装包。下载地址&#xff1a;https://www.mongodb.com/download-center#community下载完安装包&#xff0c;并解压 tgz(以下演示的是 64 位 Linux上的安装) 。curl -O https://fastdl.mongodb.org/…

年轻有为的老黄2020

0x01 不知道开篇要说什么好&#xff0c;那就来个经典的 0x01 吧。这个世界不止苟且&#xff0c;还有诗和远方。工作 工作上面还算是比较忙碌的&#xff0c;在20年也做了很多东西&#xff0c;本来面试进公司的时候title是高开&#xff0c;在基础架构组&#xff0c;光杆部门。过完…

VS.NET调试问题

Q:VS.NET调试问题 A:关于VisualStudio.NET里调试出现的一系列问题&#xff0c;例如没有权限调试Web服务器&#xff0c;不属于Debugger Users组、无法调试等情况&#xff0c;都可以在The VS7 Debugger doesn’t work. What can I do(http://blogs.msdn.co…

linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法

当前1.3.3版本的pypyodbc在linux系统上面已经可以读取有中文字符的mdb文件,不再出现异常,但是读取的中文字符却全是乱码。下面是根据一些现象的合理推论:mdb文件来自于windows系统,其中的中文字符使用GB编码无疑,但linux系统上mdbtools提供的odbc驱动底层已经执行了编码转换,将…

推荐:Dapper扩展-Dapper.SimpleCRUD

背景Dapper目前应该是大家比较喜欢的orm框架之一&#xff0c;但是它灵活的背后&#xff0c;还是有很多不尽人意的地方&#xff0c;谁想编写基本的读取/插入/更新/删除语句&#xff1f;下面推荐SimpleCRUD为Dapper提供了简单的CRUD帮助器。解放了大家&#xff0c;提高生产力。功…

创建虚拟磁盘的小工具软件plainmaker.exe

此小工具,在虚拟机中做集群实现时用到!其下载地址如下:[url]http://www.vmware.cn/Soft/69.html[/url]

Linux下的MySQL测试,Linux下MySQL命令(1)

启动命令&#xff1a;$ ./mysqld_safe --defaults-file/home/mysql/local/mysql_sale_mirror/etc/my.cnf --basedir/home/mysql/local/mysql_sale_mirror/ --datadir/home/mysql/local/mysql_sale_mirror/var/ --pid-file/home/mysql/local/mysql_sale_mirror/var/mysql.pid --…

深入浅出Dotnet Core的项目结构变化

有时候&#xff0c;越是基础的东西&#xff0c;越是有人不明白。前几天Review一个项目的代码&#xff0c;发现非常基础的内容&#xff0c;也会有人理解出错。今天&#xff0c;就着这个点&#xff0c;写一下Dotnet Core的主要类型的项目结构&#xff0c;以及之间的转换和演化。一…

群策群力:破机房征求灵丹妙药

我校有一年代久远之计算机教室&#xff0c;现已经迈入日落西山之境。特征求灵丹妙药&#xff0c;不求妙手回春&#xff0c;只愿其能为我校的信息技术教育事业再尽最后一把微力&#xff0c;也为我校即将面临无地授课的教师提供继续上岗的救命稻草一枝。具体情况说明&#xff1a;…

使用 C# 9 的records作为强类型ID - 路由和查询参数

上一篇文章&#xff0c;我介绍了使用 C# 9 的record类型作为强类型id&#xff0c;非常简洁public record ProductId(int Value);但是在强类型id真正可用之前&#xff0c;还有一些问题需要解决&#xff0c;比如&#xff0c;ASP.NET Core并不知道如何在路由参数或查询字符串参数中…

linux sudo 必须属于用户ID0,sudo:/usr/bin/sudo 务必属于用户 ID 0(的用户)并且设置 setuid 位...

今天手抖本来要修改/usr/bin/下面的一个文件属性为 user:user&#xff0c;执行chown -R /usr/bin/的时候&#xff0c;再按tab之前直接敲了回车&#xff1b;结果导致执行sudo命令时出现错误提示&#xff1a;“sudo&#xff1a;/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置…

企业形象广告的几个突破要点

企业形象广告的使用不能简单的说好与不好&#xff0c;特定的企业&#xff0c;特定的行业&#xff0c;有不同的功能和效果&#xff0c;一般大众化消费品较为适宜&#xff0c;但也要注意&#xff1a; 1、 如果一个企业的产品处于一个完全成熟的品牌阶段&#xff0c;不易投入大量的…

公司高层要我转Java 我直接邮件回怼...

2020年艰难而短暂&#xff0c;而互联网的历史车轮还是轰隆隆一路向前&#xff0c;服务网格/云原生/Serverless架构&#xff0c;各种新架构大行其道。重新审视当下主流的编程语言&#xff0c;天下第一的Java已老&#xff0c;下行多年的.NET却浴火重生&#xff0c;焕发生机&#…

linux如何实现网络高级编程,嵌入式Linux网络编程之:网络高级编程-嵌入式系统-与非网...

10.3 网络高级编程在实际情况中&#xff0c;人们往往遇到多个客户端连接服务器端的情况。由于之前介绍的如connet()、recv()和send()等都是阻塞性函数&#xff0c;如果资源没有准备好&#xff0c;则调用该函数的进程将进入睡眠状态&#xff0c;这样就无法处理I/O多路复用的情况…

.NET斗鱼直播弹幕客户端(2021)

.NET斗鱼直播弹幕客户端(2021)离之前更新的两篇《.NET斗鱼直播弹幕客户端》已经有一段时间&#xff0c;近期有许多客户向我反馈刚好有这方面的需求&#xff0c;但之前的代码不能用了——但网上许多流传的Node.js、Python脚本却可以用&#xff0c;这岂能忍&#xff1f;&#xff…