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

[经验分享] [操作系统笔记-1] Linux Booting Process(1)----概论

[复制链接]

尚未签到

发表于 2017-6-10 08:42:31 | 显示全部楼层 |阅读模式
  Linux boot的五个阶段
  /* @author = s1n */
  /* @文中首次出现的概念都会使用黑体加粗*/
  1.BIOS
  电源开启后,bios开始执行上电自检(POST:Power-On-Self-Test),而后按照boot sequence加载在软盘,cd-rom,硬盘,闪存等中的MBR(Master Boot Record),寻找bootloader,找到后加载到内存中,并将控制权移交给bootloader。MBR是一个大小仅有512字节的扇区,位于磁盘的第一个扇区其中bootloader的大小为446字节。 boot loader 可以具有菜单功能、直接加载核心文件以及控制权移交的功能等。
  linux中将bootloader程序代码的配置和运行的过程分为两个阶段:
  2.MBR与GRUB/LILO
  /*GRUB和LILO都是引导加载程序,主要用于引导操作系统的启动。                                                                                 */                                            
  /*在单一的MBR中只能存储一个操作系统的引导记录,所以当需要多个操作系统时,就会出现问题,需要更灵活的引导加载程序。*/
  /*GRUB和LILO的区别:                                                                                                                                          */
  /*      1).GRUB拥有交互式命令界面;                                                                                                                       */
  /*      2).GRUB支持网络引导;                                                                                                                                */
  /*      3).LILO可以引导操作系统位置的信息存储在MBR中;                                                                                          */
  1).运行bootloader主程序:
  第一阶段为运行bootloader的主程序,这个主程序必须要被安装在启动区,即是MBR或者是boot sector 。但如前所述,因为MBR实在太小了,所以,MBR或boot sector通常仅安装bootloader的最小主程序, 并没有安装bootloader的相关配置档;
  2).主程序加载配置文件:
  第二阶段为透过 boot loader 加载所有配置档与相关的环境参数文件 (包括文件系统定义与主要配置档 menu.lst或grub.lst), 一般来说,配置档都在/boot/grub中。



[iyunv@www ~]# ls -l /boot/grub
-rw-r--r--  device.map              <==grub 的装置对应档(底下会谈到)
-rw-r--r--  e2fs_stage1_5           <==ext2/ext3 文件系统之定义档
-rw-r--r--  fat_stage1_5            <==FAT 文件系统之定义档
-rw-r--r--  ffs_stage1_5            <==FFS 文件系统之定义档
-rw-------  grub.conf               <==grub 在 Red Hat 的配置档
-rw-r--r--  iso9660_stage1_5        <==光驱文件系统定义档
-rw-r--r--  jfs_stage1_5            <==jfs 文件系统定义档
lrwxrwxrwx  menu.lst -> ./grub.conf <==其实 menu.lst 才是配置档!
-rw-r--r--  minix_stage1_5          <==minix 文件系统定义档
-rw-r--r--  reiserfs_stage1_5       <==reiserfs 文件系统定义档
-rw-r--r--  splash.xpm.gz           <==启动时在 grub 底下的背景图示
-rw-r--r--  stage1                  <==stage 1 的相关说明
-rw-r--r--  stage2                  <==stage 2 的相关说明
-rw-r--r--  ufs2_stage1_5           <==UFS 的文件系统定义档
-rw-r--r--  vstafs_stage1_5         <==vstafs 文件系统定义档
-rw-r--r--  xfs_stage1_5            <==xfs 文件系统定义档
  /*关于grub的更进一步会在以后的笔记中详细的解释*/
  总结一下,每个磁盘的第一个扇区为磁盘的MBR,MBR中前446字节记录的是boot loader,bootloader中安装的是grub的stage1,用于指向grub主程序咋磁盘中的位置。开机加电之后,BIOS按照boot sequence找到对应磁盘,然后搜索该磁盘的MBR。找到位于基本磁盘分区的grub程序,即进入stage2阶段,按照grub.conf配置文件对kernel以及initrd进行引导加载。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。
  接下来我们将mbr拷贝下来,看看其中的内容:
  首先使用如下命令拷贝硬盘一块扇区的前512字节的内容。



# dd if=/dev/sda of=/tmp/mbr.bin bs=512 count=1
  正确结果应得到如下输出



1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.0006952 s, 736 kB/s
  使用file命令,查看mbr中的内容,可以利用tr命令将“;“均换为”\n”增加可读性



# file /tmp/mbr.bin | tr ';' '\n'
  得到输出:



/tmp/mbr.bin: x86 boot sector
  GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200
  partition 1: ID=0x83, starthead 32, startsector 2048, 3906250 sectors
  partition 2: ID=0x83, starthead 71, startsector 3908298, 78125000 sectors
  partition 3: ID=0x83, starthead 85, startsector 82033298, 418084894 sectors, code offset 0x48
  /*关于MBR内容的解释会在以后的笔记中详细的解释*/
  3.加载内核(Kernel)
  加载内核映像到内存中,内核映像并不是一个可执行的内核,而是一个可压缩的内核映像。所有内核将有一个自解压过程。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压缩,然后将其放入高端内存中。如果有初始化RAM磁盘映像,系统就会将它移动到内存中,并标明以后使用,然后到该例程会调用内核,并开始启动内核引导的过程。此时它会调用start_kernel()函数,进一步初始化设备。
  系统的根文件在grub.conf中由”root=“所定义,我的虚拟机中的值为:



set root = ‘hd0,msdos1'
  4.执行init
  该程序会读取/etc/inittab文件然后决定系统运行的级别,列举如下


  • 0 – halt
  • 1 – Single user mode
  • 2 – Multiuser, without NFS
  • 3 – Full multiuser mode
  • 4 – unused
  • 5 – X11
  • 6 – reboot
  /*运行级别解释*/
  /*运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动    */
/*运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆            */
/*运行级别2:多用户状态(没有NFS)                                                            */
/*运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式            */
/*运行级别4:系统未使用,保留                                                                  */
/*运行级别5:X11控制台,登陆后进入图形GUI模式                                       */
/*运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 */
  使用runlevel指令即可查看当前的运行级别
  init进程是系统所有进程的起点,是所有进程的发起者和控制者。因为在任何基于Linux的操作系统中,它都是第一个运行的进程,所以,init进程的进程编号(PID)永远是1.内核在完成核内引导以后,即在本进程空间内加载init程序,它的进程号是1,主要用来执行一些开机初始化脚本和监视进程。如:init读取系统引导配置文件/etc/inittab中的信息进行初始化。所以他是一切进程的父进程,并且用它来杀死其他的进程。
  5.最终配置
  进一步根据系统运行时的级别,系统将运行不同级别的程序,例举如下


  • 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/
  以redhat为例,其执行过程为



/etc/rc.d/rc.sysinit # 由init执行的第一个脚本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式
/etc/rc.d/rc.local
/sbin/mingetty # 等待用户登录
  rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
     1).对于以K开头的文件,系统将终止对应的服务
     2).对于以S开头的文件,系统将启动对应的服务
  /*the end*/
  /*接下来的5篇笔记将会对每个过程展开更加深入的讨论*/

运维网声明 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.yunweiku.com/thread-385723-1-1.html 上篇帖子: 2017.3.28-afternoon 下篇帖子: lnmp+zabbix 3.2 的编译安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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