【linux基础】19、系统初始化流程

一、内核

linux系统的组成:内核(kernel)+根文件系统(rootfs)

1、内核的功能

进程管理:task_struct,scheduler(调度)

内存管理:

I/O管理:中断及中断处理

文件系统:

驱动程序

安全相关功能:SElinux,各种加密库

2、内核设计流派

单内核:单一体系

将所有功能都作成一个整体,都作在内核中

linux:

模块化设计:核心 + 外围功能性模块组成

内核支持动态装卸载模块  .ko文件:kernel object

微内核:内核子系统

windows,solaris

每种各功能使用一个单独的子系统实现

二、POST

Power On Self Test 上电自检

接通电源,系统将执行一个自我检查的例行程序(cpu执行ROM中的指令),这是BIOS功能的一部分,通常称为POST

主板在接通电源后,系统首先由POST程序来对CPU、主板、内存、硬盘子系统、显示子系统串并行接口、键盘、CD-ROm光驱等硬件进行检测

当自检完成后,系统转入BIOS的下一步骤:从A驱、C驱或CD-ROM以及网络服务器上寻找操作系统进行启动,然后将控制权交给操作系统。

三、Boot Sequence

按照bios中的启动次序查找各引导设备,第一个有引导程序的设备即为本次启动要用的设备

BIOS "Basic Input Output System",直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。

其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

四、bootloader

1、MBR

Master Boot Record:主引导记录

是存在于硬盘的0柱面,0磁头,1扇区里,占512字节的空间(扇区编号从0开始而不是1)

它由三个部分组成:

Bootloader ( 446 bytes ):引导加载器,程序             446B

Disk Partition Table ( 64 bytes ):硬盘分区表           64B

SA:MBR有效标志位(标识此MBR是否有效,55AA表示有效)      2B

2、bootloader   

引导加载器,引导程序,安装操作系统时安装在硬盘的MBR中

bootloader的实现:

Windows :

NTloader

Linux:

LILO:LInux LOader  不能引导位于1024 Cylinder以后的分区中的OS

GRUB:GRand Uniform Bootloader

配置文件:/etc/grub.conf

GRUB 0.x:Grub Legace

GRUB 1.x:Grub2

3、GRUB功能

提供一个菜单,允许用户选择要启动的系统或不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权转交给内核

1)选择要启动的内核或系统

可以隐藏选择界面

2)交互式接口

grub接口:

title:操作系统或内核的版本

root: 设定内核文件所在的分区,为grub的根  #grub查找stage2及kernel文件所在设备分区

kernel:定义内核文件,后面可附加传递给内核的启动参数root=“真正的根所在的分区” queit 静默模式  #不输出内核初始化的信息

initrd:指定为内核提供额外驱动等功能的ram disk或ram fs文件

e:进入编辑模式,修改/etc/grub.conf文件

init的级别1的表示方式:1,s,S,single

单用户模式几乎不会启动任何服务,且不需要用户登录(默认不需要密码使用root登录),但是会执行/etc/rc.d/rc.sysinit文件,如果连/etc/rc.d/rc.sysinit文件也不加载,则需传递emergency(紧急模式)

运行级别的切换:init [0-6]

查看运行级别:

   runlevel

   who -r

3)基于密码保护

启用内核映像

编辑/etc/grub.conf文件,将passwd --md5 密码经过md5加密后的字符串,添加至title行之后

传递参数(进入编辑模式)

编辑/etc/grub.conf文件,将passwd --md5 密码经过md5加密后的字符串,添加至title行之前

[[email protected] ~]# grub-md5-crypt      #使用这个命令生成密码串
Password: 
Retype password: 
$1$va4p5/$6v3ki5EMhiIW4ViPGVk1j/

4、grub.conf配置文件语法

[[email protected] ~]# cat /boot/grub/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                       #指定默认启动的内核或0S
timeout=5                   #等待用户选择要启动的内核或OS的时长
splashimage=(hd0,0)/grub/splash.xpm.gz      #指定背景图片
hiddenmenu                                  #隐藏菜单
title CentOS (2.6.32-431.el6.x86_64)        #标题
	root (hd0,0)                        #(Device,Part)
	kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=e0c0bc25-62e5-4896-8749-fce761bc3af7 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

Device表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始编号

Part表示方式:代表分区,0从0开始编号

kernel:

指定内核文件及传递给内核的参数

参数:ro root=/path/to/DEVICE  #把这个设备当前/,以只读方式挂载

initrd:

文件,通常为cpio归档,并使用gzip压缩,通常以.img作为文件名后缀

5、grub的安装

1)grub配置文件损坏,重启将直接进入grub命令行(找不到内核文件)

救援模式下:启动光盘上的微型Linux   #版本要相同

微型linux会查找磁盘上的/文件系统,找到后会自动挂载到/mnt/sysimage、

第一种方式:

#chroot /mnt/sysimage/    #先切换到真正的根目录下

#grub

grub> root(hd#,#)      #指定根

grub> setup hd#         #将grub安装在指定分区上

grub> quit            #退出,系统将会重启,grub就修复完成了

第二种方式:

# chroot /mnt/sysimage
# grub-install --root-directory=/ /dev/sda  #--root-diectory要指到root目录的父目录

再新建一个grub.conf文件


五、kernel装载

1、bootloader装载boot所在分区中的内核到内存中

bootloader只有基本磁盘分区文件系统驱动,只能识别基本分区,所以kernel文件必须放在基本磁盘分区中(因Boot loader大小有限,不能驱动高级文件系统)    #内核和/不在同一个分区

2、initrd (centos5) /initramfs (centos6 ):将内存模拟成根文件系统,读取并装载真正根文件系统所需要的驱动

3、真正根文件系统成功识别后,替换掉临时根文件系统

六、init 

真正根文件系统挂载成功后,init将开始运行初始化用户空间的程序与服务

执行/etc/rc.d/rc.sysinit初始化脚本

SysV风格:Centos5 的init脚本

串行化初始化:需按照依赖关系顺序初始化进程,A–B–C,前一个进程初始化完成后,才能初始化后一个

Upstart :由ubuntu研发,加速初始化速度

dbus:可以在前一个进程启动一部分时就开始下一个进程启动

速度比SysV快

SystemD :Centos7 的init脚本,参考so x的并行初始化初始化过程,速度更快,兼容SysV


2、系统运行级别

linux系统包含 0-6 共7个运行级别

0:关机

1:单用户模式,直接以root用户登陆,不需要密码   #常用于破解root密码

2:多用户模式,不支持NFS文件系统

3:完全多用户模式,文本模式      #不启动图形界面

4:预留级别

5:完全多用户模式,图形shell

6:重启

3、SysV风格的/sbin/init的配置文件 

/etc/inittab  每一行指定一种操作

id:3:initdefault: 

id:操作的ID

runlevels:设置在哪些运行级别下执行此操作,不写为所有级别

action:[ACTION_CMD] 动作,指定如何进行操作

initdefault:设置默认运行级别,无需定义操作

sysinit:指定系统初始化脚本例如:si::sysinit:/etc/rc.d/rc.sysinit

wait:等到系统切换到此级别时运行一次

ctrlaltdel:指定组合键所执行的命令

respawn:当制定操作进程被关闭后立即再从启一次

process:操作,具体运行的程序

4、init命令的主要任务

[[email protected] ~]# ls /etc/init/
control-alt-delete.conf  rc.conf              start-ttys.conf
init-system-dbus.conf    rcS.conf             tty.conf
kexec-disable.conf       rcS-emergency.conf   vmware-tools.conf
plymouth-shutdown.conf   rcS-sulogin.conf     vmware-tools-thinprint.conf
prefdm.conf              serial.conf
quit-plymouth.conf       splash-manager.conf

设定默认运行级别

/etc/inittab

指定系统运行的初始化脚本

/etc/rc.d/rc.sysinit

启动指定级别下要启动的服务,开关闭需要停止的服务

/etc/rc.d/rcN.d (0-6)

S##    #启动

K##    #停止

定义组合键CtrlAltDel的动作

初始化字符终端:

终端:对应的是设备

/dev/tty#,/dev/ttyS#,/dev/console,/dev/pts/#

调用:login-->/etc/issue

启动图形终端:

X-Window,桌面管理器

5、系统初始化脚本

/etc/rc.d/rc.sysinit

设置主机名

打印文本欢迎信息

激活SELinux和udev

激活swap

挂载/etc/fstab定义的本地文件系统

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

设置系统时钟

装载键盘映射

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

激活RAID和LVM设备

清理操作

CentOS操作系统的详细启动流程,了解这些启动流程之后,我们可以实验做一个小型的Linux。

时间: 2024-10-08 10:33:05

【linux基础】19、系统初始化流程的相关文章

linux基础之CentOS系统启动流程

CentOS系统启动流程 Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序.安全功能 IPC:Inter Process Communication 消息队列.semerphor.shm socket 运行中的系统环境可分为两层:内核空间.用户空间 用户空间:应用程序(进程或线程) 内核空间:内核代码(系统调用) 内核设计流派: 单内核设计:把所有功能集成于同一个程序: Linux 微内核设计:每种功能使用一个单独的子系统实现: Windows

Linux系统初始化流程(简述)

1,POST [power on self test]: 接通电源后,CPU通过出厂指定的地址读取代码,包括主板芯片上的ROM,测试内存,cpu风扇,显示设备等.此时无论如何,硬盘设备本身必须在硬件平台上被主板等组件识别到.硬盘设备可以是硬盘,U盘,光盘等 BOIS--Boot Sequence--主要设定启动次序(多个磁盘都可以启动OS) 加载磁盘设备第0磁道第0扇区[sector 0]----MBR 446bytes bootloader :选定启动的OS,能自行识别分区文件系统(kerne

11、系统初始化流程、拯救模式 学习笔记

POST --> BIOS (Boot Sequence) --> MBR(bootloader) --> Kernel (CentOS5: initrd, CentOS6: initramfs) --> /sbin/init (CentOS5:/etc/inittab, CentOS6: /etc/inittab, /etc/init/*.conf) /etc/inittab: CentOS5: 每一行定义一个操作 CentOS6: upstart 脚本 运行级别: 0-6: 7

linux征途之系统开机流程

CentOS 6.x版本开机流程 1. 按下开机按钮,主板加电读取BIOS信息: 2. BISO载入CMOS的信息寻找启动项,并读取第一启动项的MBR 3. 根据MBR的设置,加载bootloader,6.x版本使用grub 4. grub读取/boot/grub/menu.lst文件获得内核文件vmlinuz和initrd的位置 5. 根据/boot/grub/menu.lst文件内的配置读取vmlinuz和initrd文件 6. 解压initrd文件在内存中,生成根目录,加载核心vmlinu

Linux基础知识之 系统启动流程

[1]Linux启动的几个主要阶段 启动流程示意图 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有数了,知道应该去读取哪个硬件设备了. 启动第二步--读取MBR 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是 Master Boot Record,即主引导记录,它的大小是

Linux基础之系统监控

进程分前台进程和后台进程,默认的情况下,用户创建的是前台进程.在命令尾部加&可以简单地创建后台进程,通过 输入jobs -l可以查看运行着的后台进程和对应的PID. 查看进程:通过ps命令可以查看进程的运行状态,常用 ps -aux 终止进程:kill命令,如果进程忽略了kill,用 kill -9来强制结束 其后加PID或者进程名称 通过free 命令 可以查看内存使用状态 第一行中的buffers和cached是已经被分配出去的内存,单还没有被使用的部分.第二行所表示的才是内存真正的使用情况

Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python

作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G fdisk -l /dev/sdb       查看新增加硬盘sdb的详细信息     第一个硬盘叫sda,新建的第二个就叫sdb,再增加一个就叫sdc,依此类推 fdisk /dev/sdb      给/dev目录下的sdb硬盘座磁盘分区      m  查看帮助 n  添加一个新

linux基础-认识系统1-登录与注销

一般我们通过符合ssh协议的客户端来远程登录系统,比如我用的是xshell. 输入正确的用户名和密码后, 其中的标记 1:当前登陆的用户名 2:主机名 3:当前的目录    这里用~符号代表的是用户的文件夹,它是个"变量". eg:mysql用户登陆,~代表/home/mysql  root用户登陆~代表/root 4:提示符 普通用户登陆提示符为$,root的提示符是# 注销linux指令 exit 注意:离开(注销)系统并不是关机!基本上,linux本身已经有相当多的工作在进下,你

linux基础_系统运行级别

linux系统一共有7个运行级别 级别0:系统停机状态,系统默认运行级别不能为0,否则不能正常启动:例如:init0=关机 级别1:单用户工作状态,root权限用于系统维护,禁止远程登录 级别2:多用户状态(没有NFS) 级别3:完全的多用户状态(没有NFS),登录后进入控制台命令终端模式 级别4:系统未使用(保留) 级别5:X11控制台,登录后进入图形界面模式 级别6:系统正常关机后并重启,默认运行级别不能设置为6,否则不能正常启动:例如:init6=重启 备注:关于NFS,请参考http:/