分享

备份/恢复MBR和分区表,以及无备份修复MBR及分区表错误;浅谈引导故障和分区方案

 mengxianglove 2009-03-05


[原创]备份/恢复MBR和分区表以及无备份修复MBR和分区表错误,浅谈引导故障和分区方案。(完成66%)
(这是我博客中的一篇文章,现在发到这里来)



手工备份/恢复MBR和分区表,以及无备份修复MBR及分区表错误;浅谈引导故障和分区方案。


-------------------------------------------------------------------------------------------------------------------------------------------


  分区表出错以及引导问题往往使我们手足无措、甚至欲哭无泪。出现这样的故障之后,轻则重装系统,重则数据全部丢失。很多朋友都吃过这样的亏,我自己也曾经出现过两次丢失数据,而且是全部丢失。
  以前,我一直都是使用的WD的160GB的硬盘。分区的情况是一个10GB的主分区,然后将所有的空间全部划为扩展,再在扩展中创建若干个逻辑分区。这种分区方案是最常见的分区方案,但并非最稳妥、最合理、最通用的分区方案。我的两次分区表出错导致数据全部丢失是因为大硬盘的原因。很多人也许知道微软windows 2000 sp4这个操作系统有个137GB的问题。通常解决这种问题的方法是,在安装windows 2000 sp4之前先只划分一个3GB~10GB++ 的主分区用来安装操作系统。安装时只分配主分区,不分配扩展。安装后再使用Windows2000大硬盘注册表补丁。重启过系统之后,再使用系统自带的磁盘管理工具创建新的分区(这个时候通常是将所有的空闲空间划为扩展分区,并在扩展中创建逻辑分区)。由于打过大硬盘补丁之后,操作系统已经能够识别容量大于137GB的硬盘。此时,就算BIOS中只认了仅仅多于系统分区大小的硬盘容量,由于系统分区能够正常启动,所以也能够正常的管理整块大容量硬盘。
  我的两次分区表出错,就是因为已安装有Windows XP sp2的情况下安装Windows 2000 Server sp4到D盘(扩展下的第一个逻辑分区),让windows 2000 Server sp4的引导覆盖了原先的Windows xp sp2的引导。由于后安装的Windows 2000 Server sp4所在的位置是扩展分区中的第一个逻辑分区,而这个扩展分区就在第一主分区的后面,而且由于在划分主分区之后就将所有的空间划为扩展分区了,那么这个扩展分区的尾柱面是160GB硬盘的最后面的柱面,正好超过了Win2k系统的137GB的限制。在如此安装完Windows 2000 Server sp4之后,系统就无法正常启动了。如果Windows 2000在安装的时候直接是把C盘格式化了安装的,此时可以启动到win2k的系统,但是所有的逻辑盘符都不见了,只看到一个容量特别大甚至是超过了120GB的盘符(D盘)。双击盘符,提示未格式化,是否现在格式化?如果格式化,数据将全部丢失。格式化后的磁盘,如果没有再向里面写入数据,大概只有专业数据恢复才有可能完整的恢复原有的数据。

正确认识硬盘分区表和MBR

--------------------------------------------------------------------------------


Linux对硬盘的辨认:
  IDE0 master=/dev/hda IDE0 slave=/dev/hdb
  IDE1 master=/dev/hdc IDE1 slave=/dev/hdd
  SCSI 0=/dev/sda SCSI 1=/dev/sdb

  在Linux中,用字母 a 来表示第一个设备接口,字母 b 表示第二个接口...
  在Linux系统中,IDE0(第一个IDE数据线)上的主接口用 /dev/hda 来表示;IDE0上的从接口用 /dev/hdb 来表示;IDE1的主接口用 /dev/hdc 表示;IDE1的从接口用 /dev/hdd 表示。这四个口可以接四个IDE设备。通常情况下会接一块硬盘到 IDE0 master ,再接一个CD/DVD光驱到 IDE1 master 。如果这四个接口都接了硬盘,那就是主主盘、主从盘、从主盘、从从盘。同一个IDE数据线上的两个接口如果都接了硬盘或者是光驱就需要设置路线,因为它们的路线都是默认的设置。路线设置就在硬盘或者光驱后面的接数据线附近,用上面的路线帽进行设置。
  如果是SCSI设备,第一个接口 SCSI 0 用 /dev/sda 来表示, SCSI 1 用 /dev/sdb 来表示。
  SATA硬盘的表示方法与上面类似,通常一块主板上会有两个 SATA 接口,有的主板上有四个 SATA 接口,记得像这样的主板是支持使用几块 SATA 硬盘组 RAID 的。一般情况 SATA 硬盘会被认作sd*设备,类似 SCSI ,在 Linux 中用类似 /dev/sda 这样的设备名表示。但是,有的主板会把 SATA 硬盘认作像 IDE 硬盘一样的 hd* 设备,在 Linux 中用类似 /dev/hda 这样的设备名表示。


分区表的概念

Linux对硬盘分区的辨认
/dev/hda1表示/dev/hda硬盘的第一个分区
/dev/sda2表示/dev/sda硬盘的第二个分区

  在Linux中,使用数字 1 来表示第一个硬盘分区,用数字 2 来表示第二个硬盘分区...
  例如:用 /dev/hda1表示/dev/hda硬盘的第一个分区;用/dev/sda2表示/dev/sda硬盘的第二个分区。


  分区原理
  一块没有分过区的硬盘就像一张白纸一样,是没有数据的。分好区的硬盘就会具有一定的结构性。分区就是将硬盘分为一定的区域,便于使用。
  一块硬盘最多可以分四个区(主分区)。无论硬盘分多少个区,它的最前面都有一个引导扇区(主引导记录)。
  主引导记录由三部分组成:一部分是446byte的操作系统引导代码,还有一部分是64byte的主分区表。主分区表最多记录四个主分区的分区信息.每个分区占用16byte.分区就是修改分区表,它不影响硬盘上的存储的数据。最后的2字节是结束标志。
  扩展技术:需要将一块硬盘分成更多的分区,超过5个以上的分区,可以将最多四个主分区中的一个分区类型改为扩展分区,然后在扩展分区中再建逻辑分区。逻辑分区的分区信息保存在扩展分区之中,叫做扩展分区表。理论上逻辑分区没有个数的限制。扩展分区不能被直接使用,必须将其划分为若干个逻辑分区。逻辑分区的起始位置的信息都写在扩展分区表里面。逻辑分区的分区编号从5开始,如:/dev/hda5是第一块硬盘的第一个逻辑分区。


  格式化原理
  分好区的硬盘分区上面什么数据也没有,操作系统也不能读写,为了让操作系统能够识别必须向分区中预写入一定格式的数据。这个过程就称之为格式化。在Linux中称为创建文件系统。
  没有分区的硬盘是不能格式化的,没有格式化的分区是不能直接被使用的。所以分区和格式化往往都是同时进行的。

  常用的分区工具以及分区工具的优缺点


  推荐必须掌握的两个分区工具


  Linux 下 的fdisk :

代码:
[table=50%][tr][td][align=left]sles:~ # fdisk /dev/hda The number of cylinders for this disk is set to 19457. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): m[/align][/td][/tr][/table]


    a 设置/取消 活动分区(1-4,任何一个主分区都可以设为活动分区,扩展除外)
    d 删除分区
    l / L 列出支持的分区类型
    m 帮助
    n 新建分区
    p 打印分区(表)信息
    q 退出且不保存已做的修改
    t 设置分区的 id 也就是分区类型要和文件系统对应。
    w 保存分区表并退出
    最常用的就是这些

  实例:


    做重建分区表之前,最好先有备份。备份/恢复分区表推荐使用Linux 中的 fdisk 或者 diskgen 这个dos下的分区工具。
    注意:分区是按柱面分。比如要分 100M 为什么会给分 102M ? 因为,它不可能说一个柱面划了两个区。还有 diskgen 记录
  的是从 0 开始算第一个,而 Linux 中的 fdisk 是把 1 算作第一个。




  图解DOS环境下的diskgen:


  这两个工具都要掌握。特别是linux中fdisk工具,常用的那几个建、删、改分区的命令,需要反复练习实践。



MBR位于硬盘的0磁道0柱面1扇区。
  零磁道处于硬盘上一个非常重要的位置,硬盘的主引导记录区(MBR)就在这个位置上。零磁道一旦受损,将使硬盘的主引导程序和分区表信息遭到严重破坏,从而导致硬盘无法自检。
  硬盘MBR(Main Boot Record)(硬盘主引导记录)及硬盘分区表介绍硬盘MBR就是我们经常说的“硬盘主引导记录”,简单地说,它是由FDISK等磁盘分区命令写在硬盘绝对0 扇区的一段数据,它由主引导程序、硬盘分区表及扇区结束标志字(55AA)这3个部分组成,如下:组成部分 所占字节数 内容、功能详述主引导程序区 446 负责检查硬盘分区表、寻找可引导分区并负责将可引导分区的引导扇区(DBR)装入内存;硬盘分区表区 16X4=64 每份16字节的4份硬盘分区表,里面记载了每个分区的类型、大小和分区开始、结束的位置等重要内容;结束标志字区 2 内容总为”55AA”。结束标志字区 2 内容总为”55AA”这3部分的大小加起来正好是512字节=1个扇区(硬盘每扇区固定为512个字节),因此,人们又形象地把MBR称为“硬盘主引导扇区”。这个扇区所在硬盘磁道上的其它扇区一般均空出,且这个扇区所在硬盘磁道是不属于分区范围内的,紧接着它后面的才是分区的内容(也就是说假如该盘每磁道扇区数为63,那么从绝对63扇区后面的64扇区才是分区的内容)。
  
  主引导扇区结构图
|-------------------------|
|                         |
|                         |
|        Main Boot Record         |
|                         |
|                         |
|       主引导记录 (446字节)       |
|                         |
|                         |
|                         |
|                         |
|                         |
|-------------------------|
|        分区信息 1(16字节)        |
|-------------------------|
|        分区信息 2(16字节)        |
|-------------------------|
|        分区信息 3(16字节)        |
|-------------------------|
|          分区信息 4(16字节)         |
|-------------------------|
|        结束标志 (2字节)          |
|-------------------------|


分区上的引导扇区
  为保险起见,每个分区(包括逻辑分区)上的第一个扇区都将被作为引导区保留。含有引导代码的分区上的引导区也是可以引导操作系统的;不含有引导代码的分区上的引导区不具有引导操作系统的功能。




备份/恢复 MBR 和分区表

  以下以IDE硬盘为例,如果是SCSI硬盘或者SATA硬盘用/dev/sda替换。注意,有些SATA硬盘可能仍然会被认作/dev/hda这样的设备名。


  MBR的备份与恢复:


    Linux系统中备份MBR的方法:
代码:
dd if=/dev/hda of=/MBR_bak bs=512
[count=1color=blue]    Linux系统中从备份文件恢复MBR的方法:[/color]
代码:
dd if=/MBR_bak of=/dev/hda bs=1 count=512
注意!!

    dd命令功能强大且危险,一定不要手快。一定要清楚的知道自己正在做一件什么样的事情。



  DOS环境下备份MBR的方法:




  DOS环境下从备份文件恢复MBR的方法:






  分区表的备份与恢复


  备份分区表以及从备份恢复分区表
    Linux系统中使用的方法:
    fdisk工具的使用:

    备份分区表:
    fdisk -l>/partition_tab.txt
    修改分区表
    通常只要分区表的起始柱面与尾柱面的数值是正确的,是与硬盘上实际的分区结构相吻合的,只是有少数部分需要修改
    的这种情况下,只需要使用fdisk工具的相关命令有针对性的进行修改就可以了。
  重建分区表
  
使用fdisk工具中最常用的几个命令重新创建分区表。重建分区表就是要先删除已有的分区信息,然后重新创建分区表。注意,
  操作之前必须先对将要更改的分区表进行备份。



  sfdisk备份/恢复 分区表

代码:
# sfdisk -d /dev/hdx > /mnt/backup/partab-hdx.sfdisk (备份) # sfdisk /dev/hdx < /mnt/backup/partab-hdx.sfdisk (恢复)

  DOS环境中 备份/恢复 分区表:
  使用 diskgen(早期叫diskman)
    图例:


    备份:


    从备份恢复:





  对于MBR和分区表的备份/恢复,推荐使用Linux的工具和方法。推荐使用Linux中的fdisk操作分区表,推荐dd工具备份/恢复引导扇区。


无备份修复分区表


  结合使用DOS环境中的diskgen和Linux操作系统中的fdisk两个分区工具,对严重出错的分区表进行修复。


Dos环境下的的diskgen




Linux操作系统中的fdisk










实例:
Linux fdisk分区全过程详解

看这里:
零起点构建自己的Linux( LFS-6.2-5 + BLFS-6.2.0 )


=======================================================


修复分区表需要注意的事项以及硬盘分区表的理论知识:

  1. 在做所有修改之前先备份!!由于现在需要对分区表进行修复,所以先需要备份的是现有的分区表还有MBR。把所有的备份文件放到一个安全的地方,例如发邮件到邮箱。
  2. 检查一下当前的分区表,分析一下,什么地方出错了。如果仅仅是分区类型与实际的,硬盘上的分区不符。只需要使用linux中的fdisk工具的t命令进行修改。
  3. 最坏的情况:没有任何分区表信息,需要完全重建分区表。众所周知,DOS环境下的diskgen有个重建分区表的功能,它能够从硬盘上的数据分析出分区结构。对于出错的分区表,它在分析的过程中可能会有一些问题。但是,当它分析出分区信息之后,至少给操作者了一个参考。操作者自己再看一下分区表,分析一下,哪里有问题,通常就可以根据这些信息给出正确的重建分区表的方案。我见过一种分区出错的情况是扩展分区中的最后一个逻辑分区脱离了扩展分区的范围。

  分区原理
  一块没有分过区的硬盘就像一张白纸一样,是没有数据的。分好区的硬盘就会具有一定的结构性。分区就是将硬盘分为一定的区域,便于使用。
  一块硬盘最多可以分四个区(主分区)。无论硬盘分多少个区,它的最前面都有一个引导扇区(主引导记录)。
  主引导记录由三部分组成:一部分是446byte的操作系统引导代码,还有一部分是64byte的主分区表。主分区表最多记录四个主分区的分区信息.每个分区占用16byte.分区就是修改分区表,它不影响硬盘上的存储的数据。最后的2字节是结束标志。
  扩展技术:需要将一块硬盘分成更多的分区,超过5个以上的分区,可以将最多四个主分区中的一个分区类型改为扩展分区,然后在扩展分区中再建逻辑分区。逻辑分区的分区信息保存在扩展分区之中,叫做扩展分区表。理论上逻辑分区没有个数的限制。扩展分区不能被直接使用,必须将其划分为若干个逻辑分区。逻辑分区的起始位置的信息都写在扩展分区表里面。逻辑分区的分区编号从5开始,如:/dev/hda5是第一块硬盘的第一个逻辑分区。

  格式化原理
  分好区的硬盘分区上面什么数据也没有,操作系统也不能读写,为了让操作系统能够识别必须向分区中预写入一定格式的数据。这个过程就称之为格式化。在Linux中称为创建文件系统。
  没有分区的硬盘是不能格式化的,没有格式化的分区是不能直接被使用的。所以分区和格式化往往都是同时进行的。

  从上面可以知道,一块已经有数据的硬盘就算没有分区表,它也是具有结构性的。先前的每个分区之间是有明确的分界点的。为什么这么说?因为,在格式化或者说创建文件系统的时候将会按照先前的分区表信息中的分区的起始柱面进行“规化”。当真正的进行过创建文件系统的操作之后,硬盘就具有了结构性。让硬盘具有结构性是为了让操作系统能够识别。操作系统在识别硬盘的时候不仅仅会检查每个分区的分区表信息(起始位置,分区类型等),还会检查当前的分区(物理位置为硬盘上的一个柱面到另一个柱面)的文件系统是否为当前操作系统所能够识别,如果能识别还需要检查其中是否有错误,如果有错误将采取什么措施?
  综上所述,无论分区表出现何种故障,在修复分区表或者是重建分区表的时候都是有机可寻的。而不会是毫无根据的。



选择一种最适合系统的分区方案

--------------------------------------------------------------------------------
最佳分区方案:
  MBR的前446字节是用来存放引导操作系统的代码的,接下来的64个字节就是用来记录分区信息的,也就是分区表。每个分区占用16个字节,四个分区的分区信息共占用64字节。最后的2字节是结束标志。
  早期的硬盘容量都很小,对于早期DOS时代来说,一块硬盘分四个区已经足够了。我在1996年的时候接触过UCDOS、WPS排版软件。当时我只会简单的几个DOS命令,对硬件一点都不了解,但我想那个时候的大概两、三百兆的硬盘就算是好大好大的了。
  我们现在的硬盘,小的有40GB,常见的台式机硬盘都已经是120GB的了。我想,绝大多数的人都一定不会把整块硬盘只分一个区的。大多数的分区方案都是这样的:先划分一个主分区用来安装操作系统,然后将所有的空闲空间全部划分为扩展分区,再在扩展分区下建几个逻辑分区。这种分区方案是最常见、最普遍的。通常我们在配机器的时候,这个分区都不是我们自己分的,是销售商给我们分的区。在买机器的时候,通常装机的工作人员会问分几个区以及每个分区分多大。一块120GB的硬盘,有很多人都这样分区:C盘分20GB用来装系统和应用软件,D盘分30GB用来存放游戏,E盘分30GB用来存放音乐或者电影之类的,剩下的空间全给F盘用来存放备份的数据。通常像这样的分区的C盘是主分区,文件系统为Fat32或者NTFS;D盘、E盘、F盘,这些都是扩展分区下的逻辑盘符。如这样的分区方案不是一种很好的分区方案,这样的分区方案严重的造成了硬盘空间的浪费。在分区之前,我们应该先考虑到的是将要在硬盘上安装何种操作系统。首先应该了解操作系统的默认安装对硬盘有什么要求?操作系统需要或者必须安装在哪个分区上,是必须安装在哪个主分区或者将要安装在哪个逻辑分区上?默认安装或者说最小安装需要多大的硬盘空间?考虑操作系统使用多大的虚拟内存(通常为物理内存的1.5~2倍),虚拟内存是否与操作系统的系统文件放在同一分区上?安装完操作系统之后的系统补丁将会占用系统分区多少空间?接下来考虑的才是应用软件的安装,通常需要使用一些什么软件,有什么大型软件需要使用,如果将它们安装在系统分区需要占用系统分区多少空间;如果将它们不安装在系统分区而是其它的分区上需要往系统分区写入的文件总共会占用系统分区多大的空间,需要占用其它分区多少空间?考虑过了这些之后就基本上可以给操作系统所在的分区划分一个比较适合的空间了,这样既能够保证系统的正常运行也能够不至于造成系统分区中大量的硬盘空间被闲置。知道了要安装多少软件,有多少大型软件之后,就能够为存放应用软件的分区分配一个比较适中的空间。然后是许多朋友都比较喜欢玩大型的网络游戏或者单机游戏,现在的这些游戏都特别占用硬盘空间,动辄1GB到2GB不等。如果同时喜欢玩两种以上的游戏,如果游戏占用的硬盘空间已经远远超过了5GB,强烈要求不要将游戏的程序文件和日常的办公软件的程序文件存放在同一个分区上了。然后是至少应该划分一个用来存放单个大文件的分区,因为这样的分区就是存储区或者叫备份区,一般文件存下之后就不会经常的有改动了,通常情况下也就是放在那里不动的了。如果是作为一般的应用,可以把所有的剩余空间都划为备份区。当然,更好的一种方法是,按需分配,只分配一个小存储区,还有多余的空间就暂时不分配。比如说120GB的硬盘,实际可用空间大约110GB左右。分配了8GB~12GB的第一主分区作为C盘,用来安装Windows Server 2003 R2 sp1或者Windows XP之类的;所有的剩余空间划为扩展;扩展下的第一逻辑分区分了5GB的D盘,用来存放一些办公软件、播放器、聊天工具、图形图像处理软件;扩展下的第二逻辑分区E盘,用来存放特别占用硬盘空间的的大型网络游戏和单机游戏,分配10GB~30GB不等;然后是F盘,用来作为存放备份文件的小存储区,分配10GB~20GB左右;最后还有空间可以暂时不分配,也可以立即就分配所有剩余的空闲空间为一个分区作为大存储区。对于大存储区的原则是,尽可能的集中,不要只分配个20GB或者30GB这样的不疼不痒。这种分区方案适用于Windows XP / 2003 ,当然也可以适合Windows 2000系列。当然,我想现在大概用windows 2000的已经不太多吧?通常都是XP,稍微懂一点计算机的都使用windows Server 2003 R2 Sp1了。在一台处理器高于赛阳2.4GHz,内存为512MB,硬盘为5400转/秒或者7200转/秒,显存够用的台式机或者笔记本电脑上,正常情况下,使用Windows XP-sp2 要比 2000sp4要快;使用Windows Server 2003 Sp1要比XP要明显快很多;在这样的同等硬件环境下,使用同样的应用软件,无论是开/关机,还是程序运行效率,2003sp1都占绝对优势。当然,也有一些软件在2003sp1上是不兼容的或者完全无法使用的。但是,大多数的日常使用到的办公软件之类的是完全可以在2003sp1上使用的。甚至有很多人都使用2003sp1的个人版或者企业版玩游戏。
  上面的这种分区方案可能不适合微软下一代操作系统 Vista 的安装。Vista的32位版需要一个最少6GB的主分区或者逻辑分区用来存放系统文件;64位版需要一个大于囗囗GB左右主分区或者逻辑分区来存放系统文件,我以前为了积极响亮微软的号召曾经在自己的机器上进行过Vista的测试活动,安装过64位版的Vista测试版,专门使用了一个15GB的逻辑分区用来安装。由于是从64位xp以及2003上用64位虚拟光驱实现从硬盘安装,这对第一主分区和第二个可用分区的空间是有要求的。比如有些测试版的Vista对第一主分区(启动分区)要求至少需要700M以上的可空间,有些测试版对第一主分区要求的空闲空间只有不到200M。由于安装方式的特殊,使用虚拟光驱载入DVD版iso映像,在安装过程中会将一些安装文件复制到硬盘,如果第一主分区上的空间有限,只能达到前面说到的最低要求,就会将安装文件复制到第二个分区。第二个分区的空闲空间必须要大于这个DVD版的ISO文件的大小。如果达不到以上要求,肯定是会报错,提示由于哪个分区上空间太小无法复制安装安装的。当然,如果C:\boot.ini文件属性为只读,也是装不上的。
  对于一般的用户来说,我刚才提到的那种分区方案或者可以借鉴一下。每个人的应用不一样,所以每个人的最适合的分区方案都不尽相同。但这种思想,这种合理使用硬盘空间的思想是值得提倡的。
  对于像我这样的喜欢鼓捣软件,喜欢尝试更多新奇事物,喜欢尝试在一块硬盘上实现Windows + Unix + Linux、喜欢在硬盘上安装N++个操作系统的人来说,是永远不会有一个最佳的分区方案的。俗话说得好,计划不如变化。相信许多朋友已经有和我相同的体会了。那么有没有一个办法能够提前的减小这种因为变化带来的麻烦呢?这个问题就是接下来,我将要讲到的非常见的分区方案。

为什么多系统共存要提倡为一块硬盘分配3个主分区
  1. 首先是实现可以灵活的在三个主分区中挑选任意一个主分区为第一启动分区。前面讲到了,以前的早期的硬盘在分区的时候最多可以给一块硬盘分四个主分区。这四个分区中可以任意的选择其中的一个分区或者多个分区为活动分区,注意,只有设为了活动分区的分区才是可启动的。所以活动分区又称为启动分区。早期的硬盘最多只能分四个区,有了扩展技术之后,就把MBR中的记录的四个分区表中的不是扩展的分区称之为主分区。这是为了与扩展分区相区别。在BIOS读取MBR中的那446字节的引导代码之后,会检查MBR中的分区表中那个分区被设为了活动分区,通常会选择从第一个活动分区启动。如果需要安装多个不同的操作系统到同一块硬盘上,而且实现多启动,最好的分区方案是给一块硬盘分配几个主分区。其中,微软的Windows操作系统是必须要占用一块硬盘的第一个主分区的,因为它的引导文件必须存放在第一主分区。而且微软windows系列的引导代码是默认会写入到MBR中的前446字节的,同时也会写入到第一个主分区的第一个扇区。这些在安装过程中是无法手动修改的。还有Unix系列的操作系统是必须要使用一个主分区的,他们的引导代码也是会覆盖MBR中的那446字节的。唯独只有Linux是即可以安装在主分区也可以安装在逻辑分区的。要解决这样的”抢占“MBR引导区的矛盾,最好的方法就是安装前备份整个带引导代码和主分区表的MBR导出为文件备份一次,在安装完成之后MBR中的引导代码被覆盖之后也应该同样的将MBR导出为文件。这样的备份文件正好是512字节,也就是前面说到的446字节的引导代码和64字节的用来记录四个主分区的分区表还有2字节的结束标志。有了这样的备份文件,就可以在必要从备份覆盖MBR从而达到修复引导故障和还原主分区表信息目的。前面我反覆的强调了MBR的备份文件和MBR有着完全相同的特性,心细朋友的一定能够想到因为MBR的备份文件中带有引导信息,在一定的条件下是可以通过读取MBR中的引导信息实现引导操作系统的。实际应用中也用到了这样的方法来解决引导问题的。补充一下,为了保险起见,每个分区的第一个扇区都具有类似于MBR的功能,每个分区的第一个扇区都是引导区。这也就是为什么可以把Linux的引导装载程序安装在分区上的原理。把引导装载程序安装在分区上,实际上就是向这个分区的第一扇区中写入了引导代码。这个引导代码需要占用446字节(猜测)。通过一定的条件载入带有引导代码的某个分区上的第一个扇区的备份文件也是快速的把引导控制权交给这个分区的比较有效解决方案之一。我们知道,只有MBR中的四个主分区才有可能最优先的被启动。而决定从那个分区开始启动的是活动分区标识在哪个分区上,多个活动分区的情况会优先从第一个活动分区启动。
  2. 给一块硬盘分配3个主分区之后,将所有的空闲空间划为扩展。这种分区方案有效的利用了分区表资源。
  3. 减少了分区表出错的概率,在一定程度上减少了因为分区表错误的发生而造成的灾难。
  4. 为多系统共存以及多引导提供了便利。



简述引导故障的解决方法:
Windows操作系统引导故障修复方法


首先是讲一下 MBR 和 MBS 。

( MBR ) master boot record 主引导记录

  主引导记录是整块硬盘的第一个扇区。它位于零磁头零柱面1扇区。MBR的前446字节为引导操作系统的引导代码,接下来是64字节的主分区表,主分区表可以记录四个分区的信息,每个记录占用16字节。引导代码和分区表信息占用了MBR的510字节,而决定MBR是否可用的是最后的2字节。BIOS通过检测这2字节以确定MBR是否有效。  MBR所在的这个柱面(63个扇区)是被保留的。MBR后面的柱面才是实际可以分配使用的空间。通常我们会根据需要将这些可用空间划分为若干个分区,然后再为一个或者多个硬盘分区创建文件系统,使得操作系统能够识别。这样,我们才能够在这些空间里读写文件,当然也可以将操作系统安装到这里。

( MBS )master boot sector 主引导扇区

  主引导扇区是分区上的第一个扇区。硬盘上的每个扇区的大小都是512字节。MBR的大小是512字节,MBS同样也是512字节。主引导扇区--分区上的第一扇区,它具有和MBR同样的引导操作系统的功能。前提是这个主引导扇区上有能够引导操作系统的引导代码。我想,每个分区的第一个磁道应该都是被保留的。未验证是否正确,我猜测的。怎么?不允许猜测?爱因斯坦的相对论都是猜测的,怎么就不允许我也猜测一下呢,对吧?

  出现引导故障之后,如果此时重新安装Windows XP sp2到C盘,将引导覆盖掉,就可以正常的启动到windows XP sp2了。这种方法比较常用,也相对比较有效。但这种方法并不可取。正确的方法应该是从原安装光盘启动(可以是更高版本),在安装的时候,如果有提示是否升级安装不要升级安装,按Esc键。然后是看屏幕上的提示按 R 键进入修复控制台。控制台下都是用键盘操作的,是黑底白字的命令行。不要被这种陌生感吓坏。当进入windows系统修复控制台后,根据提示,输入阿拉伯数字并按Enter键选择要修复的系统,如果要修复的系统是在第一分区,按1并敲回车键就可以了。现在就可以使用敲命令的方式来修复系统了。控制台下只提供了少数的命令,这些命令不需要都会,掌握一两个有用的能够解决实际问题就可以了。现在先 help 一下,看看提供了多少命令?此时一屏显示不完,按Enter键继续显示。如果现在需要将MBR中的引导代码修改为能够启动到现在的正准备修复的系统的引导代码,输入 fixmbr 然后按 Enter 键。要退出并重启计算机,输入 exit 并按 Enter 键。
  如果按照上面的方法修复引导装载程序之后,仍然无法引导系统。此时仍然是进修复控制台,不同的是先 fixboot 重建引导区,然后再 fixmbr 。最后 exit 退出并重系统之后就应该能正常启动系统了。
  fixboot 这条命令是向第一主分区的第一扇区写入引导代码,告诉系统启动时将从哪个分区找引导和配置文件。而fixmbr的作用是将第一主分区第一扇区的446字节的引导代码写到MBR的前446字节。

Linux操作系统引导故障修复方法


  GRUB
  修复引导装载程序
    如果是系统原来可以引导的,但突然不能引导了。可以使用系统安装光盘自带的修复引导装载程序。当然,不一定必须要
  原光盘,有iso文件也行,只要能启动安装向导进入修复模式就可以了。
    RedHat系列的,包括企业版,可以在从第一张安装光盘启动时按F5键或者在boot提示符后敲入linux rescue然后按Enter
  键进入修复模式。挂载原先的linux根分区( mount /dev/hda7 /mnt ) ,然后 chroot /mnt ,用 grub 稍等数秒之后敲入
  root (hd0,6) 按Enter键,再 setup (hd0) 就是写到第一硬盘的MBR了。或者 grub-install /dev/hda  。


    SuSE系列可以使用安装光盘自带的引复工具。同上,不一定必须是光盘,iso也是可以的。只有有方法启动安装向导就可
    以了。在选择安装方式时,不选全新安装也不选更新安装,选最下面的那个,然后是修复已安装的系统,接下来要用全
  手工的方法修复引导装载程序。按向导做就可以了。但是有时候命令方式更好一些,可以按Ctrl + Alt + F9 键到字符环境下,修
  复方法与下面的LiveCD的修复引导装载程序的方法相同。
  如果是用LiveCD启动:
  mkdir /mnt/hda7 && mount /dev/hda7 /mnt/hda7
  mount -t proc /proc /mnt/hda7/proc
  mount -o bind /dev /mnt/hda7/dev
  chroot /mnt/hda7
  grub
之后就是GRUB命令模式了
  root (hd0,6)
  setup (hd0)
  quit
  reboot

  当然也可以安装到某个分区的第一扇区上。通常安装到 boot 目录所在的分区,或者是 / 所在的分区。例如安装到 /dev/hda3 就是 setup (hd0,2)

  grub引导配置文件/boot/grub/menu.lst


全新安装引导装载程序
  全新安装引导装载程序就需要从源码包或者rpm之类的grub安装文件全新安装了。因为先前的系统已经无法引导,这时需要一个运行中的Linux系统chroot到需要修复的系统中进行维护工作。

lilo
/sbin/lilo -v
lilo引导配置文件 /etc/lilo.conf
系统无法启动,要修复lilo引导装载程序,方法还是和上面的grub差不多。只是命令和配置文件不一样。


巧用引导区的备份文件解决引导问题


使用Linux中的dd备份引导区

  dd 命令备份引导区,轻松解决多系统引导问题。例如现在 GRUB 被装在MBR,只需要装MBR这个扇区用dd导出为文件。可以使用其它的引导装载程序来载入这个含引导代码的引导区的备份文件,从而引导操作系统。也可以用备份文件恢复引导区。
  备份MBRdd if=/dev/hda of=/MBR_xxx bs=512 count=1从备份文件恢复MBRdd if=/MBR_xxx of=/dev/hda bs=1 count=512备份分区上的引导区也是类似的。注意dd命令功能强大且危险,一定不要敲错了。从引导区备份文件引导系统:GRUB 命令模式或者改ment.lst文件
-----------------------# title SUSE Linux Enterprise Server 10
chainloader (hdn,m)/MBR_xxxboot

*****************************

windows把引导区备份文件放到C盘根目录或者子目录也可以。然后改C:\boot.ini文件。C:\boot.ini
-----------添加以下内容-----------
C:\MBR_linux="Linux"

*********************************
然后保存。注意,改此文件,要确定文件的属性首先是不只读的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多