9.Linux系统引导流程
一、Linux系统引导流程
当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接。
在Linux引导流程中,一般可以分为以下几个主要过程:
1、固件firmware(CMOS/BIOS) -> POST(Power On Self Test),即加电自检
2、自举程序BootLoader(GRUB) -> 将系统载入内核
3、载入内核Kernel -> 驱动硬件
4、启动进程init -> 服务启动
5、读取执行配置文件/etc/inittab
1、固件firware(CMOS/BIOS)
在按下电源键后,LINUX进行加电自检。在这个过程中,我们可以随时按下F2或F11等按钮,进入BIOS设置,对一些常见的固件设置进行设置。常用的固件设置包括:
· 安全设置
· 可引导介质列表
· 可引导介质搜索顺序(启动顺序)
· 等等
这一部分其实跟进入Windows的BIOS是基本上一样的。
此外,我们还可以在进入系统的时候使用一些命令查看硬件和软件的时钟。
硬件时钟是指CMOS上的时间,软件时钟是指系统上的时间,当两个时间不同时,可能会出现某些错误,因此我们必须了解如何设置这两个时间。常用的命令如下:
//执行以下命令必须先切换到root用户(只有root用户可以执行时钟命令) [chanshuyi@localhost ~]$ su root Password: # hwclock 查看硬件时钟 # date 查看软件时钟 # hwclock –hctosys 用硬件时间设置系统时间(软件时间) # hwclock –systohc 用软件时间设置硬件时间 #hwclock –set –date=”8/9/2003 16:45:05” 设置硬件时间为2013年8月9日16:45:05。其中时间格式为:MMDDYYYY hh:mm:ss #date 121511302010.38 设置软件时间为2010年12月15日11:30:38秒。时间格式为:MMDDHHmmYYYYSS
注:查看命令帮助时,可以先用“命令 --help”查看剪短帮助。当查找不到想要的帮助信息时,可以用“man + 命令”查看更详细的帮助信息。
2、自举程序BootLoader(GRUB)
在Linux中,当CMOS/BIOS加点自检完成后,它就会去读取磁盘第一个扇区的bootloader程序(在Linux中对应的bootloader程序是GRUB)。在Linux中广泛使用的Bootloader就是GRUB。 在Windows下也有一个bootloader叫ntldr,即NT loader。所有bootloader最重要的一个功能就是将系统载入内核。在Linux下所说的grub是一个配置文件,它的文件路径是/boot/grub/grub.conf(它有一个软链接文件,存放在/etc/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/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu password --md5 $1$HRvb$omlc/8yCiCaR0reqyM.kn1 title CentOS (2.6.32-431.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=98c8f16d-e03b-4a4b-a942-75bbacbae9aa rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
其中“#”号开头的行表示注释。
default = 0
表示缺省启动哪个系统。(因为硬盘可能装有多个系统,0表示第一个系统,1表示第二个系统,以此类推)
timeout = 5
表示留在启动界面多久之后没反应便自动进入默认选项
splashimage=(hd0,0)/grub/splash.xpm.gz
表示启动界面的图片
hiddenmenu
用于启动时隐藏菜单,除非在timeout之前按下ESC才能看到菜单
password --md5 $1$HRvb$omlc/8yCiCaR0reqyM.kn1
其中后面的“$1....kn1”字符串是设置grub密码后返回的一串密文,以后会说到。
title CentOS (2.6.32-431.el6.x86_64)
引导条目的名称。通常使用操作系统的名称做为标识,你可以自行更改这个名称。
root (hd0,0)
操作系统内核和引导文件所在的磁盘分区,并设置根目录(root)为硬盘的第一个分区(即root = /boot)。(hd0,0) 表示第一块硬盘的第一个分区,(hd0,2) 表示第一块硬盘的第3个分区,依次类推。
kernel
系统内核及 boot 命令用到的参数。
initrd
系统引导程序
注:kernel和initrd中指定的文件都是相对于root中所设置的硬盘分区,例如本例中的(hd0,0)是机器上的/boot分区,kernel的位置实际上是/boot//vmlinuz-2.6.32-431.el6.x86_64
其中title/root(hd0,0)/kernel/initrd这4行是一个整体,它代表一个系统引导信息。如果有多个系统,那么就会有多个tiel/root/kernel/initrd信息。
当自举程序grub读取到grub.conf配置文件时,根据grub.conf文件的配置,决定将哪个系统载入内核。
内核会做两件事情,一是在操作系统的层次上驱动所有硬件,二是启动init进程并由init进程去完成接下来的系统引导。
3、启动init进程
启动init进程后,init进程会去读取/etc/inittab配置文件。
读取Inittab配置文件时,init进程根据initdefault判断系统的运行级别。
之后读取/etc/rc.d/rd.sysinit脚本来完整系统的一些初始化命令(这个脚本是无论选择什么运行级别都会执行的,因此可以将需要初始化的一些指令放在这个脚本后面来执行)。
之后读取/etc/rd.d/rc脚本,根据缺省的运行级别initdefault的值,决定运行/etc/rc.d/rcN.d目录下的特定脚本(这个目录下的文件,以大写S开头的表示Start需要初始化,大写K的表示Kill不需要初始化的),来完成特定运行级别下的一些初始化命令(N指运行级别)。
当执行完rcN.d脚本后,系统就会进入相应的界面,提示我们输入用户名和密码,此时Linux的系统引导就结束了。
注:一些系统默认安装的目录都放在:/etc/rc.d/init.d目录下。
其中inittab文件内容如下:
# inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:
其中最后一行“id:5:initdefault:”代表的意义是缺省启动Linux第5个运行级别。
这里设计两个知识点,一个是inittab文件中条目的格式,一个是Linux的运行级别。
· Linux的运行级别
0 – 表示关机,等于shutdown
1 - 单用户模式,只有root可以登录,且没有图形界面。一般情况下需要修复Linux的时候才进入此种模式。类似于Windows的安全模式。
2 – 多用户模式。与3共同,但与3相比没有NFS服务,即Network File System(Unix系列的一个文件共享机制)。是广泛使用的服务器模式。
3 – 多用户模式
4 – 没有使用的一种模式。你可以自己定义
5 – x11 系统默认启动的模式(图形化的多用户模式,与3相比就是多了图形化界面)
6 – 重启
在命令行下,如果要查看当前运行级别以及切换运行级别,可以用如下命令:
//查看当前的运行级别 #runlevel S 3 (S是指上次的运行级别,3是指现在的运行级别) //运行级别的切换 #init [0123456Ss] 或 #telinit [0123456Ss]
0123456分别代表对应的运行级别,S和s表示单用户模式即运行级别1。
· inittab文件中的条目格式
在inittab中,所有条目采用如下格式:id:run-levels:action:process
id:条目的标识符,包含4个字符以内的字母或数字(但在inittab文件中一般都是用两位字符)
run-levels:指定运行级别,可以指定多个
action:指定运行状态
process:指定要运行的可执行程序的完整路径
其中action的常用取值有:
initdefault:指定系统缺省启动的运行级别
sysinit:系统启动执行process中指定的命令
wait:执行process中指定的命令,并等其结束之后再运行其他命令
once:执行process中指定的命令,不等待其结束
ctrlaltdel:按下Ctrl+Alt+Del时执行process指定的命令
powerfail:当出现电源错误时执行process指定的命令,不等待其结束
powerokwait:当电源恢复时执行process指定的命令
respawn:一旦process指定的命令中止,便重新运行该命令
比如:上面的
“id:5:initdefault:”
initdefault表示指定系统缺省启动的运行级别,5表示指定运行级别为5。表示默认启动运行级别5(即X WINDOW)
“id::sysinit:/etc/hello.script”
sysinit表示系统启动执行process的命令,(范围)是所有的运行级别(空表示所有运行级别),(哪个命令)hello.script脚本对应的命令。这样就表示在系统启动的时候,无论哪个运行级别都执行hello.script脚本。
“id:5:wait:check.script”
表示在运行级别为5的时候,等待执行check.script脚本执行完毕后再继续执行其他指令。
二、Linux启动服务管理
1、人工启动服务
我们可以用“服务名 stop/restart/status/condrestart/reload”来查看或更改系统的服务。
如:“stop /etc/rc.d/init.d/sshd”
其中restart = stop + start,如果该服务已经关闭了,那么执行stop环节时会失败。
而condrestart = {stop} + start,其中的stop是选择执行的。如果服务已经关闭,那么stop就不会执行。否则会执行stop关闭服务。
2、设置自启动服务
设置服务自启动有三种方法,分别是:
· ln -s 设置软链接到对应的rcN.d目录下
范例:“ln -s /etc/rc.d/init.d/msg.script /etc/rc.d/rc3.d/S100msg.script”
· chkconfig 命令
chkconfig –list 查看所有服务在所有运行级别下的启动状态
chkconfig –list sshd 查看某个服务在所有运行级别下的启动状态
chkconfig --levels 2345 sshd off 设置sshd服务在2345运行级别下不启动
· ntsysv 命令
运行:“ntsysv --level 3”命令,查看所有运行级别3下的服务,用界面的方式设置启动与否。
其中已启动的用“*”表示,不想其启动用空格取消即可。
三、启动故障分析与解决
用dmesg命令可以检查引导期间的错误。配合grep命令可以快速查看某个硬件的引导是否出问题,如:
dmesg | grep hda 查看硬盘第一分区的引导是否出错
而查找系统日志/var/log/messages,可以查找可能被dmesg忽略的应用程序错误。
案例一:忘记root密码,进入单用户模式
因为进入单用户模式是只能用root用户进入,但是不需要密码。因此当我们忘记了root密码的时候,我们可以通过进入单用户模式更改密码,从而用新的密码进入系统。
步骤一:开机时按ESE键进入GRUB界面,按e进入编辑航模式,选择kernel行,再次按e键编辑,在新的界面的最后一行输入1或s,即可进入单用户模式。
步骤二:进入单用户模式后像更改其他密码一样,输入passwd root,再输入设置的密码即可。
因为只要接触到这台电脑的就可以随时重新设置密码,那会不会因此Linux系统就不安全呢?其实因为基本上所有的服务器都是所在机房中的,普通人是接触不到这些机器的,所以不用担心这个问题。另外,如果你还是担心的话,你可以给Linux设置一个GRUB密码,这样你在编辑GRUB条目的时候就必须先输入密码才能进入单用户模式。
案例二:设置GRUB密码
使用GRUB自带的grub-md5-crypt命令,如:
命令行下输入:“#grub-md-crypt ”之后按照提示即可。最后复制输出的加密后的密文字符串。
最后编辑grub配置文件,加入如下行:
password -md5 [密文字符串]
另外我们也可以通过:“md5crypg”命令生成加密后的密文字符串。
案例三:GRUB命令行下手动启动系统
当系统只能进入grub界面但没有菜单时,我们可以进入grub命令行下,通过输入grub.confing文件中的root/kernel/initrd三行命令,最后输入boot就可以手工引导系统来修复系统。
案例四:当无法进入命令模式的时候,如何修复系统
这种情况需要通过光驱启动,进入到命令行模式去排除错误
1、安装光盘到光驱,然后重启极其,在BIOS中设置用光驱引导
2、等安装界面弄出来后,按F5键,也就是linux rescue模式,然后在boot下输入linux rescue,然后就是回车一下,之后会进入 sh# 命令行下。
9.Linux系统引导流程的更多相关文章
- Linux——系统引导流程学习简单笔记
开启电源: 固件 firmware(CMOS/BIOS) → POST 加电自检 对硬件就行检查 ↓ 自举程序 BootLoader(GRUB) → 载入内核 ↓ 载入内核 Kernel 1:驱动硬件 ...
- linux系统引导流程
1.固件:硬件和软件结合.加电自检是我们按下电源会检测硬件像cpu.内存.网卡等信息.(从硬件层次检测硬件是否可用) 固件设置实例:设置时间 软件时间和硬件时间: [root@VM_0_12_cent ...
- linux 启动引导流程
课程大纲: Linux引导流程 Linux运行级别 Linux启动服务管理 GRUB配置与应用 启动故障分析与解决 系统引导流程 1.固件firmware(CMOS(固化在硬件上的程序与硬件统称)/B ...
- linux系统引导过程
linux系统引导过程 linux-0.11引导时,将依次运行BIOS程序.bootsect.s.setup.s和head.s,完成引导过程后进入到main函数运行.BIOS完成硬件的检查与初始化等工 ...
- Linux系统初始流程
一.0S(内核的功能):平台类软件(通用软件) 进程管理:进程调度器(scheduler)维持一个任务结构(task_struct) 内存管理:如何使用线性地址空间,如何分段,如何分页,如何避免内存( ...
- Linux 开机引导流程
Linux 开机启动流程 BIOS(Basic Input Output System)是 PC 机启动时加载的第一个软件.其实,它是一组固化到计算机主板上一个芯片上的程序,它保存着计算机最重要的输入 ...
- linux系统开机流程详解
今天,我们主要来谈谈计算机系统的启动流程 1.BIOS启动 BIOS是写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序).开机的时候,BIOS是计算机系统会主动执行的第一个程序.BIOS主要 ...
- Linux系统——引导过程与服务控制
一.Linux开机启动原理(十步) (1)开机自检BIOS 开机检测,主板检测 (2)MBR引导 硬盘512字节 (3)GRUB菜单 操作系统菜单 (4)加载内核(kernel) 启动操作系统核心,根 ...
- 【Linux系统引导过程】
*** 第一步 开机自检 根据主板BIOS中的启动顺序,移交系统控制权. 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它. 这是因为BIO ...
随机推荐
- MS office2010 ppt自动放映的设置方法
在菜单“幻灯片放映”-“排练时间”,进入演示,然后设置每张幻灯片需要等待的时间后,手动切换到下一张(如图),一直放映结束,会提示你是否保存排练时间.然后在菜单“幻灯片放映”-“设置放映方式”,里面选择 ...
- Win32/MFC/COM学习推荐书籍
以前有不少朋友问关于学习各种技术的推荐书籍的问题,这里把我觉得比较好的一些书籍列一下,希望能起到抛砖引玉的作用就好了:) Win32开发 Programming Windows by Charles ...
- MINIDVD
import java.util.*; public class MiniDVD { public static void main(String[] args){ //扫描器 Scanner inp ...
- SqlHelper帮助类_上(SQLServer数据库含Connection详解)
在操作数据库时,经常会用到自己封装的SqlHelper.这里主要对SQLServer数据库的Sqlhelper,主要用于在同一个连接中完成CRUD! 一.ADO.NET中的Connection详解: ...
- 隐马尔可夫模型(HMM)攻略
隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...
- Pdf File Writer 中文应用(PDF文件编写器C#类库)
该文由小居工作室(QQ:2482052910) 翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/ ...
- 【2-23】分支语句(switch…case)及循环语句
Switch-case分支语句与if语句作用相同,但需将情况都罗列出比较麻烦所以不常用. 其基本结构是: Switch(一个变量值) { Case 值1:要执行的代码段:break; Case 值2: ...
- BMP图片格式模型(2)
因为公司的主要业务是图像识别相关的,因此对图像处理.识别是我学习的重点.虽然写程序也不少年了,但是对于图像处理领域,我还是一个新兵.对很多基础的概念也还是存在盲区,所以想在边学边做的过程中,对一些概念 ...
- KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架之koahub-handlebars
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- UIImagePickerController拍照/相册/录像/本地视频
1.导入系统库 #import <MobileCoreServices/MobileCoreServices.h> 2.遵守协议 <UIImagePickerControllerDe ...