• linux 系统启动流程


    原著资料网址:http://wenku.baidu.com/view/414127fdf705cc1755270997.html

    (版权归原作者所有)

    Linux系统的启动分5个阶段,每个阶段都完成不同的启动任务。本章以Red Hat Enterprise Linux 5.2和x86平台为例,剖析从打开计算机电源到计算机屏幕出现登录欢迎界面的整个Linux启动过程,并重点介绍启动中涉及的主要配置文件以及管理工具。

    5.1  Linux系统启动过程简介

    由于在Linux系统的启动过程中会出现非常多的提示信息,而且很多启动信息都是在屏幕上一闪而过,所以对于很多Linux系统的初学者来说,可能会觉得Linux的启动过程非常神秘和复杂。其实Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段。

    1.BIOS加电自检

    2.加载主引导加载程序(MBR)

    3.加载次引导加载程序(GRUB)

    4.Linux内核映像

    5.init进程

    

    5.2  BIOS加电自检

    X86计算机在启动后首选会进行BIOS的加电自检,检测计算机的硬件设备,然后按照CMOS设置的顺序搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、光驱、USB设备、硬盘设置是网络上的某个设备。

    5.3  引导加载程序

    GRUB是Red Hat Enterprise Linux 5.2默认的引导加载程序,其引导过程又可以分为启动主引导加载程序和启动次引导加载程序两个阶段。本节将介绍GRUB在这两个阶段中的启动过程,以及介绍GRUB配置文件/boot/grub/grub.conf中的各种选项的使用。

    5.3.1  引导加载程序的启动

    Red Hat Enterprise Linux 5.2默认安装的引导加载程序是GRUB,是目前最常用的Linux引导加载程序。其引导过程分为两个阶段,第一阶段是保存在MBR中的主引导加载程序的加载。MBR中的主引导加载程序是一个512字节大小的映像,其中包含有机器的二进制代码和一个小分区表。主引导加载程序的任务就是查找并加载保存在硬盘分区上的次引导加载程序,它通过分区表查找活动分区,然后将活动分区的次引导加载程序从设备读入内存中并运行,进入引导加载程序的第二阶段。

    次引导加载程序也被称为内核加载程序,这个阶段的任务是加载Linux内核。一旦次引导加载程序被加载到内存中后,便会显示GRUB的图形界面,在该界面中用户可以通过上下方向键选择需要加载的操作系统以及它们的内核。

    5.3.2  GRUB配置

    GRUB的配置主要通过修改/boot/grub/目录下的grub.conf文件来完成,用户可以通过VI或者在图形界面中使用文件编辑工具打开该文件进行编辑。

    1.default选项

    2.timeout选项

    3.splashimage选项

    4.hiddenmenu选项

    5.title选项

    6.root (hdx,y)

    7.kernel选项

    5.4  内核映像

    当用户选择启动Linux操作系统后,GRUB会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。Linux内核获得控制权后,将会按以下步骤继续引导系统。

    (1)内核映像首先会检测系统中的硬件设备,包括内存、CPU、硬盘等,对这些设备进行初始化并配置。

    (2)内核映像是经过压缩的,接下来它要对自身进行解压,同时加载必要的设备驱动。

    (3)初始化与文件系统相关的虚拟设备,如LVM或者软件RAID等。

    (4)装载根文件系统(/),把根文件系统挂载到根目录下。

    (5)完成引导后,Linux内核会在其进程空间内加载init程序,并把控制器交给init进程,由init进程继续完成接下来的系统引导工作。

    5.5  init进程

    init进程是Linux系统所有进程的起点,内核在完成内核引导后,便会加载init进程,其进程号是1。init进程启动后,会初始化操作系统,并启动特定的运行级别(Runlevel)下的自动运行程序。用户可以通过更改相关的配置文件或使用图形化配置工具“服务配置”,自定义需要在系统启动时自动运行的服务。

    5.5.1  init进程简介

    内核映像在完成引导后,便会启动init进程。init进程对应的执行文件为/sbin/init,它是系统中所有进程的发起者和控制者,所有的进程都是由它所衍生。如果init进程出现问题,系统中的其他进程也会随之而受影响。

    1.作为所有进程的父进程参照对象

    2.运行不同级别的程序

    5.5.2  init进程的引导过程

    当init进程获得控制权后,它首先会执行/etc/rc.d/rc.sysinit脚本,根据脚本中的代码配置环境变量、配置网络、启用Swap、检查并挂载文件系统、执行其他系统初始化所必须的步骤等。

    5.5.3  配置自动运行服务

    配置自动运行服务涉及的文件较多,如果完全由用户手工配置,其过程比较繁琐,所以在Red Hat Enterprise Linux 5.2中提供有一个图形配置工具,可以有效地简化配置过程。用户首先要创建服务对应的启动关闭脚本,脚本的格式一般为:

    #!/bin/bash

    # chkconfig: -

    # description:

    #

    case "$1" in

      start)

    stop)

    status)

    reload)

    restart)

         *)

         esac

    exit $RETVAL

    5.6 重启和关闭系统

    Linux下常用的关机/重启命令有shutdown、root、halt以及init,它们都可以达到重启系统的目的,但每个命令的过程过程都有所不同。在本节的内容中将会介绍这些命令的使用方法,以及它们之间的区别,希望读者经过本节的学习后可以灵活使用这些命令,完成系统的关机和重启。

    5.6.1  shudown命令:关闭或重启系统

    使用shutdown命令可以安全地重启或关闭系统。当用户执行shutdown命令后,系统会通知所有已经登录的用户系统将要关闭,然后拒绝任何新的用户登录,同时向系统中进程发送SIGTERM信号,这样就可以让应用程序有足够的时间提交数据。启动或关闭系统是通过向init进程发送信号,要求它改变运行级别来实行的。其中,级别0被用来关闭系统,级别6为重启系统,级别1为单用户模式。shutdown命令的格式如下:

    shutdown [-t sec] [-arkhncfFHP] time[warning-message]

    5.6.2  halt命令:关闭系统

    halt是关闭系统的快捷命令。执行halt命令其实是相当于执行带“-h”选项的shutdown命令。halt命令的格式如下所示。

    halt [-n] [-w] [-d] [-f] [-i] [-p][-h]

    5.6.3  reboot命令:重启系统

    reboot是重启系统的快捷命令。执行该命令,相当于执行带“-r”选项的shutdown命令。该命令的格式如下:

    reboot [-n] [-w] [-d] [-f][-i] [-p] [-h]

    5.6.4  init命令:改变运行级别

    Linux系统共有7个不同的运行级别:0、1、2、3、4、5、6,使用init命令,可以改变系统当前的运行级别。其命令格式如下:

    init [ -a ] [ -s ] [ -b ] [ -z xxx ] [0123456Ss ]

    5.6.5  通过图形界面关闭系统

    要注销当前用户,可以在系统面板上选择【系统】|【注销】命令,打开如图5.12所示的对话框。单击【注销】按钮,系统将注销当前的登录用户,并退出到用户登录界面。如果要关闭该对话框并返回桌面,可单击【取消】按钮。如果用户不单击任何按钮,系统将会在60秒后自动注销当前的登录用户。

    5.7  系统启动时常见的问题处理

    Linux救援模式是解决系统无法正常引导的最有效的解决方法,用户应该要熟练掌握进入Linux救援模式的方法。对于安装了多系统的环境,经常会由于重装Windows或者重新进行分区,导致GRUB被覆盖或者无法引导Linux,本节也会对这些问题给出具体的解决方法。

    5.7.1  进入Linux救援模式

    当因为某些原因导致无法通过正常引导进入系统(例如GRUB损坏或者误删除了某些重要的系统配置文件)或需要进行某些特殊的系统维护任务(例如忘记了root用户的口令需要进行重置)时,就需要使用Linux救援模式

    5.7.2  GRUB被Windows覆盖

    当安装双系统环境时,如果先安装Linux,再安装Windows;或者已经安装好双系统环境后,对Windows进行了重装,那么保存在MBR中的GRUB就会被Windows系统的引导装载程序NTLDR所覆盖,导致Linux系统无法引导。

    这时候可以通过以下步骤恢复GRUB。

    (1)使用5.7.1节中所介绍的方法进入Linux救援模式,并执行“chroot /mnt/sysimage”命令切换根分区到硬盘的根分区。

    (2)在Shell中执行GRUB进入“grub>”提示符。

    (3)执行“exit”命令退出硬盘的根分区,然后再执行一次该命令重启计算机。

    5.7.3  重新分区后GRUB引导失败

    如果系统中已经安装了Linux,用户使用分区工具对分区进行更改后,可能会导致Linux无法正常引导。例如,系统中有两个分区,其中第一个分区安装了Windows(hda1),第二个分区安装了Linux(hda5)。

  • 相关阅读:
    Python 常用集合类型的增删改查分合 list tuple dict set
    C# Protobuf如何做到0分配内存的序列化/反序列化(2)
    用java springboot 下载无水印抖音快手视频
    下载腾讯视频为mp4简单方法
    java springboot笔记
    如何下载西瓜视频中的 blob:https 的视频下载
    一行Python代码实现for循环和if else判断
    Redis报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to...
    pandas pd.concat() 提示没有 join_axes 参数
    Flask+Celery 执行时报错:def _connparams(self, async=False, _r210_options=( ^ SyntaxError: invalid syntax
  • 原文地址:https://www.cnblogs.com/linquan/p/5011990.html
Copyright © 2020-2023  润新知