Linux学习笔记<十七>——Linux系统启动流程

系统启动的大致流程如下:

1.加载BOIS的硬件信息与进行POST加电自检,并依据配置取得第一个可启动的装置;

2.读取并运行第一个启动装置内MBR的bootloader(即grub、lilo、spfdisk等程序);

3.依据bootloader的配置加载kernel,kernel会开始侦测硬件与加载驱动程序;

4.硬件驱动成功后,kernel会主动执行/sbin/init,而init读取/etc/inittab获得run-level信息;

5.init读取/etc/rc.d/rc.sysinit,根据run-level在/etc/rc.d/rc#.d/(#表示run-level)下执行相应  的服务进程,执行/etc/rc.d/rc.local下自定义的服务进程;

6.init执行/bin/login程序,进入登陆状态

BOIS

BIOS程序固化在BIOS ROM中,而BIOS设置的参数是放在CMOS RAM中的。

BIOS工作可分为两个阶段:

阶段一:POST加电自检,是BIOS的功能之一,主要用于检测系统关键设备是否正常

阶段二:根据在BIOS中设置的系统启动顺序,读取第一个启动设备的第一个扇区即MBR

Bootloader

Bootloader是MBR中的前446B代码,最主要的功能是读取相应配置找到并加载启动设备中的内核镜像和initrd镜像到内存中。常用的bootloader有grub、lilo和spfdisk,以下以grub为例。

grub通常分为stage1、stage1_5、和stage2三个阶段

stage1和stage1_5用于辅助加载stage2

stage2用于读取grub的配置文件/boot/grub/grub.conf,然后加载内核镜像和initrd镜像到内存中

stage1:将0头0道2扇区读入内存,内容是源代码中的/stage2/start.S,它是stage1_5或stage2的入口

如果start.S加载stage1_5:stage1_5存放在0头0道3扇区向后的位置,具有识别文件系统的能力,此后grub才有能力方位/boot分区/boot/grub/目录下的stage2,将stage2载入内存并执行

如果start.S直接加载:这个时候start.S读取的是存放在/boot分区boot sector中的stage2

安装grub stage1:

# grub

grub> root (hd0,0)  探测磁盘,指定磁盘类型

grub> setup (hd0)

安装grub stage2

# grub-install --root-directory=/path/to/boot‘s_parent_dir /dev/sda

grub配置损坏后启动系统进入grub> 提示

grub > find (hd#,N)

grub> root (hd#,N)

grub> kernel /PATH/TO/KERNEL_FILE

grub> initrd /PATH/TO/INITRD_FILE

grub> boot

grub.conf文件格式

default=0  # 设定默认启动的title的编号,从0开始

timeout=5  # 等待用户选择的超时时长,单位是秒

splashimage=(hd0,0)/grub/splash.xpm.gz  # grub的背景图片

hiddenmenu # 隐藏菜单

password redhat

password --md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG.

title Red Hat Enterprise Linux Server (2.6.18-308.el5)  # 内核标题,或操作系统名称,字符                                        串,可自由修改

root (hd0,0)  # 内核文件所在的设备;对grub而言,所有类型硬盘一律hd,格式为                      (hd#,N);hd#, #表示第几个磁盘;最后的N表示对应磁盘的分区;

kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/vol0/root rhgb quiet   # 内核文件路                                              径,及传递给内核的参数

initrd /initrd-2.6.18-308.el5.img  # ramdisk文件路径

password --md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG.

title Install Red Hat Enterprise Linux 5

root (hd0,0)

kernel /vmlinuz-5 ks=http://172.16.0.1/workstation.cfg ksdevice=eth0 noipv6

initrd /initrd-5

password --md5 $1$FSUEU/$uhUUc8USBK5QAXc.BfW4m.

grub-md5-crypt命令用于生成md5加密后的密码串

Kernel初始化

Stage2完成加载内核镜像后便把控制权转交给内核。kernel的初始化过程大致分三步

1.设备探测

2.加载设备驱动程序(可能会从从initrd(RHEL6下initramfs)文件中装载驱动模块)

3.以只读方式挂载根文件系统

4.装载第一个进程init(PID=1)

启动程序

/sbin/init:(/etc/inittab)

sysinit:最原始的init程序,串行启动,灵活性差

upstart:RHEL6下使用,ubuntu开发的,并行地启动多个进程,就d-bus管理各进程间的通信

systemd:提供了比upsart更激进的并行启动能力,采用socket/D-Bus activation等技术启动            服务

RHEL5下/etc/inittab的任务:

1.运行默认运行级别;

2.运行系统初始化脚本;

3.运行指定运行级别对应的目录下的脚本;

4.设定Ctrl+Alt+Del组合键的操作;

5.定义UPS电源在电源故障/恢复时执行的操作;

6.启动虚拟终端(2345级别);

7.启动图形终端(5级别);

而RHEL6下只运行默认运行级别

RHEL5下/etc/inittab文件格式

id:runleves:action:process

id:标识符

runlevels:在哪个级别运行此行

action:在什么情况下执行此行

process:要运行的程序

查看当前系统的运行级别

runlevel:output previous and current runlevel

who -r:

runlevels描述

0:halt

1:single user mode,直接以管理员身份切入 s,S,single

2.multi user mode,no NFS

3.multi user mode,text mode

4.reserved

5.multi user mode,graphic mode

6.reboot

action描述

initdefault:设定默认运行级别

sysinit:系统初始化

wait:等待级别切换至此级别时执行

respawn:一旦程序终止,就在启动一次,如控制端中logout后,又重新启动一个tty

/etc/rc.d/rc.sysinit完成的任务

1.激活udev和selinux

2.根据/etc/sysctl.conf文件,来设定内核参数

3.设定时钟

4.装载键盘映射

5.启动交换分区

6.设定主机名

7.根文件系统检测,检测到后以读写方式重新挂载

8.激活RAID和LVM设备

9.启用磁盘配额

10.根据/etc/fstab检测并挂载其他文件系统

11.清理过期的锁和PID文件

服务类脚本位于/etc/rc.d/init.d/

用法 /etc/rc.d/init.d/服务程序 {start|stop|restart|status|reload|configtest}

各脚本中均有

#chkconfig runlevels SS KK -表示没有级别默认为S*开头的链接

当chkconfig命令来为此脚本在rc#.d目录创建链接时,runlevels表示默认创建为S*开头的链接;除此之外的级别默认创建为K*开头的链接;S后面的启动优先级为SS所表示的数字;K后面关闭优先次序为KK所表示的数字;

#description:用于说明此脚本的简单功能,\续行转行符

chkconfig

--list SERVER_NAME:缺省时查看所有独立守护服务的启动设定;独立守护进程

--add SERVER_NAME:加入到服务列表中,会在/etc/rc.d/rc#.d/目录下生成对应的链接

-del SERVER_NAME:删除

--level RUNLEVELS SERVER_NAME {on|off}:如果缺省级别指定,默认为2345级别

守护进程的类型:

独立守护进程

xinetd:超级守护进程,需要关联至运行级别,瞬时守护进程的代理人,对瞬时守护进程管理

瞬时守护进程:不需要关联至运行级别

/etc/rc.d/rc.local:

系统最后启动的一个服务,准确说,应该执行的一个脚本;

时间: 2024-11-02 06:15:18

Linux学习笔记<十七>——Linux系统启动流程的相关文章

Linux学习笔记之Linux系统启动过程

Linux系统的启动过程可以分为五个阶段: 内核的引导 运行init 系统初始化 建立终端 用户登录系统 1.内核引导: 当计算机打开电源后,首先进行BIOS开机自检,按照BIOS中设置的启动设备(一般是硬盘)来启动.在操作系统接管硬件以后,首先读入/boot目录下的内核文件. 2.运行init init进程是系统所有进程的起点(即:没有这个进程,系统中任何进程都不会启动),init程序首先是需要读取配置文件/etc/inittab. 在Linux系统中的开机启动程序叫做"守护进程".

学习笔记之centos系统启动流程

 CentOS 系统的启动流程: 简介: (内核级别)POST -读取-> BootSequence(在BIOS中) --> BootLoader(在MBR中)--> Kernel(借助ramdisk完成根文件系统的加载)--> rootfs(readonly)--> /sbin/init (用户空间的第一个程序)接下面 (用户空间的启动流程): /sbin/init (读取/etc/inittab) [centos5,6,7在此略有区别]   设置默认运行级别(1) --&

Linux学习笔记:Linux系统管理

Linux系统管理1.存储管理    传统的磁盘分区    RAID技术,软RAID的实现    LVM    文件系统管理        ext,xfs,btrfs(了解)2.程序包管理    rpm.yum.dnf3.sed.gawk4.进程管理5.网络管理    网络基础知识(Cisco CCNA+CCNP)    网络属性管理    网络参数监测6.Linux内核管理    内核编译和安装    内核的裁剪    定制内核7.Linux系统启动流程    CentOS5.6.78.系统安

Linux学习笔记:Linux发行版

Linux发行版 什么是Linux distribution – Linux的本质来说,它只是操作系统的核心(内核),负责控制硬件.管理文件系统.程序迚程等,并丌给用户提供各种工具和应用软件. – 人们以Linux核心为中心,再集成搭配各种各样的系统管理软件戒应用工具软件组成一套完整的操作系统,如此的组合便称为Linux发行版. Linux主要发行版 RedHat Linux:红帽企业级Linux是系统管理员的第一选择,它有众多的程序包,还有非常到位的支持,由于该发行版是商业化产品,所以丌是免费

Linux学习笔记之内核启动流程与模块机制

本文旨在简单的介绍一下Linux的启动流程与模块机制: Linux启动的C入口位于/Linux.2.6.22.6/init/main.c::start_kernel() 下图简要的描述了一下内核初始化的流程: 本文我们分析一下do_initcalls ()函数,他负责大部分模块的初始化(比如U盘驱动就是在这里被初始化的). 1 static void __init do_initcalls(void) 2 { 3 initcall_t *call; 4 int count = preempt_c

Linux学习笔记(22) Linux启动管理

1. 系统运行级别 运行级别 含义 0 关机 1 单用户模式,可想象为windows的安全模式,主要用于系统修复 2 不完全的命令行模式,不含NFS服务 3 完全的命令行模式,就是标准字符界面 4 系统保留 5 图形模式 6 重启动 (1) 运行级别命令 runlevel #查看运行级别命令 N表示进入3前面的级别 init 运行级别 #改变运行级别命令 (2) 系统默认运行级别 在配置文件/etc/inittab中进行修改即可 id:3:initdefault: #系统开机后直接进入哪个运行级

Linux学习笔记:Linux系统的进程调度(任务调度)

今天我们学习了Linux系统的进程调度,进程调度是为了在未来某个时间点,让系统自动执行我们事先编写好的命令或脚本的列表,从而使得即使用户不在计算机旁边也可以按时完成任务.这样有利于我们更好的进行任务计划以及在需要执行任务的时候自动完成我们设定好的命令,从而完成任务. 当然为了能够进行进程调度,就必须要有一种机制能够识别事件发生的时间并且能够运行用户所预期的命令:这种机制在Linux中是通过特定的守护进程来实现的.这类的进程有: atd:将预先编写好的命令在未来某个时间点执行一次. crond:

[转载]【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)

在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly.本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^).        注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区别参见这里),因此,本文涉及到的汇编代码均以AT&T Syntax为准. 1. 基本语法规则    

Linux学习笔记(六)-Linux服务程序的安装和卸载

Linux操作系统的运行级别 1 单用户模式,root权限,用于系统维护,禁止远程登录,就像Windows下的安全模式登录. 2 多用户模式,没有NFS网络支持 3 完整的多用户文本模式,有NFS,登录后进入控制台命令行模式 4 系统未使用,保留一般不用,在一些特殊情况下可以使用它来做一些事情 5 图形化模式,登陆后进入图形GUI模式,X Window系统 6 重启模式,默认运行级别不能设为6,否则不能正常启动 显示当前运行级别命令: runlevel;进入其他运行级别: init level