设为首页 收藏本站
查看: 321|回复: 0

[经验分享] linux系统启动流程(MBR)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-1-4 10:11:09 | 显示全部楼层 |阅读模式
总: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文件,内核会直接挂载真实的根,如果内核里面没有根分区的驱动,则系统启动失败。
wKioL1aHkeiAfOvfAAAjNo6wFYw924.jpg

而如果所选条目是指向其它分区的另一个系统,则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/


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-160023-1-1.html 上篇帖子: Linux终端切换和ls、cd、date、shutdown相关命令 下篇帖子: Linux中UTC时间与CST时间不一致的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表