修复主引导扇区(windows、linux)

1、Win98引导盘

fdisk /mbr

2、Win2000 或 WinXP 引导光盘

用光盘引导,按R进入修复界面

选择控制台

进入控制台

用 help 查看支技的命令

用 FixMBR 命令可以修复引导扇区

 

3、linux引导扇区的修复

由光盘启动,进入修复模式。当看到启动引导符号的时候,输入grub进入GRUB控制系统:

 #grub

#grub> find  /boot/grub/stage1 找到stage1所在盘
(hd0,0)
   #系统返回/boot所在分区信息,各个系统不同,根据实际为准 

#grub>root (hd0,0)    #配置系统启动磁盘在刚才找到stage1的磁盘上,也就是系统中/boot所在的分区;
#grub>setup (hd0)     #把GRUB写到MBR上;

#grub>quit

#reboot

 

4、linux系统下修复引导扇区

    linux 用dd命令读写引导区文件

    备份MBR,linux下使用如下命令:

# dd if=/dev/hda of=/root/linux.bin bs=512 count=1

这里注意使用if=/dev/hda备份MBR中数据,如果grub安装具体某个分区,则要自己选择了。

写入 mbr:

dd if=/mnt/windows/linux.lnx of=/dev/hda bs=512 count=1

备份之后linux.bin文件可以复制到Windows下,备份一份,另一份复制到C盘根目录下。然后修改boot.ini文件,添加如下一行:

C:\linux.bin=“Linux“

这样就可以利用WindowsNT loader来引导linux系统了。以后恢复和修理linux会更加方便。

 

把引导扇区复制到U盘:

查看主引导扇区安装位置和U盘位置。

root@bogon:~# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000be363

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    39845887    19921920   83  Linux                                             ---------》系统主引导扇区
/dev/sda2        39847934    41940991     1046529    5  Extended
/dev/sda5        39847936    41940991     1046528   82  Linux swap / Solaris

Disk /dev/sdb: 7776 MB, 7776239616 bytes
255 heads, 63 sectors/track, 945 cylinders, total 15187968 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xcad4ebea

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb4   *          63    15187967     7593952+   c  W95 FAT32 (LBA)                       --------------》U盘
root@bogon:~# dd if=/dev/sda of=/dev/sdb bs=512 count=1

 

系统引导原理:

第一步,预启动:首先计算机通电进行自检,并由BIOS(即基本输入输出系统)扫描硬件并完成基本硬件配置。这些都是固化在BIOS中的程序完成。

第二步,读取硬盘的MBR(主引导记录 —— 引导器)检查硬盘分区表以确定引导分区。一般来讲引导器都有一个配置文件。

第三步,并将引导分区上的操作系统引导扇区调入内存中执行,此处即执行NTLDR(操作系统加载器)文件。
第二步,启动:首先进行出始化,NTLDR会把处理器从实模式转换为32位保护模式。然后读取BOOT.INI文件。
第三步,.装载内核:引导过程开始装载XP内核NTOSKRNL.EXE。这个文件位于Windows2000/XP安装文件夹下的SYSTEM32文件夹中。随后,硬件抽象层(HAL)被引导进程加载,完成本步骤。
第四步,初始化内核:内核完成初始化,NTLDR将控制权转交Windows2000/XP内核,后者开始装载并初始化设备驱动程序,以及启动WIN32子系统和WINDOWSXP服务。
第五步是用户登录,登录后,XP会继续配置网络设备和用户环境。最后,伴随着系统的开机音乐声和我们熟悉的桌面,Windows XP漫长的启动过程终于完成。

 

 

了解多系统启动基础知识:
  在使用XRLDR之前,我们先来了解一下系统启动相关知识,这样可以让大家更好地理解和配置多系统的启动。
硬盘上的系统一般启动程序是这样的:开机自检 —> 加载硬盘主引导记录(MBR) —> 搜索并激活系统引导文件 —> 加载启动配置文件 —> 加载系统核心文件 —> 完成启动。
       winxp(2000)系统启动:开机自检-主引导记录(格式为NT52)-搜索并激活系统引导文件ntldr-加载启动配置文件-加载系统核心文件-完成启动。
       win7(vista)系统启动:   开机自检-主引导记录(格式为NT60)-搜索并激活系统引导文件bootmgr-加载启动配置文件(c:\boot\bcd)-启动winload.exe-加载系统核心文件-完成启动。

  比如,对于在WinXP基础上安装Win7双系统用户,安装Win7后它会更改主引导记录并使用Bootmgr管理多系统启动。它的引导流程是:自检后加载NT60主引导记录,然后查找引导文件“C:\Bootmgr”并激活之,接着,加载“C:\boot\bcd”启动配置文件并列出多重启动。如果选择启动“Windows 7”,Bootmgr会根据BCD启动信息配置,将控制权交给Win7系统目录下的“Winload.exe”,加载系统核心文件,然后开始启动Win7。如果选择启动的是旧版本的Windows系统,Bootmgr会将控制权交给“NTLDR”,加载启动配置文件-加载系统核心文件-完成启动。注:bootmgr可以启动xp和linux系统。
 
常见系统引导文件:
  硬盘主引导记录和具体操作系统并没有必然的联系,它是在操作系统启动之前加载的一段代码。不同类型的引导记录区别在于加载引导文件的不同,比如NT60记录,它会去查找“C:\Bootmgr”并加载之。Bootmgr既可以引导WinXP,也可以引导Linux系统。具体引导什么系统是由系统启动配置文件决定的,比如将“C:\NTLDR”启动配置写入BCD后,Bootmgr就可以启动WinXP系统了。

 

实战:多个系统各自启动
  从上述介绍可以知道,改造多系统启动操作第一步就是要将各系统启动文件复制到各自硬盘分区,由于简单复制启动文件并不能启动系统,复制完成后还要对系统启动进行配置。下面就针对不同系统介绍如何进行具体操作。
  1、实现WinXP独立启动
  大家都知道WinXP是通过“C:\NTLDR”来启动的,对于先装有WinXP后装有Win7的用户,我们只需将硬盘主引导记录更改为NT52格式即可。进入WinXP系统后将下载的“bootsect.exe”复制到C盘。接着,启动命令提示符工具并输入“c:\bootsect.exe /nt52 c:”,当屏幕出现“Bootcode was successfully updated on all targeted volumes.”的提示时,则表示成功将主引导记录更改为NT52格式。现在,重启系统后就会自动加载NTLDR来启动WinXP系统了(不会再出现Bootmgr启动管理器界面)。
  提示:对于在Win7基础上安装WinXP的用户,千万不要使用上述命令更改主引导记录,否则会出现两个系统都无法进入的后果。因为变更为NT52格式后,硬盘主引导记录就会去寻找第一分区根目录下的NTLDR文件(NT60格式为寻找Bootmgr)。
  2、实现Win7独立启动
  完成上述操作后,重启电脑进入WinXP系统,把“C:\bootmgr”文件、“C:\boot”整个目录全部剪切到D盘根目录。然后运行下载的“bcdtool.exe”,单击“启动配置 —> 打开”,打开“d:\boot\bcd”配置文件。依次选择“编辑 —> 删除启动项目”,将原来的启动项目全部删除。接着再依次选择“编辑 —> 新建Vista启动项目”,选中新建项目后,双击右侧窗格的“device”项,将其更改为“partition=D:”(盘符依据Win7安装的具体分区更改),“description”(启动菜单显示名称)更改为“Windows 7”。  
  经过上述启动文件移动和配置后,我们只要能够加载“D:\bootmgr”,Win7就可以从D盘上启动了(Bootmgr加载需要借助XRLDR配置)。
  3、实现WinPE独立启动
  由于Win7启动经常需要借助WinPE来修复。因此,为了更方便地对Win7系统进行维护,我们还可以手动在硬盘上安装WinPE系统。只要准备好Win7安装光盘,打开光盘后将除“光盘目录\sources\install.wim”文件外的全部文件复制到E盘即可完成安装。
  4、最后设定:多系统统一管理
  完成上述三个操作系统的配置后,先进入WinXP系统,运行下载的XRLDR,单击“安装/配置”进入配置界面。在界面预览下选中“第一个操作系统”,依次进行如下设置:
  1、启动方式单选“从文件启动”,启动文件选择NTLDR(用于启动WinXP,启动Win7和WinPE则选择Bootmgr);
  2、启动分区选择第一分区(即WinXP所在分区,其他系统根据具体分区选择);
  3、系统类型选择“NTLDR/BOOTMGR”,并勾选“启动时激活要启动主分区”;
  4、菜单文本更改为“Windows XP”,然后单击“生成”(字体、颜色、字号等根据自己喜好进行设置)。其他参数采取默认设置;
  5、操作同上,依次设置Win7和WinPE系统的启动配置,最后单击“写入磁盘”,完成对主引导记录的更改;  OK,现在只要重启电脑,我们就可以在开机多重启动菜单中选择自己喜欢的操作系统进入了(下次启动时默认启动上次选择的系统,默认启动系统可以在XRLDR中进行设置)。
  上述三个操作系统是独立启动的,比如选择Win7进入后,依次打开“计算机管理 —> 存储 —> 磁盘管理”,可以看到Win7所在分区既是系统分区也是启动分区,表明它的启动并不依赖第一分区。
系统修复
    如果Bootmgr文件出错或被删除导致Win7无法启动,可以进入XP系统,到其他电脑复制Bootmgr到D盘就可以修复win7启动问题,同样,如果win7的BCD菜单出现故障,我们可以到WinPE下,使用Bcdboot命令进行快速修复。




MBR和grub工作原理(zz)

在坛子里找到一篇关于grub和mbr工作原理的文章,以前一直都是一头雾水,今天转这文章学习下。。哈。。

能正常工作的grub应该包括一下文件:stage1、stage2、*stage1_5、menu.lst。

其中stage1要被安装(也就是写入)某个硬盘的主引导记录,或者某个活动分区(这个分区要用fdisk标记成可启动的)的启动扇区。stage1的主要的也是唯一的作用就是找到你存放在硬盘上某个地方的stage2文件,来完成后续的工作。

stage2文件可以存在某个特定的文件系统中,比如你分了一个linux分区,在上面创建一个ext2文件系统,然后把这个文件拷贝到这个分区的某个目录下。也可以把stage2直接存放在硬盘的某个位置,也就是未分区的某个地方。不过,好像没有多少人会这么做吧。

因为stage1的容量有限(主引导记录MBR和启动扇区的大小只能够是512字节),所以它对文件系统是无法识别的,那如果你把 stage2存放在ext2或者fat格式的文件系统上,它如何来找到这个文件呢?这就要用到上面提到的那些stage1_5的文件了,它们负责解释文件 系统。你的stage2放在什么格式的文件系统上,就要调用对应的那个stage1_5文件。比如,你把stage2存放在ext2格式的文件系统上,就 需要e2fs_stage1_5;stage2存放在fat格式的文件系统上,就需要fat_stage1_5了,stage1.5可以安装在 mbr 之后的位置。


接下来是简单开机过程

①按下电源后,计算机自检(POST),如果硬件设备(CPU、内存、硬盘、光驱、各种卡)都没有问题,BIOS会检查各个硬盘的MBR,看有没 有可以执行的代码,如果你把grub安装到第一个硬盘的MBR上,那BIOS就会找到它,然后把控制权交个这段代码(其实就是512字节大小的 stage1)。

②stage1根据安装时提供的信息,如stage2在什么地方,需不需要加载文件系统的对应的stage1_5文件等,找

到stage2文件,并把控制权交给stage2。

③stage2会需要特定位置的grub配置文件menu.lst文件(此文件是/boot/gurb/gurb.conf的链接文件),如 果找到,就分析其中的内容,形成操作系统选择菜单(Grub管它叫Menu Interface),如果没有找到menu.lst或者这个文件的格式、内容有错误,那就显示grub的命令行提示符。

④当你选择了菜单中相应的条目,或者输入了相关的命令,就可以看是引导系统了。比如引导linux的话,stage2会负责将vmlinuz和initrd(如果有的话)装载到内存,并把控制权交给vmlinuz。

⑤linux的内容完成对硬件的初始化,并把控制权交给init程序,完成后续的工作了。

详细的grub信息请参考:http://q.yesky.com/frame.jsp?referer=http%3A%2F%2Fq.yesky.com%2Fgroup%2Freview-17848168.html
Linux 引导过程内幕:http://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html

你可能感兴趣的:(windows)