BIOS、MBR、PBR等基础知识


BIOS、MBR、PBR等基础知识,兼谈U盘、移动硬盘以及操作系统的安装与启动基本原理
2009年03月23日 星期一 08:48


    一、基本概念
    1、BIOS的概念 
  BIOS(Basic Input/Output System,基本输入输出系统)全称是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际是一组被固化到电脑中,为电脑提供最低级最直接的硬件控制的程序,它是软件程序和硬件设备之间的枢纽,通俗地说,BIOS是硬件与软件程序之间的一个“转换器”或者说是接口(虽然它本身也只是一个程序),负责解决硬件的即时要求,并按软件对硬件的操作要求具体执行。
    BIOS,它在计算机系统中起着非常重要的作用。一块主板性能优越与否,很大程度上取决于主板上的BIOS管理功能是否先进。BIOS芯片,在主板上表现为一块长方型或正方型芯片。

    主要作用:负责检查硬件并且查找可启动的设备(即设备上有引导信息)。

    硬件故障会有报警音。

    可启动设备有:HD(硬盘),USB(U盘),CDROM(光盘),查找可启动设备的顺序是可以在BIOS中设置的。

    如何识别是否是可启动设备:查看第一扇区的最后两个字节是否是55,AA。

    由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本,新版本的BIOS比起老版本来说,功能更强。

  

    2、MBR的概念
    主引导扇区位于硬盘的0磁道0柱面1扇区,共512bytes,由三大部分组成:
    硬盘主引导记录MBR(Master Boot Record)占446bytes:即引导代码,不同系统的引导代码各不相同。
    分区表DPT(Disk Partition Table)占64bytes
    硬盘有效标志MN(Magic Number)占2bytes。AA和55被称为幻数(Magic Number),BOIS读取MBR的时候总是检查最后是不是有这两个幻数,如果没有就被认为是一个没有被分区的硬盘
    主引导扇区包含的MBR、DPT、MN,这3个区域是操作系统无关的,在每块硬盘上都存在;MBR是一段可执行程序,由各个操作系统写入不同的代码。 MBR的存储空间限制为446字节,MBR所做的唯一的事情就是装载第二引导装载程序。Windows产生的MBR装载运行PBR;GRUB产生的MBR装载运行grldr。

    GRUB是linux的主流引导程序,几乎可以引导所有的操作系统。在/boot/grub目录中存放与grub程序有关的文件。

/boot/grub/grub.conf文件为Grub程序的配置文件,用来配置启动操作系统的信息。

/boot/grub/stage1 是当前硬盘MBR的一个备份,512字节。

之后加载文件系统驱动,即以stage1_5为结尾的文件。默认支持十种文件系统,有iso,fat,e2fx等。

之后加载stage2文件,真正的启动引导程序,该部分会去加载操作系统的内核。

    现在的linux也支持efi的启动方式。


    3、操作系统引导过程
    主引导记录(Master Boot Record,MBR):512字节,位于硬盘的第一个扇区;可存放一小段程序及主分区表。MBR的boot code占用其中的前446个字节,随后的64个字节为DPT(Disk Partition Table,硬盘分区表)。
    XP系统引导过程是,BIOS自检后,DPT把系统控制权交给硬盘第一个分区的PBR(Partition Boot Record),XP的PBR会去找这个分区的ntldr,之后是boot.ini,选择启动的系统后load注册表,交控制权给ntoskrnl,然后加载驱动,系统配置等等。
    Vista的PBR不再找ntldr,而是找bootmgr,这个文件也是保存在硬盘第一个分区的根目录下.之后,bootmgr去找同路径下的\boot\BCD. BCD这个文件实际是一个注册表文件,里面的数据保存了系统的引导信息,如果是多系统引导,会提供引导的界面内容. 如果是单Vista系统,控制权会交给winload.exe,之后再去找ntoskrnl.exe.
  扩展引导记录(Extended Boot Record,EBR):512字节,位于扩展分区的第一个扇区,存放逻辑分区信息。
  分区引导区(Partition Boot Record,PBR):512字节,位于每个非扩展主分区及每个逻辑分区的第一个扇区;可存放小段程序。
  活动分区(Active Partition):可将所有主分区和逻辑分区中的一个标识为Active,表示系统启动时即加载运行其PBR程序的分区。
    DBR : DOS引导记录(DOS Boot Record)应称为OBR(OS Boot Record),意思是活动分区的PBR,即操作系统引导记录。

    

    二、分区概念

    一个硬盘的分区有Primary(主分区)、Extended(扩展分区)、Logical(逻辑分区)三种。
    1、主分区
    如果你只有一个硬盘,那么这个硬盘肯定应该有一个主分区,以前DOS必须在主分区才能启动。建立主分区的最大用途便是安装操作系统,另外如果你有多个主分区,那么只有一个可以设置为活动分区(Active),操作系统就是从这个分区启动的,当然了,只允许有一个活动分区,所谓的“激活分区”就是将某个主分区设置为活动分区。
    2、扩展分区
    因为主分区有先天的限制(最多只能有4个),扩展分区就是为了解决这种限制应运而生的,但是需要记住的是:它可是不能直接用来保存资料的,扩展分区的主要功能就是让你在其中建立逻辑分区,而且事实上只能建立20多个。
    3、逻辑分区(逻辑驱动器)
   从上面的介绍你可以了解到,逻辑分区并不是独立的分区,它是建立在扩展分区中的二级分区,而且在DOS/WINDOWS下,这样的一个逻辑分区对应于一个逻辑驱动器(Logical Driver),我们平时说的D: E:........一般指的就是这种逻辑驱动器。
   4、分区的限制
   一个硬盘最多只能划分为4个主分区,或者是3个主分区加上一个扩展分区,这是因为在硬盘的开头,也就是主引导扇区总共512字节存放着MBR占 446bytes,DPT分区表占64bytes以及硬盘有效标志占2bytes,由于记录空间只有那么大,所以也只能记录这4个分区的信息。


  三、一般单操作系统启动过程
  1.BIOS加载并启动保存在硬盘MBR中的引导程序,该引导程序一般在操作系统安装时写入
  2.MBR引导程序扫描所有分区表,找出活动分区(Windows MBR程序只会在MBR中的分区表中查找活动分区,即Windows只能安装在主分区;Linux无此限制)
  3.MBR引导程序加载并启动保存在活动分区PBR中的引导程序
  4.活动分区PBR中的引导程序加载并启动安装在其上的操作系统(例如对Win98,定位并执行io.sys;对WinXP,定位并执行 ntoskrnl.exe;对于Linux,定位并执行vmlinuz-xxx内核映像)。显然PBR引导程序与操作系统密切相关,一般在操作系统安装时写入。
  总结为:BIOS–>MBR—>PBR–>OS files


  四、修改标准过程实现按需启动指定操作系统
  使用BootLoader等软件置换MBR中的引导程序或PBR中的引导程序(即操作系统的引导程序,主要用来加载内核),如Windows的NTBoot Loader,Linux下的Lilo、Grub等。Windows NTBoot Loader一般用于在一台机器上安装多个Windows系统;Lilo或Grub用于在一台机器上安装多个Linux系统或同时安装Linux和Windows系统。


  五、MBR损坏及修复
    MBR的损坏不会危及数据,修复也很简单,重写MBR就是,DOS下面的fdisk/mbr即可修改DOS引导,像DISKGEN等工具修改MBR更是随手拈来。


    六、从U盘或移动硬盘启动操作系统的步骤:
    1、U盘格式化后(FAT32或NTFS都可以),把U盘激活成活动分区(可使用DiskGenius硬盘分区软件)
    2、写入U盘活动分区的PBR,以达到PBR读取bootmgr文件的目的(可使用Vista或windows7自带的 bootsect.exe 进行操作)
    3、复制相应启动文件到U盘根目录
    4、修改bios启动顺序从U盘启动即可

    移动硬盘:开机识别成 USB-HDD
    在XP中格式化成FAT32、NTFS格式的U盘:开机出现在BIOS的Removable Device中,识别成USB-ZIP,默认为主分区非活动分区。可以用DiskGenius激活为活动分区,再开机识别为USB-HDD。
    量产成HDD的U盘:开机出现在BIOS的Hard Disk中,识别成USB-HDD,默认自动设置为活动分区。


BIOS引导MBR中的Boot Loader,Boot Loader载入Kernel, INIT初始化并决定系统的运行级别。
	1>在刚开机时 ,由于 80x86 的特性 CS ( Code Segment ) 这个寄存器中全部都放着 1 , 而 IP ( Instruction Pointer ) 这个寄存器中全部都放着 0 ,换句话说 , CS=FFFF 而 IP=0000 。 此时 , CPU 就依据CS 及 IP 的值 , 到 FFFF0H 去执行那个地方所放的指令 。这时候 ,由于FFFF0H 已经到了高位址的顶端 ,所以  FFFF0H 这个地方 ,总是会放一个JMP 指令 ,跳到比较低的位址 。 接著 , ROM BIOS 就会作一些检查的动作像内存 、 键盘等...... 并在我们俗称的 UMB ( Upper Memory Block )之中扫描 ,看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) 。假如有就到里面去执行一些东西 , 执行完之后再继续刚才的行程 。 到了最后 ,读取硬盘上的第一个 sector 。 在这里 , 假设系统是由硬盘启动。因此 , 就硬盘的构造而言 ,它的第一个 扇区称为 MBR ( Master Boot Record ) 。 因为一个 sector 是 512 bytes , 而 MBR 这 512 bytes 可分为两个部份 ,第一个部份为 Pre-Boot 区 , 占了 446 bytes; 第二部份是 Partition Table Record , 占了 66 bytes 。 Pre-Boot 区的作用之一 ,就是去看看哪个 Partition 被标成 Active , 然后去读那个 Partition 的Boot区 。
	2>在 Linux 的启动方面 , 一般人最常把 LILO或Grub 放在 MBR 或 Superblock ,假如你把LILO或Grub 放在 MBR ,那很明显的,当读取到 MBR 的时候 ,LILO 或Grub就被执行 。 此时你的屏幕上会出现启动选项接着 ,就进行 Load Kernel的动作。在另一方面来说,假如你把 LILO或Grub安装在 Superblock , 通常你还会有一个管理开机的程序 ,也许是放在 MBR ( 像 OSBS ) 或者是放在一个单独的 Partition ( 像 OS/2 的 Boot Manager) 。再由这个管理开机的程序去读取 LILO或Grub , 进而做 Load Kernel 的动作 。到了目前为止 ,  Kernel 被load 到 memory 中之后 ,接着进行一连串 probe 周边的动作 ,像串口、并口 、 软盘 、 声卡 、 硬盘 、 光驱 等 ...... 接着 mount root partition 。 在这之后 kernel 会起动 init 这个 process 。init 这个 process 的 PID 为 1 ,它是所有 process 的祖先 ,它会根据运行级别来启动相应的服务和程序。  
init 初始化
init从/etc/inittab中读取数据并初始化
– init运行级别
– 系统启动脚本
– 执行运行级别对应目录下的脚本
– 设置热键
– 定义UPS设备脚本
– 在虚拟控制台上循环开启getty进程
– 定义runlevel 5时的X显示管理器
  init是所有进程的父进程。在核心加载完成后总是先启动。
  init 这个 process 会依据 /etc/inittab 中所记载的内容进入不同的 run-level 并启动不同的 process 。 所以 inittab 的重要性可见一斑 , 那什么叫 run-level 呢 ? 所谓 run-level 就是系统中定义了许多不同的 level(等级) ,而系统会随著 level 的不同而去启动不同的资源 。
 
 
runlevel 命令可以显示上一个和当前运行级别,如果没有上一个运行级别,则显示N。
init命令可以改变当前运行级别。
单用户模式可以修改root密码。
 
 
grub加密。
grub-md5-crypt 命令可以生成一个加密的密码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值