Linux系统启动流程

来源:互联网 发布:淘宝无节操买家秀图片 编辑:程序博客网 时间:2024/05/16 20:29

Centos6启动流程总括

了解系统的启动流程有助于排除系统启动过程中的一些bug,以下是系统启动的流程图:

这里写图片描述

1. 系统启动步骤:

  • 加载BIOS的硬件信息,获取第一个启动设备
    POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接口、键盘、 CD-ROM光驱等硬件情况的检测。

  • 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
    MBR:446字节,bootloader:64字节,分区表:2字节, 55AA:分区标志位

  • 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件信息

  • 核心执行init程序,并获取默认的运行信息

  • init程序执行/etc/rc.d/rc.sysinit文件

  • 启动核心外挂模块

  • init执行运行各个批处理文件(scripts)

  • init执行/etc/rc.d/rc.local

  • 执行/bin/login程序,等待用户登录

  • 登录之后开始以shell控制主机

2. init程序类型

  • Upstart: init,CentOS 6
    配置文件:/etc/inittab, /etc/init/*.conf

  • Systemd:systemd, CentOS 7
    配置文件:/usr/lib/systemd/system /etc/systemd/system

3. init初始化

  • init读取其初始化文件: /etc/inittab

  • 初始运行级别(RUN LEVEL)
    /etc/inittab 设置系统默认的运行级别–>id:3:initdefault:

  • 系统初始化脚本

  • 对应运行级别的脚本目录

  • 捕获某个关键字顺序

  • 定义UPS电源终端/恢复脚本

  • 在虚拟控制台生成getty

  • 在运行级别5初始化X

4. /etc/rc.d/rc.sysinit: 系统初始化脚本

  • 设置主机名

  • 设置欢迎信息

  • 激活udev和selinux

  • 挂载/etc/fstab文件中定义的文件系统

  • 检测根文件系统,并以读写方式重新挂载根文件系统

  • 设置系统时钟

  • 激活swap设备

  • 根据/etc/sysctl.conf文件设置内核参数

  • 激活lvm及software raid设备

  • 加载额外设备的驱动程序

  • 清理操作

5. 启动流程总结

  1. /sbin/init –> (/etc/inittab) –> 设置默认运行级别 –> 运行系统初始脚本、完成系统初始化 –> (关闭对应下需要关闭的服务)启动需要启动服务 –> 设置登录终端
  2. CentOS 6启动流程:
    POST –> Boot Sequence(BIOS) –> Boot Loader –>Kernel(ramdisk) –> rootfs –> switchroot –> /sbin/init –(/etc/inittab, /etc/init/*.conf) –> 设定默认运行级别 –> 系统初始化脚本rc.sysinit –> 关闭或启动对应级别的服务 –> 启动终端

6. grub legacy

  • stage1:MBR(如果MBR破坏,系统就找不见启动盘,无法启动)

  • stage1_5:MBR之后的扇区,让stage1的BootLoader可以识别stage2所在硬盘分区的文件系统

  • stage2:磁盘分区(/boot/grub/,如果目录下文件损坏启动系统时会直接进入grub模式)

    • 配置文件: /boot/grub/grub.conf <– /etc/grub.confstage2及内核等通常放置于一个基本磁盘分区

    功用:
    (1) 提供启动菜单、并提供交互式接口
    a:内核参数
    e: 编辑模式,用于编辑菜单
    c: 命令模式,交互式接口
    (2) 加载用户选择的内核或操作系统
    允许传递参数给内核
    可隐藏启动菜单
    (3) 为菜单提供了保护机制
    为编辑启动菜单进行认证
    为启用内核或操作系统进行认证

7. grub安装

  • 识别硬盘设备

    • (hd#,#)
      hd#: 磁盘编号,用数字表示;从0开始编号
      #: 分区编号,用数字表示; 从0开始编号

    • (hd0,0) 第一块硬盘,第一个分区

  • grub-install(重新生成/boot/grub/目录下的文件但没有grub.conf文件,得自己写)

    • 安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到 DIR/boot目录下

    • grub-install –root-directory=DIR /dev/DISK(DISK为安装系统的硬盘,不是分区,要记住!)

  • grub(在grub命令行执行命令,但依赖/boot/grub/目录下的文件,如果误删或者没有,执行第一种方法)

    • grub> root (hd#,#) #指出/boot目录在哪里

    • grub> setup (hd#) #把grub安装在哪个硬盘上

  • 手动在grub命令行接口启动系统(如果/boot/grub/grub.conf文件损坏无法进入系统),grub命令行支持自动补全,只能启动一次,最后还是要写到配置文件里的

grub> root (hd#,#)grub> kernel /vmlinuz-VERSION-RELEASE roroot=/dev/DEVICEgrub> initrd /initramfs-VERSION-RELEASE.imggrub> boot
  • 配置文件: /boot/grub/grub.conf

    • default=#: 设定默认启动的菜单项;落单项(title)编号从0开始

    • timeout=#:指定菜单项等待选项选择的时长

    • splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径,可不写

    • hiddenmenu:隐藏菜单

    • password [–md5] STRING: 启动菜单编辑认证,进入单用户模式时要验证密码

    • title TITLE:定义菜单项“标题” , 可出现多次

    • root (hd#,#):查找stage2及kernel文件所在设备分区;为grub的根

    • kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核

    • initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件

    • password [–md5|–encrypted ] STRING: 启动选定的内核或操作系统时进行认证

原创粉丝点击