您的位置:首页 > 运维架构 > Linux

linux 的启动流程分析

2012-06-23 12:48 190 查看
说起linux的启动流程,让我想起一个成语:牵一发而动全身,随着你按下开关的那一刻,屏幕上虽然黑乎乎的没有什么界面,但背后却引来了犹如千军万马的程序。呵呵,这就叫不看不知道,一看吓一跳,下面的两幅图我感觉很好,借来用一用,让大家具体了解一下,你那一个简单的动作所引发的“血案”

图一:





图2:



下面我们一起具体的把每一步分析一下:

第一阶段:硬件引发启动:

1、 POST(power on system test) 加电自检

主板通电后,通过固化在主板上的芯片(BIOS)自检,而BIOS的设置信息保存在 COMS(互补金属氧化物 是记录各种硬件参数且嵌入到主板上面)中,检查计算机启动需要用到的最基本的硬件(cpu,memory,磁盘,鼠标,键盘等),同时也查找启动磁盘,找到启动磁盘的第一个扇区,boot squence(找到MBR)。

2、MBR:Master Boot Record,即主引导记录

共有512个字节,前446个字节记录的是bootloader,grub的安装程序就在bootloader。

bootloader是引导装载程序,使用的软件主要有:LILO,grub。现在主流是grub。我们这里只说grub ,grub出场 ,进入下一阶段。

第二个阶段:grub启动引导

grub分为两个阶段来执行:

stage1:执行boot loader主程序

被安装在启动区,即MBR的前446个字节,作用是启动stage2.

stage2:主程序加载配置文件

是grub的核心映像,加载所有的配置文件与相关的环境参数文件(包括文件系统的定义域主要的配置文件 menu.lst)

配置文件在/boot/grub/

[root@localhost grub]# ls -l /boot/grub
total 233
-rw-r--r-- 1 root root     63 May 29 18:55 device.map
-rw-r--r-- 1 root root   7584 May 29 18:55 e2fs_stage1_5
-rw-r--r-- 1 root root   7456 May 29 18:55 fat_stage1_5
-rw-r--r-- 1 root root   6720 May 29 18:55 ffs_stage1_5
-rw------- 1 root root   1003 Jun 11 03:08 grub.conf
-rw-r--r-- 1 root root   6720 May 29 18:55 iso9660_stage1_5
-rw-r--r-- 1 root root   8192 May 29 18:55 jfs_stage1_5
lrwxrwxrwx 1 root root     11 May 29 18:55 menu.lst -> ./gr
ub.conf
-rw-r--r-- 1 root root   6880 May 29 18:55 minix_stage1_5
-rw-r--r-- 1 root root   9248 May 29 18:55 reiserfs_stage1_5
-rw-r--r-- 1 root root  32428 Jan  5  2007 splash.xpm.gz
-rw-r--r-- 1 root root    512 May 29 18:55 stage1
-rw-r--r-- 1 root root 104988 May 29 18:55 stage2
-rw-r--r-- 1 root root   7072 May 29 18:55 ufs2_stage1_5
-rw-r--r-- 1 root root   6272 May 29 18:55 vstafs_stage1_5
-rw-r--r-- 1 root root   8904 May 29 18:55 xfs_stage1_5

我们来看一下menu.lst

default=0                 #默认启动选项 使用第一个启动菜单(title)
timeout=5                  #默认时间
splashimage=(hd0,0)/grub/splash.xpm.gz  背景图片
hiddenmenu                 隐藏启动菜单

title Red Hat Enterprise Linux Server (2.6.18-308.el5)
root (hd0,0)      #内核文件的分区
kernel /vmlinuz-2.6.18-308.el5 ro root=/dev/vol0/root rhgb quiet 内核
initrd /initrd-2.6.18-308.el5.img #RAM DISK的文件名
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加载要启动的内核到内存,并展开。找到内核了,进入下一个阶段

第三阶段:内核引导阶段

1、内核初始化

kernel 启动时完成的任务 :

硬件探测

硬件驱动初始化 (initrd :RAMDISK)

挂载根文件系统(根切换initrd-->rootfs)

启动init进程

内核在/boot 目录下

[root@localhost boot]# ls -l
total 26074
-rw-r--r-- 1 root root    70121 Jan 28 06:35 config-2.6.18-308.el5
drwxr-xr-x 2 root root     1024 Jun 21 11:13 grub
-rw------- 1 root root  3493005 May 29 18:40 initrd-2.6.18-308.el5.img
-rw-r--r-- 1 root root 11406054 May 13 20:00 initrd-5
drwx------ 2 root root    12288 May 29 18:21 lost+found
-rw-r--r-- 1 root root   115211 Jan 28 06:35 symvers-2.6.18-308.el5.gz
lrwxrwxrwx 1 root root       39 Jun 11 03:08 System.map -> /boot/System.map-2.6.28.10-zhanghui.com
-rw-r--r-- 1 root root   990113 Jan 28 06:35 System.map-2.6.18-308.el5
-rw-r--r-- 1 root root  1901940 Jan 28 06:35 vmlinuz-2.6.18-308.el5
-rw-r--r-- 1 root root  1901940 May 13 20:00 vmlinuz-5

内核自己初始化,装载基本的硬件驱动,把内核的基本功能初始化。

2、引导initrd解压载入,

initrd其实就是一个小型的linux系统它的作用是将在lvm或raid上根文件系统进行只读性挂载。让内核识别根文件系统所在的磁盘。启动真正的根文件系统的/sbin/init进程

第四个阶段:init初始

1、/sbin/init 的配置文件是/etc/inittab

根据/etc/inittab 的设置启动终端或图形界面

id:3:initdefault:   默认启动级别
si::sysinit:/etc/rc.d/rc.sysinit  进行系统初始化 

l0:0:wait:/etc/rc.d/rc 0   关机
l1:1:wait:/etc/rc.d/rc 1   #单用户模式
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3    #多用户模式
l4:4:wait:/etc/rc.d/rc 4    #保留
l5:5:wait:/etc/rc.d/rc 5    #图形界面
l6:6:wait:/etc/rc.d/rc 6    #重启

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

x:5:respawn:/etc/X11/prefdm -nodaemon


2、/etc/rc.d/rc.sysinit :设置整个系统的环境

实现的功能有 :

n 激活udev和selinux

n 通过读取/etc/sysctl.conf设置内核参数

n 设置系统时间

n 加载键盘映射

n 启用swap分区

n 设置主机名

n 检查根文件系统,并以读写方式重新挂载根文件系统

n 激活LVM和RAID设备

n 启动磁盘限额

n 挂载其他文件系统

n 清理过期文件锁和PID文件

/etc/rc.d/rc.sysinit这个脚本运行完毕,继续按照/etc/inittab中继续开启对应运行级别中的服务,这些服务有inittab中:

级别不同,只是启动的服务不同 ,

3、/etc/rc.d/rc#.d 决定对应级别下 启动不同的脚本 即不同的服务

[root@localhost ~]# ls -l /etc/rc.d/
total 112
drwxr-xr-x 2 root root  4096 Jun 14 11:56 init.d
-rwxr-xr-x 1 root root  2255 Dec 20  2011 rc
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc0.d
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc1.d
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc2.d
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc3.d
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc4.d
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc5.d
drwxr-xr-x 2 root root  4096 Jun 14 11:58 rc6.d
-rwxr-xr-x 1 root root   220 Dec 20  2011 rc.local
-rwxr-xr-x 1 root root 26815 Dec 20  2011 rc.sysinit


对应的rc0~6目录中是各需要开启服务的链接文件,S开头表示开启,K开 头表示关闭。

[root@localhost ~]# ls /etc/rc.d/rc1.d
K01dnsmasq         K05conman     K24irda        K73ypbind     K85mdmpd        K88auditd          K89rdisc            S13cpuspeed
K01smartd          K05saslauthd  K25sshd        K74acpid      K85messagebus   K88pcscd           K90bluetooth        S26lvm2-monitor
K02avahi-daemon    K05wdaemon    K30sendmail    K74apmd       K85rpcgssd      K88syslog          K90network          S99single
K02avahi-dnsconfd  K10cups       K35vncserver   K74haldaemon  K85rpcidmapd    K88wpa_supplicant  K92ip6tables
K02NetworkManager  K10hplip      K35winbind     K74ipmi       K86nfslock      K89dund            K92iptables
K02rhsmcertd       K10psacct     K44rawdevices  K74named      K87irqbalance   K89hidd            K95firstboot
K03rhnsd           K10xfs        K50netconsole  K74nscd       K87mcstrans     K89iscsi           K95kudzu
K03yum-updatesd    K15gpm        K60crond       K74ntpd       K87multipathd   K89iscsid          K99microcode_ctl
K05anacron         K15svnserve   K69rpcsvcgssd  K75netfs      K87portmap      K89netplugd        K99readahead_early
K05atd             K20nfs        K72autofs      K85mdmonitor  K87restorecond  K89pand            K99readahead_later


4、/sbin/mingetty 用户名+密码 决定哪些用户可以登录,哪些不可以。

/etc/login 登陆界面

与三个文件有关

/etc/password /etc/shadow /etc/gshadow

用户登录后,执行对应的 shell

第五个阶段:启动完成

下面 就可以进行自己的工作了 ,暴风雨平静了。

最后总结一下,我们用到的目录和脚本;

配置文件 :
/etc/inittab
/boot/grub/grub.conf
脚本 :
/etc/rc.d/rc.sysinit
二进制程序 :
/sbin/init
/bin/bash
/bin/sh -->/bin/bash
目录
/boot
/grub

由于能力有限,时间有限,写出来的东西也就更有限,先到此结束,路过的大虾有什么意见或建议请直接留言,我会及时改进。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  post MBR grub