2016年(2)
分类: 系统运维
2016-03-30 11:12:51
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)、 启动系统.