Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4009
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-16 16:49
文章分类
文章存档

2016年(2)

我的朋友

分类: 系统运维

2016-03-30 11:12:51

linux系统启动过程是入门学习linux系统的基础,掌握必要的启动过程对于今后学习linux是有较大帮助的,一起来看看它的启动过程吧。
第一步:BIOS基本输入输出系统,计算机(PC架构)启动时第一个运行的就是BIOS,BIOS负责检查硬件和查找可启动设备。其实他是一组固化到计算机主板内上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写的具体信息。BIOS可以设置可启动设备,例如USB、CD或者CDROM。
第二步:BIOS找到可启动设备后执行其Boot Sector(启动扇区)的引导代码,主要作用是查找系统的引导程序。引导代码一般为MBR的前466个字节(MBR总共为512字节)。
在总共512字节的里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。剩下的2个代码为55AA,称为“魔数”(magic number),如果该标志错误系统就不能启动。或者也可以这么理解(我也不清楚是哪个准确,但都是这三个部分组成):

MBR 又称作主引导记录,占用 Boot Sector 的前 446 个字节 ( 0 to 0x1BD ),存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序).
DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD), 记录了磁盘的基本分区信息. 主分区表分为四个分区项, 每项 16 字节, 分别记录了每个主分区的信息(因此最多可以有四个主分区).

Boot Record ID 即引导区标记占用两个字节 (0x1FE and 0x1FF), 对于合法引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.
PS:MBR本身与任何操作系统无关,MBR位于硬盘的0道0头1扇区的前446字节上,不属于任何分区。
第三步:MBR中466个字节是不可能启动操作系统的,他只是一个类似指针的东西,主要作用是找到引导程序。linux系统一般引导程序为Grub,他几乎可以引导当前的所有操作系统。Grub相关文件一般保存在/boot/grub目录中。
[root@www grub]# pwd
/boot/grub
[root@www grub]# ls -l
总计 332
-rw-r--r-- 1 root root     63 2015-03-26 device.map
-rw-r--r-- 1 root root   7584 2015-03-26 e2fs_stage1_5
-rw-r--r-- 1 root root   7456 2015-03-26 fat_stage1_5
-rw-r--r-- 1 root root   6720 2015-03-26 ffs_stage1_5
-rw------- 1 root root    626 2015-03-26 grub.conf
-rw-r--r-- 1 root root   6720 2015-03-26 iso9660_stage1_5
-rw-r--r-- 1 root root   8192 2015-03-26 jfs_stage1_5
lrwxrwxrwx 1 root root     11 2015-03-26 menu.lst -> ./grub.conf
-rw-r--r-- 1 root root   6880 2015-03-26 minix_stage1_5
-rw-r--r-- 1 root root   9248 2015-03-26 reiserfs_stage1_5
-rw-r--r-- 1 root root  55808 2009-03-13 splash.xpm.gz
-rw-r--r-- 1 root root    512 2015-03-26 stage1
-rw-r--r-- 1 root root 104956 2015-03-26 stage2
-rw-r--r-- 1 root root   7072 2015-03-26 ufs2_stage1_5
-rw-r--r-- 1 root root   6272 2015-03-26 vstafs_stage1_5
-rw-r--r-- 1 root root   8864 2015-03-26 xfs_stage1_5
[root@www grub]#
其中配置文件为grub.conf。文件stage1大小为512字节,其实这个就是MBR的一个镜像,作为备份用的,stage1会去引导*stage1_5,实际上是加载对应文件系统的支持,接下来就去加载stage2,这个就是引导程序,也就是现在的第三步。
下面打开grub.conf文件,看看有什么?
[root@www grub]# more 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/sda3
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$mCAVv9ST$.P5exR.awc/oVaBUe2ZDn.
title liuhuabin (2.6.18-128.el5)       
       root (hd0,0)

        kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-128.el5.img
[root@www grub]#
其中黄色的就是引导程序,以title开头,default=0就是默认使用第一组title,timeout=5是开机画面的倒计时,splashimage这个是引导界面的背景,可以进行订制,password为进入单用户是编辑需要输入的密码,这个进行了加密,liuhuabin (2.6.18-128.el5)这部分为名字,可以进行修改对系统没有太大影响,root (hd0,0)其中hd0,0表示操作系统存在的位置,hd0为第一个硬盘,0为第一个分区。kernel定义的是我们的内核文件,root=LABEL=/ 表示根分区的位置,这个也可以用UUID表示,至于后面就是内核的一些参数,需要参考文件进行修正。
PS:# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
表示配置文件的目录都是以/boot起始的,所以整理内核文件目录应该是:/boot//vmlinuz-2.6.18-128.el5
[root@www boot]# pwd
/boot
[root@www boot]# ls -l
总计 5584
-rw-r--r-- 1 root root   67937 2009-01-22 config-2.6.18-128.el5
drwxr-xr-x 2 root root    4096 2015-03-26 grub
-rw------- 1 root root 2629601 2015-04-01 initrd-2.6.18-128.el5.img
drwx------ 2 root root   16384 2015-03-26 lost+found
-rw-r--r-- 1 root root   80032 2009-03-13 message
-rw-r--r-- 1 root root  101127 2009-01-22 symvers-2.6.18-128.el5.gz
-rw-r--r-- 1 root root  931457 2009-01-22 System.map-2.6.18-128.el5
-rw-r--r-- 1 root root 1826484 2009-01-22 vmlinuz-2.6.18-128.el5
[root@www boot]#
标红的就是内核文件。
initrd,加载内核文件打包成模块这个模块就是我们这里定义的initrd-2.6.18-128.el5.img,标绿的就是。这里initrd指定模块位置,6版本以后已经对这个进行升级。
这样就可以找到内核(kernel)继续启动了。
第四步:通过grub.conf配置文件启动程序顺利找到内核文件(initrd-2.6.18-128.el5.img)就可以加载内核了。内核加载信息可能在启动的时候我们没有查看,此时可以使用命令dmesg命令进行查看。或者查看/var/log目录下的dmesg文件。
第五步:内核加载时会启动第一个进程init,init是第一个进程也是所有其他进程的父进程,使用top命令可以看到进程名称init的进程,其pid为1。
这个进程其实就是调用/etc/rc.d/rc.sysinit脚本,主要负责对系统进行初始化,挂载文件系统,并根据运行级别启动相应服务。
init运行级别:
0:关机 1:单用户模式 2:不带网络的多用户模式 3:多用户模式 4:未使用 5:图形化模式 6:重新启动
我们常用的就是级别3和级别5,其他的一般不用。
可以通过/etc/inittab配置文件修改默认的运行级别。
例如
[root@www etc]#
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
[root@www etc]#
修改id后面的5即可。
其他关于init的配置文件一般都保存在/etc/init目录下。
[root@lwyc-yhgc-01 init]# ls
control-alt-delete.conf  kexec-disable.conf      quit-plymouth.conf  rcS-sulogin.conf          readahead-disable-services.conf  start-ttys.conf
db2fmcd.conf             plymouth-shutdown.conf  rc.conf             readahead-collector.conf  serial.conf                      tty.conf
init-system-dbus.conf    prefdm.conf             rcS.conf            readahead.conf            splash-manager.conf
可以编辑相应的配置文件实现功能。
在目录/etc/rc.d目录中有文件rc[0-6].d,这些目录各个对应各自的启动级别。
[root@www rc.d]# ls
init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
rc      rc1.d  rc3.d  rc5.d  rc.local
runlevel命令可以查看当前和上一次的启动级别,通过init命令可以切换当前运行级别,例如init 3。
总结:
   (1)、 开机;     (2)、 BIOS加电自检(POST---Power On Self Test),内存地址为0fff:0000;    (3)、 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;     (4)、 检查(WORD)0000:7dfe是否等于0xaa55.若不等于则转去尝试其他介质;如果没有其他启动介质,则显示 ”No ROM BASIC” ,然后死机;   目前BIOS找到了可启动设备,开始执行第五步。 (5)、 跳转到0000:7c00处执行MBR中的程序;     (6)、 MBR先将自己复制到0000:0600处,然后继续执行;    (7)、 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或者不止一个活动分区,则停止;     (8)、 将活动分区的第一个扇区读入内存地址0000:7c00处;     (9)、 检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示 “Missing Operating System”,然后停止,或尝试软盘启动;    (10)、 跳转到0000:7c00处继续执行特定系统的启动程序;    (11)、 启动系统.




阅读(290) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:【linux】启停各种服务的命令

给主人留下些什么吧!~~