想添添东西,使内容丰富一些。对linux的启动过程做一个整体的理解。
现在以rhel6-x86_64我参考。
启动过程可以理解为,权限的移交过程。BIOS->BOOT loder->linux _init 整个交接分为三个部分。
权限移交之一:BISO
BIOS就不介绍咯,biso不认识系统,自检完懒得去认你,所以就叫loader程序把系统资源一脚给操作系统。
权限移交之二:引导转载程序组件
引导装载程序
一:容量小,位于
MBR
,或者引导部分
二:从引导分区装载
对于
Linux
的最低要求:(换句话说,就是grub要启动系统至少要有/boot下的内核,初始化ram(initrd)因为里面装了进入系统的必备驱动等;确定内核后一定只能根文件系统的位置)
标签:内核位置:
os
根文件系统:初始化的
ram(initrd)
提示:其实就是grub.conf写的东西。这个对于grub的操作会有更深的理解。从grub引导Linux就是需要这些参数。
对其他的系统要求
引导装置,标签。 //比如说wins 在grub.conf里的写法。
装载程序负责在计算机启动时启动您的
linux
或其他系统。
调用装载程序的两种方法;
第一:就是
BISO
自检完将控制权交给你
mbr
上的初始化引导装载程序(
initial program loader)LPL
(
GRUB
);
第二就是:
BISO
自检完交给另一个装载程序,这个程序将控制权交给安装在部分分区上的
lpl(grub)
配置装载程序的两种方式:
在第一阶段的引导:将
linux
的引导装载工具直接安装在
MBR(446
字节内)中,引导装载程序的配置必须让它可以把控制权交给需要的操作系统。
第二阶段的引导:将安装引导程序的第一阶段安装在某个分区引导部分。但是在
mbr
中必须安装另一个引导安装程序,其配置允许叫控制权交给我的
linux
的引导装载程序。(就是不要叫
grub
写到
sda
上而是写在
sdan
的某个分区上,这时候要在
mb
上装上另一个
grub
不然第一阶段过不去)(双重grub)
GRUB
和
grub.conf
grub
的配置文件
/boot/grub/grub.conf
首先:要明确系统有没有
boot
分区。没有的话直接跟
/
分区联系。
有
boot
分区的话
/boot/
分区
如果
/dev/hda
中的
mbr
坏了的话,要重新安装
/sbin/grub-install /dev/hda
要将
grub-md5-crypt
生成的密文写入
grub.conf
中,加上
password --md5 $1$IK2Ac0$w/TTS.1CM51dYkqmc7bip1
;
配置
grub.conf
会立即生效。
加密过后的
grub
要按
P
键输入密码才能进入
grub
菜单编辑模式。
e
是编辑,
d
是删除,
b
是启动。
内核初始化步骤,
/var/log/dmesg
调用编译在内核里的驱动,并试图选找和他们对应的设备。找到了驱动就初始话设备;如果的必要的驱动程序被编译成模块而不是直接编译在内核里,那么一定要在
initrd
里,内核然后会挂载这个映像文件临时挂在
ram
里,以便初始化进程使用该模块。
所有的驱动都装载完以后,内核会以只读的方式挂载根文件系统。
第一个进程(
init
)被装载后控制从这个内核到这个进程。
ps:如果想看到这个初始化过程可以修改一下grub.conf的参数,这些参数都是传给内核的。kernel /vmlinuz-2.6.32-71.el6.x86_64.debug ro root=/dev/mapper/vg_studnet20-LogVol00 rhgb quiet //把quiet 去掉就可看到了哦。重启就可以看到了,或者在启动机器的时候在grub引导的时候去掉这个参数。
用户接口阶段
init
初始化
A:初始化运行级别;
B:系统初始化脚本;
C:对应运行级别的脚本目录;
D:捕获某个关键字顺序;
F:定义
UPS
电源中断
/
恢复脚本;
G:虚拟控制台生成
getty;
H:运行级别
5
初始化;
A:读其初始化文件
/etc/inittab
系统运行级别:
0:halt (do not set initdefault to this)
1:sample user mode
2:multiuser mode ,no nfs (the same as 3 ,if you do no have networking )
3:multiuser mode
4:unused
5: X11+3
6:restart (do not set initdefault to this)
s ,S,single
备用单用户。
Emergency
绕过
rc.sysinit,nologin
#N is runlevel num
id:N:initdefault:
选定运行级别:
方法1:修改
/etc/inittab
方法2:给引导转载程序一个参数;
#init new_runlevel
注意:如果
/etc/inittab
文件丢失,那么必须进入单人模式或者是紧急模式。
#pstree //init
总是第一个进程
.
B:/etc/rc.d/rc.sysinit
1:激活
udev,selinux
2:在
/etc/sysyctl.conf
设定内核参数。
3:设定系统时间
4:装载按键设置
5:启用交换分区
6 : 设置主机名
7:检查并重新挂载跟文件系统
8 : 激活
raid
和
lvm
9 :启用磁盘配额
10 : 清理过时的锁和
pid
文件
C:/etc/rc.d/rcX.d
每个运行配备都有运行的目录
/etc/rc.d/init.d
运行级别文件目录中
的符号链接到这个目录中的对应文件使用
start
和
stop
参数调用
init.d
指定运行级别脚本后运行
通常可以运行自定义修改。
本文出自 “kikupotter” 博客,转载请与作者联系!