RHCE课程-系统管理部分|2、linux系统启动流程

  1. 云栖社区>
  2. 博客>
  3. 正文

RHCE课程-系统管理部分|2、linux系统启动流程

余二五 2017-11-15 22:27:00 浏览1027
展开阅读全文
这节课程是相当重要的。也是RHCE考试上午的考的主要内容,系统排错。只要你看懂了系统的启动流程,排错就基本没有多大问题了。
计算机启动,上电自检就不说了。下面就是LINUX的启动流程
1:硬件读取引导扇区
2:加载LILO或者Grub
3:加载内核
4:挂装根文件系统
5:启动init,一切进程的“祖父”
6:读取/etc/inittab文件
7:读取rc.sysinit文件
8:运行rcX.d下的文件(文件都是init.d下的符号链接)
其中有一个xinetd的超级进程,调用/etc/xinetd.conf配置文件,从配置文件中知道读/etc/xinetd.d文件,结束后调用Miggetty
9:读取/etc/rc.d/rc.local 文件
 
启动引导工具引导并运行核心
分为两个独立的阶段
第一阶段:存放在启动扇区
第二阶段;/boot目录下的文件
在Linux中常用的启动引导工具
grub
lilo

第一阶段即BIOS从启动扇区中读入IPL(初始化程序引导工具)这一过程。因为MBR的空间太小,所以启动引导工具往往还需要从其他地方进一步读入数据,即所谓第二阶段。这通常是一个可以做选择的交互界面。
 
GRUB:Grand Unified Bootloader
被广泛地用于替代lilo
支持在启动时使用命令行模式
支持md5加密保护
可以从ext2/ext3、ReiseFS、JFS、FAT、minix及FFS文件系统上启动
其配置文件为/boot/grub/grub.conf
更动grub.conf即可立时生效
如果硬盘上的MBR被更动过,可以用
    /sbin/grub-install /dev/hda来重安装grub
 
 
grub.conf的范例:
timeout=10      #等待10秒自动进入默认操作系统
splashimage=(hd0,0)/grub/splash.xpm.gz #grub启动背景画面
default=0       #默认进入第一个标题
title Red Hat Linux (2.4.20-18)   #Red Hat Linux标题
 root (hd0,0)      #根文件系统位置
 kernel  /vmlinuz-2.4.20-18 ro root=LABEL=/ #核心位置与核心加载参数
 initrd  /initrd-2.4.20-18.img   #启动initrd ram盘 
title windows      #另一个操作系统的标题
 rootnoverify (hd0,1)    #操作系统存放在hd0,1上,不要在grub里mount
 chainloader +1     #从hd0,1的第一个扇面启动
 
内核模型
单片型内核
单片型内核将各种硬件支持、网络协议与文件系统管理都编译入一个单一的文件中。
模块型内核:
模块型内核则允许计算机在使用到某一项功能的时候自动加载,防止了核心臃肿,是大部分情况下的标准构建。
 
默认核心存放路径:/boot
核心版本命名规则
主版本号、次版本号、补丁级数
Red Hat附加参数:发布号
显示当前系统的内核信息#uname -r
核心RPM包
kernel-<version>.<arch>.rpm
 预编译核心及模块
kernel-source-<version>.<arch>.rpm
 核心源代码,需要人工编译出核心并安装
kernel-<version>.src.rpm
    [url]www.kernel.org[/url]上发布的原始核心源代码包,需要build出arch包再使用
 
vmlinuz
是可引导的、压缩的内核。“vm”代表 “Virtual Memory“, Linux支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接。
vmlinuz的建立有两种方式:    (1) 编译内核时通过“make zImage”创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性。   (2) 内核编译时通过命令make bzImage创建 (单独编译内核映像,不编译驱动模块,生成内核映像bzImage)
Initrd
initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。 
initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。#mkinitrd   initrd-版本号.img   版本号
核心启动流程
检测硬件设备
设备驱动初始化
将根分区以只读方式挂载
载入初始进程(一般是init)
 
init从/etc/inittab中读取数据并初始化
init运行级别
系统启动脚本
执行运行级别对应目录下的脚本
设置热键
定义UPS设备脚本
在虚拟控制台上循环开启getty进程
定义runlevel 5时的X显示管理器
init定义了0~6这7个运行级别
运行级别可以被指定于:
系统启动时作为核心加载参数被指定
未被指定的情况下,系统启动时从/etc/inittab中读取
在系统运行中,root用户键入init [0-6]来指定。
用户可以用/sbin/runlevel来查看当前的运行级别
 
系统的运行级别默认情况下为:
0:关机
1/S/emergency:单用户模式,通常用于维护系统
2:多用户模式但无网络
3:多用户模式(字符界面)
4:用户定义,未定义情况下与3相同
5X11(包括网络)
6:系统重启
 
/etc/rc.d/rc.sysinit是系统启动用的脚本
从/etc/sysctl.conf中读取核心参数
设置系统时钟
载入keymap
激活swap分区
设置主机名
检查根文件系统并挂载
加载Raid设备
激活磁盘限额
检查并挂载其他文件系统
清除失效锁及PID文件
 
每一个运行级别都对应一个目录
/etc/rc.d/rcX.d
目录内存放的,即当前运行级别需要开启的服务脚本
对应/etc/rc.d/init.d/目录下的链接
链接文件开头是S,表示启动;开头是K,则表示关闭。
切换运行级别,即运行这个目录里所有的脚本
用户可以通过ntsysv调整当前运行级别的开关服务,或用chkconfig,调整某一运行级别下的开关服务。
 
/etc/rc.d/rc.local
在运行级别目录下被最后一个调用
一般系统用户将针对此台计算机的开机定制设置写入其中,而非/etc/rc.d/rc.sysinit。


 




本文转自 fenghao.cn 51CTO博客,原文链接:http://blog.51cto.com/linuxguest/112521,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
余二五
+ 关注