军达成 发表于 2011-8-22 15:17:39

备份/恢复MBR和分区表,以及无备份修复MBR及分区表错误;浅

手工备份/恢复MBR和分区表,以及无备份修复MBR及分区表错误;浅谈引导故障和分区方案。( 文章完成65% )
                                (这是我博客中的一篇文章,现在发到这里来)
  年前就开始写这篇文章了。当时我带着我的机器回家(湖北)过年去了,我家里不能上网。在我实现了 Windows + Solaris +Linux 等多个系统共存之后,特别是在为了解决安装 Solaris-10/11 的 x86版到IDE硬盘第二主分区时,能够认出IDE硬盘但无法安装的问题的时候,进行了几次重建分区表和改分区类型的操作之后。我对分区表的认识就达到了一个趋于完整的程度。当时是使用Linux中的fdisk工具的t命令改第二主分区的id为bf ,bf对应的就是solairs的分区了。决定写这样的一篇文章是因为当时一个Linux交流群中的朋友问了关于安装Solaris到硬盘的一个主分区之后删除了其中的一个分区导致无法系统无法启动,我当时就给他提供了两种可行的解决方案。当时(2007-01-24)我就把解决的方法写到了我的博客里,并且发表了。因为一些原因,主要是因为写得太粗糙了,而且年前没有多少上网时间,所以就把这篇文章隐藏了。最近,我回到合肥,并且接了网通的ADSL,就比年前在湖北有更多的上网的时间了。所以就又把这篇文章又改了改,又拿出来了。写博客是比较花费时间和精力的,我也没有多少空闲的时间来做这些事情。所以这篇文章写得也是断断续续的。当然,里面的很多东西是原封不动的照搬过来的,不是完全都只属于我一个人的。之所以说是原创,是因为文章中的每个解决方案和操作都是经过了反复的实践验证的。文章中可能还有一些写错的地方,欢迎揪错。
  分区表出错以及引导问题往往使我们手足无措、甚至欲哭无泪。出现这样的故障之后,轻则重装系统,重则数据全部丢失。很多朋友都吃过这样的亏,我自己也曾经出现过两次丢失数据,而且是全部丢失。
  以前,我一直都是使用的WD的160GB的硬盘。分区的情况是一个10GB的主分区,然后将所有的空间全部划为扩展,再在扩展中创建若干个逻辑分区。这种分区方案是最常见的分区方案,但并非最稳妥、最合理、最通用的分区方案。我的两次分区表出错导致数据全部丢失是因为大硬盘的原因。很多人也许知道微软windows 2000 sp4这个操作系统有个137GB的问题。通常解决这种问题的方法是,在安装windows 2000 sp4之前先只划分一个3GB~10GB++ 的主分区用来安装操作系统。安装时只分配主分区,不分配扩展。安装后再使用Windows2000大硬盘注册表补丁。重启过系统之后,再使用系统自带的磁盘管理工具创建新的分区(这个时候通常是将所有的空闲空间划为扩展分区,并在扩展中创建逻辑分区)。由于打过大硬盘补丁之后,操作系统已经能够识别容量大于137GB的硬盘。此时,就算BIOS中只认了仅仅多于系统分区大小的硬盘容量,由于系统分区能够正常启动,所以也能够正常的管理整块大容量硬盘。
  我的两次分区表出错,就是因为已安装有Windows XP sp2的情况下安装Windows 2000 Serversp4到D盘(扩展下的第一个逻辑分区),让windows 2000 Server sp4的引导覆盖了原先的Windows xpsp2的引导。由于后安装的Windows 2000 Serversp4所在的位置是扩展分区中的第一个逻辑分区,而这个扩展分区就在第一主分区的后面,而且由于在划分主分区之后就将所有的空间划为扩展分区了,那么这个扩展分区的尾柱面是160GB硬盘的最后面的柱面,正好超过了Win2k系统的137GB的限制。在如此安装完Windows 2000 Serversp4之后,系统就无法正常启动了。如果Windows2000在安装的时候直接是把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 :


[ 复制到剪切板 ]代码:
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

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工具,常用的那几个建、删、改分区的命令,需要反复练习实践。

fabiosantos 发表于 2011-10-10 19:00:23

very good informations thank you

yI首简单歌 发表于 2023-7-27 15:22:27

学习学习,感谢分享,谢谢
页: [1]
查看完整版本: 备份/恢复MBR和分区表,以及无备份修复MBR及分区表错误;浅