Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux是自由软件和开放源代码软件发展中最著名的例子。

概述Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux是自由软件和开放源代码软件发展中最著名的例子。下面简单记录一下Linux系统从开机到能使用的整个过程,以作备忘!LINUX启动流程先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为POST-->BIOS-->MBR(GRUB)-->Kernel-->Init-->Runlevel。下面会详细说明每个过程的作用。

BIOSBIOS(Basic Input/Output System),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。详细的BIOS功能,这边就不说了,BIOS主要的一个功能就是存储了磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若第一个磁盘不存在MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS的界面中进行设置),一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。MBRMBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。

GRUBGRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:Stage1:这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5Stage1_5:该步骤就是为了识别文件系统Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。PS:实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件,该配置文件的信息如下:grub.conf: #boot=/dev/sda default=0 #设定默认启动的title的编号,从0开始 timeout=5 #等待用户选择的超时时间 splashimage=(hd0,0)/boot/grub/splash.xpm.gz #GRUB的背景图片 hiddenmenu #隐藏菜单 title CentOS (2.6.18-194.el5PAE) #内核标题 root (hd0,0) #内核文件所在的设备 kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/ #内核文件路径以及传递给内核的参数 initrd /initrd-2.6.18-194.el5PAE.img #ramdisk文件路径KernelKernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件,initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。Initinit,初始化,顾名思义,该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。Runlevelrunlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本Run level 0 – /etc/rc.d/rc0.d/ Run level 1 – /etc/rc.d/rc1.d/ Run level 2 – /etc/rc.d/rc2.d/ Run level 3 – /etc/rc.d/rc3.d/ Run level 4 – /etc/rc.d/rc4.d/ Run level 5 – /etc/rc.d/rc5.d/ Run level 6 – /etc/rc.d/rc6.d/这些目录下的脚本只有K*和S*开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

本文转载自网易号【孙有匪】,更多内容请点击“阅读原文”

guid linux 识别的分区表_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel相关推荐

  1. guid linux 识别的分区表_Linux系统MBR和GPT分区的区别介绍

    主引导记录(Master Boot Record , MBR)是指一个存储设备的开头 512 字节.它包含操作系统的引导器和存储设备的分区表. 全局唯一标识分区表(GUID Partition Tab ...

  2. kernel 中标准的 ir 模块的 时间的定义_Linux开机流程详解:BIOSgt;MBRgt;GRUBgt;Kernel...

    Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布.在加上用户空间的应用程序之后,成为Linux操作系统.Linux是自由软件和开放源 ...

  3. guid linux 识别的分区表_教你硬盘分区表格式GUID和MBR怎么区分

    我们的电脑硬盘分区格式一共有两种,一种是GUID(GPT),一种是MBR.现在购买的新电脑大多是预装有Win10系统,用户会发现电脑上500G的硬盘大多只有两个分区C盘和D盘,这时用户们都会想多分出几 ...

  4. guid linux 识别的分区表_GUID分区表(GPT)修复实战

    本帖最后由 pig_10 于 2009-8-4 13:40 编辑 我有一个用两个1.5TB硬盘组成的RAID卷,由于MBR分区表无法支持超过2TB的单个分区,所以我使用了GUID分区表 某日,我用di ...

  5. guid linux 识别的分区表_磁盘管理—MBR分区与GPT分区总结

    描述: 1,什么是磁盘分区 磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分,盘片一旦划分成数个分区(Partition),不同类的目录与文件可以存储进不同的分区. ...

  6. linux临时挂载别的文件目录_Linux目录结构及开机流程详解

    对Linux有一些了解的,都应该知道在Linux中所有的内容都是文件,包括硬盘等各种硬件在Linux中也都是按照文件来继续处理的,所以对Linux文件的了解将是非常重要的. 目录 0x01 Linux ...

  7. guid linux 识别的分区表_GUID分区与MBR分区有什么区别?

    展开全部 GUID分区与MBR分区是两种磁盘的组织方式,主要是分区信息信息储存方式.备份功能和分62616964757a686964616fe4b893e5b19e31333431366238区数量和 ...

  8. 文件系统管理 之 Linux 创建文件系统及挂载文件系统流程详解

    作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...

  9. Linux 创建文件系统及挂载文件系统流程详解(转)

    作者:北南南北 来自: LinuxSir.Org 摘要:本文对新增硬盘,切割硬盘,创建硬盘分区,为硬盘分区创建文件系统,以及加载文件系统的流程做总结性论述:主要是为初学者弄清楚这一操作过程:本文涉及f ...

  10. 嵌入式linux 移植安卓,Android系统内核移植流程详解

    Android系统移植工作的目的是为了在特定的硬件上运行Android系统,由于Android系统用的是linux内核,因此内核移植和嵌入式linux移植差异不大,过程如下: (1)移植boot-lo ...

最新文章

  1. Error:could not open'C:\Porogram Files\Java\jrelib\j386\jvm.cfg'
  2. 《Head First Python》笔记 第四章 持久存储
  3. 电话号码中间四位用****代替
  4. Zabbix-Proxy-agent实现web监控
  5. Linux中设置vi编辑器的编码格式以及使用
  6. 语言模型微调领域有哪些最新进展?一文详解最新趋势
  7. JMeter的PUT请求,响应结果中文出现乱码的解决方法
  8. xamarin跳转html,Xamarin 页面跳转
  9. 名为 cursor_jinserted 的游标不存在_一个工程师必须了解的测量常识,你不知道怎么行...
  10. android selector
  11. Windows下对文件做MD5校验
  12. github中文显示乱码的解决方法
  13. linux下1060显卡驱动安装,ubuntu16.04 联想拯救者y7000笔记本电脑安装1060显卡驱动,及ubuntu16.04更新内核...
  14. emacs-打开和关闭
  15. Python编程从入门到实践中的 --snip--
  16. 做好这几点,安心睡个好觉
  17. vue在vscode代码格式化
  18. 点云配准各种方法总结[不定时更新]
  19. 2021华为软件精英挑战赛(杭厦第20名)
  20. Python到pyspark中的py-files的问题

热门文章

  1. XenApp / XenDesktop 7.6 初体验一   安装, 配置站点和序列号服务器
  2. SpringBoot中多种Filter配置方式
  3. android webview richeditor,GitHub - IllegalCreed/react-native-webview-richeditor
  4. SQL数据库异地备份(小白篇)两台服务器之间备份
  5. Layer 提示框tips使用(批量提示)
  6. PHP正则匹配html标签
  7. mysql查询时间段内数据
  8. 重复类发展手法_正确护肤手法图解!
  9. fatal error: GL/glut.h: 没有那个文件或目录
  10. 全网首发:TeaVM编译时容易出错的几种代码