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)。
linux 系统启动流程的更多相关文章
- linux基础-附件1 linux系统启动流程
附件1 linux系统启动流程 最初始阶段当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序.这一程序通常知道一些直接连接在主 ...
- Linux系统启动流程及安装命令行版本
Debian安装 之前也安装过很多次linux不同版本的系统,但安装后都是直接带有桌面开发环境的版本,直接可以使用,正好最近项目不是很忙,想一直了解下Linux的整个启动流程,以及如何从命令行模式系统 ...
- 【转载】Linux系统启动流程
原文:Linux系统启动流程 POST(Power On Self Test/上电自检)-->BootLoader(MBR)-->Kernel(硬件探测.加载驱动.挂载根文件系统./sbi ...
- Linux系统启动流程及grub重建(1)
日志系统 Linux系统启动流程 PC: OS(Linux) POST-->BIOS(Boot Sequence)-->MBR(bootloader,446)-->Kernel--& ...
- Linux 入门记录:十八、Linux 系统启动流程 + 单用户修改 root 密码 + GRUB 加密
一.系统启动流程 一般来说,Linux 系统的启动流程是这样的: 1. 开机之后,位于计算机主板 ROM 芯片上的 BIOS 被最先读取,在进行硬件和内存的校验以及 CPU 的自检没有异常后, BIO ...
- Linux系统启动流程(重要!)
Linux系统启动流程 从上至下为: BIOS MBR:Boot Code 执行引导程序-GRUB(操作系统) 加载内核 执行init run level 1.BIOS(Basic Input ...
- Linux系统启动流程分析
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- [ 总结 ] Linux系统启动流程
Linux系统启动过程分析: 按下电源 --> BIOS自检 --> 系统引导(lilo/grub) --> 启动内核 --> 初始化系统 --> 用户登录 1. BIO ...
- Linux系统启动流程与系统目录
启动流程 # 1,开机BIOS自检 检查一系列的硬件,最后根据启动顺序启动,是硬盘还是光驱等 # 2,MBR引导 读硬盘0柱面0磁道1扇区的前446字节 1扇区=512字节 MBR=4446字节 四个 ...
随机推荐
- 很励志的帖子,转来自勉,也反省一下自己写码这几年【奋斗10年,一个.NET程序员从0到拥有5系】
http://bbs.csdn.net/topics/390833230 想想自己毕业近8年,真正写码也5年.从当初毕业时的拒绝写码,到迫不得已开始写码,是命运也好,是自己的不努力也罢.今天看来,写码 ...
- Apache+php在windows下的安装和配置
下载和配置php 下载php:http://windows.php.net/download/ php-5.4.16-Win32-VC9-x86.zip 下载apache: http://ht ...
- JQuery 常用方法基础教程
本文转自(http://www.cnblogs.com/Leo_wl/archive/2010/06/22/1762401.html) 对于学习使用jquery 的朋友,能用的到,简单的了解下jque ...
- ADO.NET基础(增删改查)
ADO.NET是一种数据访问技术,就是将C#和MSSQL连接起来的一个纽带.可以通过ADO.NET将内存中的临时数据写入到数据库中,也可以将数据库中的数据提取到内存中供程序调用. ADO.NET是所有 ...
- Python 向上取整的算法
一.初衷: 有时候我们分页展示数据的时候,需要计算页数.一般都是向上取整,例如counts=205 pageCouts=20 ,pages= 11 页. 一般的除法只是取整数部分,达不到要求. 二.方 ...
- 【JavaScript】允许IE8使用placeholder
var placeholder = function ($element) { var $ = window.jQuery; var version = parseFloat($.browser.ve ...
- 自己动手写ORM
http://blog.csdn.net/sundacheng1989/article/category/1350100
- jsp的一些基本语法
jsp页面内容 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...
- mongodb 数据导入导出
mongoexport 命令异常方便简单强大! 连接数据库: jkmiao@jkmiao-ipin:~$ mongo 192.168.1.xx:xxx/jd_58tc_raw 1. 导出10条数据到 ...
- Liferay 6开发学习(二十六):数据库连接相关问题
Liferay中怎么更换数据库? 常碰到有人问Liferay怎么更换数据库,怎么修改数据库连接.在我们第一次启动Liferay的时候,会有一个配置向导,在此配置向导我们可以选择数据库,并配置数据库连接 ...