Linux启动流程简述:
前言:
本文主要针对CenOS6系统的启动流程作简介。
Linux的系统启动分为几个阶段,由于运行中的系统分为用户空间层面和内核空间层面,所以一个完整的系统启动也是先启动内核文件,然后在启动用户层面的各种应用程序。Linux系统的设计属于单内核设计,但是各功能模块却支持动态的装载和卸载,极大的压缩了内核的体积,让内核的启动也更加快捷和迅速。
启动阶段1:内核的启动
过程简述:
1.POST(加电自检):主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)是否正常。
2.boot sequence(选择启动设备):按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备;
上述两个功能都由BIOS来完成,BIOS(Basic Input / Output System),又称基本输入输出系统,是一个固化在ROM中的软件,是操作系统输入输出管理系统的一部分。
3.bootloader(引导加载器):
Linux下的引导加载器有grub leancy和grub2两种,Cenos6中使用的是前者。
MBR(主引导记录):
MBR的共由512字节组成,前446字节存放的即是bootloader。所以在选定启动设备后,收件是读取MBR中的bootloader,打开grub菜单。
grub:
功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;
gurb的实现共有3个阶段:
1st stage:位于MBR的BootLoader中,用来加载2nd stage到内存中。
1.5 stage:1和2的桥梁,用来驱动文件系统来使1阶段过渡到2阶段。
2nd stage:grub核心,/boot/grub,存放在磁盘分上,用于加载内核文件。
4.加载内核
分四个步骤:
探测可识别到的所有硬件设备;
加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
以只读方式挂载根文件系统;即rootfs
运行用户空间的第一个应用程序:/sbin/init。
内核文件:/boot//vmlinuz-VERSION-release,ramdisk文件/boot/initramfs-VERSION-release.img。
启动阶段2:启动用户空间
在上述的内核启动后,后续的操作都交给init程序来完成。/sbin/init程序是用户空间的第一个程序,主要完成系统初始化,步骤如下:
设置默认运行级别:
运行级别的配置文件为/etc/inittab,共0-6七个运行级别,可以在该文件中自主定义,下次启动默认进入指定的运行级别。
运行系统初始化脚本:
/etc/rc.d/rc.sysinit即为系统的初始化脚本,系统通过自动执行该脚本,从而完成对系统的设置和信息的初始化。
关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务:
这里主要是指通过chkconfig所配置的开机自动启动或者关闭的各类服务。
设置登录终端:
启动图形终端:级别5需要启动
grub简介
GRand Unified Bootloader,系统启动后会首先打开一个grub菜单,上图所示,可以自主选择内核、定制内核参数。grub由三个阶段组成,1st stage,1_5stage以及stage2,stage2和内核文件等通常放置于一个基本磁盘分区。
grub主要实现以下功能:
(1) 提供菜单、并提供交互式接口
e: 编辑模式,用于编辑菜单;
c: 命令模式,交互式接口;
a:修改内核参数
(2) 加载用户选择的内核或操作系统
允许传递参数给内核,可隐藏此菜单
(3) 为菜单提供了保护机制
为编辑菜单进行认证,为启用内核或操作系统进行认证
grub有自己的命令行接口:
help: 获取帮助列表
find (hd#,#)/PATH/TO/SOMEFILE:查找某个文件
root (hd#,#)设置grub的根设备,即stage2阶段所在的分区设备;
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk所在的路径;ramdisk版本必须与内核完全匹配。
boot: 引导启动选定的内核;
配置文件说明:/boot/grub/grub.conf
按行说明:
1:在grub菜单页默认启动的选项,0表示默认启动第一个内核
2:设置超时时长,不操作的话5秒后默认选择第一项
3:加载的背景图片的路径
4:隐藏菜单
5:定义菜单项标题,下面的root,kernel,initrd即自己指定的启动参数,也可以通过命令行自己指定。
Kickstart文件制作
kickstart是什么
许多系统管理员愿意使用自动化的安装方法来安装linux系统。为了满足这种需要,红帽公司建立了kickstart安装方法。使用kickstart自动化安装,系统管理员可以创建一个ks文件,该文件包含了在典型的安装过程中所遇到的问题的答案。
Kickstart文件可以存放在一个固定的位置上,在安装过程中被独立的机器所读取。这个安装方法可以支持使用单一kickstart文件在多台机器上安装Linux系统,这对于网络和系统管理员来说是个理想的选择。
如何执行kickstart安装
kickstart 安装可以使用本地光盘,本地硬盘驱动器,或通过 NFS、FTP、HTTP 来执行。
要使用 kickstart,必须:
1.创建一个正确的kickstart文件。
2.创建有kickstart文件的引导介质或者让主机可以通过网络访问该文件。
3.筹备安装过程。
4.开始kickstart安装。
Kickstart文件部分内容格式说明:
install (可选) 明确指定系统次次进行的是全新安装系统;是默认项;
cdrom (可选) 以本地CD-ROM为源安装系统;
harddrive (可选) 以硬盘分区中包含的镜像为源安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去;
nfs (可选) 指定从NFS服务器上获取安装源;
url (可选) 指定通过FTP或HTTP从网络获取安装源;
bootloader (必需) 设定boot loader安装选项;
-append= 可以指定内核参数 --driveorder= 设定设备BIOS中的开机设备启动顺序 --location= 设定引导记录的位置; mbr:默认值;partition:将boot loader安装于包含kernel的分区超级快中;none:不安装boot loder。
clearpart (可选) 在建立新分区前清空系统上原有的分区表,默认不删除分区; --all 擦除系统上原有所有分区; --drives 删除指定驱动器上的分区 --initlabel 初始化磁盘卷标为系统架构的默认卷标 --linux 擦除所有的linux分区 --none(default)不移除任何分区
zerombr (可选) 清除mbr信息,会同时清空系统用原有分区表
firewall (可选) 配置系统防火墙选项;
selinux (可选) 设置系统selinux状态;默认为启用并处于enforcing模式;
reboot (可选) 在系统成功安装完成后默认自动重启系统(kickstart方法时);
halt (可选) 在系统成功安装完成后关机;默认为reboot; 其他选项还有shutdown、poweroff
graphical (可选) 默认值,在图形模式下进行kickstart方式安装;
text (可选) 以文本方式进行kickstart安装;默认为图形界面
keyboard (必需) 设置键盘类型;一般设置为us;
lang (必需) 设置安装过程使用的语言及系统的缺省语言;
timezone (可选) 设置系统的时区;
auth/authconfig (必需) 设置系统的认证方式;默认为加密但不隐藏(shadow); --enablemd5 使用MD5加密方式 --useshadow或—enableshadow 使用隐藏密码; --enablenis= 使用NIS认证方式 --nisdomain= NIS域
rootpw (必需) 设置系统root账号的密码;
network (可选) 配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定; --bootproto=dhcp|bootp|static 指定ip获取方式,默认为dhcp/bootp; --device= 设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件; --ip= ip设置 --gateway= 网关 --nameserver= DNS设置 --nodns 不设置DNS --netmask= 掩码 --hostname= 设置安装后主机名称 --onboot= 设置是否在系统启动时激活网卡 --class= 设置DHCP的class值 --noipv4 禁用该设备的ipv4功能 --noipv6 禁用该设备的ipv6功能 如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息;
part/partition (install模式必须) 建立新分区;
创建kickstart配置文件的方式:
1. 文本编辑器编辑生成:vim
2. 用图形化界面配置:system-config-kickstat(需要安装system-config-kickstart.noarch包)
创建光盘镜像
步骤:
创建光盘根目录
复制光盘下的isolinux目录到根目录下
赋予isolinux里的所有文件和目录写权限(这样就可以自定义isolinux.cfg文件)
复制修改好的ks文件到myboot目录下(这里myboot目录相当于光盘的根目录)
建立镜像