zoukankan      html  css  js  c++  java
  • Linux 开机引导流程

    Linux 开机启动流程

    • BIOS(Basic Input Output System)是 PC 机启动时加载的第一个软件。其实,它是一组固化到计算机主板上一个芯片上的程序,它保存着计算机最重要的输入输出程序、开机后自检程序和系统自启动程序,它可以从 CMOS 中读写系统设置的具体信息

    硬件启动

    • 1)Power On --》BIOS 进行硬件检查(CPU、内存、主板、硬盘等)
    • 2)BIOS 根据计算机设置的启动顺序(是从光驱还是从硬盘启动等),查找启动介质
    • 3)如果是从硬盘启动,BIOS 读取硬盘的 MBR(硬盘的0柱面、0磁头、1扇区称为主引导扇区)
    MBR 大小512字节,分为三个部分
       主引导程序:446字节    这个主引导程序可能是 grub,也可能是 lilo(过老,基本不使用)
       硬盘分区表 DPT:64字节,每个分区要占用16个字节
       分区结束标记也叫硬盘有效标志:2字节,固定为 55AA
    

    GRUB 引导

    • 4)读取 stage1,然后读取 stage1_5 加载 /boot对应的文件驱动,就可以读取 /boot/grub/stage2
    • GRUB 引导程序由三块组成
    stage1:MBR 区前 446 字节
    stage1_5:加载驱动    /boot 分区所对应的系统驱动被写到 2~63 扇区,MBR 当中会有地址指向这些扇区
    stage2:在文件系统里面    /boot/grub/stage2
    

    内核引导

    • 5)stage2 通过 /boot/grub/grub.conf配置文件来加载 Linux 内核和 Linux 映像
    • 内核和映像在 /boot
    [root@tina grub]# cat grub.conf 
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE:  You have a /boot partition.  This means that
    #          all kernel and initrd paths are relative to /boot/, eg.
    #          root (hd0,0)
    #          kernel /vmlinuz-version ro root=/dev/sda3
    #          initrd /initrd-[generic-]version.img
    #boot=/dev/sda
    default=0    // 使用第一个 title
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz   
    hiddenmenu    // 隐藏菜单,按任意键显示菜单
    title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
    	root (hd0,0)
    	kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=e35bcb79-1fce-49cf-913f-b902006ae751 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    	initrd /initramfs-2.6.32-431.el6.x86_64.img
    

    init 引导

    • 6)系统初始化阶段

    • 系统的第一个进程:init 进程,该进程是系统所有进程的父进程

    • init 进程读取配置文件 /etc/inittab,该文件最主要的作用就是设定 Linux 的运行级别

    • init 进程执行 /etc/rc.d/rc.sysinit脚本对系统进行初始化

    • /etc/rc.d/rcX.d:X 表示运行级别,根据不同的启动级别执行不同目录内的以 S 开头的脚本

    • /etc/rc.d/rc.local 是在一切初始化工作完成后,Linux 留给用户自定义的地方

    • /etc/rc.d/rc3.d目录为例,该目录下存放一系列的链接文件,链接到/etc/rc.d/init.d/目录下的脚本文件,开机时执行以 S 开头的脚本,关机时执行以 K 开头的脚本

    • 在字母S或K 后面会跟着两位数字,数值小的在数值大的前面执行

    [root@localhost rc3.d]# ll
    total 0
    lrwxrwxrwx. 1 root root 16 Jul  4  2016 K01smartd -> ../init.d/smartd
    lrwxrwxrwx. 1 root root 17 Jul  4  2016 K02oddjobd -> ../init.d/oddjobd
    lrwxrwxrwx. 1 root root 17 Jul  4  2016 K05wdaemon -> ../init.d/wdaemon
    ......
    lrwxrwxrwx. 1 root root 17 Jul  4  2016 S01sysstat -> ../init.d/sysstat
    lrwxrwxrwx. 1 root root 22 Jul  4  2016 S02lvm2-monitor -> ../init.d/lvm2-monitor
    lrwxrwxrwx. 1 root root 19 Jul  4  2016 S08ip6tables -> ../init.d/ip6tables
    
    • 7)执行 /sbin/mingetty脚本开启 TTY
    • 8)字符界面登录:
    • 用户登录时需要用户名和密码,需要访问/etc/passwd/etc/shadow文件
    • 如果用户名和密码错误,则拒绝登录
    • 如果用户名和密码正确可以登录成功,会执行 4 个脚本
    /etc/profile
    ~/.bash_profile
    ~/.bashrc
    /etc/bashrc
    
    • 9)图形界面登录:执行 /etc/X11/prefdm脚本启动图形界面,其他的和字符界面登录一样
    gdm:进入 Gnome 桌面
    kdm:进入 KDE 桌面
    xdm:启动 X Window
    
  • 相关阅读:
    laravel路由导出和参数加密
    laravel groupby 报错
    Laravel/Lumen 分组求和问题 where groupBy sum
    php swoft redis 发布和订阅
    Linq to Sql学习总结7
    Linq to Sql学习总结6
    Linq to Sql学习总结5
    Linq to Sql学习总结4
    Linq to Sql学习总结3
    Linq to Sql学习总结2
  • 原文地址:https://www.cnblogs.com/tinazzz/p/7073309.html
Copyright © 2011-2022 走看看