Windows系列的系统引导

GT前段时间在WinXP的基础上安装了Win7,因为有双硬盘所以直接双系统各占一个硬盘的主分区。我个人经常乱用电脑做各种试验,所以把双系统装到双硬盘上也是未雨绸缪,两个硬盘各施其责互不影响。

不过因为安装Win7时是在WinXP下选择“保留较老版本OS的安装”,所以安好Win7之后发现WinXP被“劫持了”:具体表现就是WinXP被整合到了Win7的启动管理器里面,而一旦我把WinXP所在的硬盘设置为主硬盘,启动引导就会报错,无法脱离Win7的启管理器来独立启动WinXP。我的初衷就是想让两个硬盘可以独立工作的,于是决定查查这两个系统的启动方式,然后看看怎么把我的WinXP解救出来。

 

查了很多资料,事情总算有些眉目了,一下是我总结的一些要点。

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

一、引导扇区的代码格式

讲到系统引导首先要知道的就是磁盘的引导扇区。引导扇区通常就是指磁盘的第一个扇区,当系统从该磁盘启动,启动时首先读取的就是引导扇区里的数据。

然后就是Windows系列操作系统的一个分界线:Windows Vista之前的操作系统使用一种引导扇区代码,即nt52,Vista及Vista之后的产品使用另一种引导扇区代码,即nt60。

可能微软也意识到了我的这种需要,所以在微软的系统安装盘下的i386文件夹里现在有一个叫bootsect的小工具,用法也很简单,直接cmd目标bootsect.exe加命令参数/nt52或/nt60再加目标盘符,就把该盘的引导扇区代码改成指定格式了。

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

二、引导信息

说完引导扇区,那么nt52和nt60代码的引导究竟有什么不同呢?

从我非专业的角度来说,也没办法解释清楚代码的内在原理,只能说它们使用的引导信息不同。接下来就讲一下引导信息

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

nt52:以WinXP为代表,nt52使用一个ntldr文件来储存引导信息,而ntldr还要加载boot.ini中的启动信息和启动列表,所以WinXP的磁盘分区下会有一个隐藏的ntldr和boot.ini。关于boot.ini的编辑相信很多人都懂——因为它是可以用文本方式来编辑的,所以这里就不赘述了。

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

nt60:以Win7为例,nt60加载的是bcd(Boot Configuration Data)文件中的引导信息。不过bcd文件的内容隐藏得比较深,需要微软的工具——bcdedit.exe才能编辑。这个东西同样在i386下可以找到。

关于bcd文件,因为我也编辑过了,所以写写个人的理解。

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

bcd文件的接口:不知道这么抽象的东东怎么解释,姑且称之为接口吧,bcd文件中编辑好的一个启动项就是一个接口,总的来说bcd数据中的接口有三类,第一个就是启动管理器:标识符bootmgr,这个接口叫主接口,是必须在bcd中定义好的,用来载入系统盘下的bootmgr文件,bootmgr则可以连接第二类和第三类接口;这两类只有一点点不同:对于较早版本的Windows(即Vista之前的版本)要使用标识符ntldr(所以WinXP就被Win7劫持了);而后者的标识符则是创建时系统随机生成的。

说到标识符,要说明一下,在bcdedit中,列出bcd文件中的内容以后可以看到,每个启动项都有一些对应的属性,其中标识符就是一个:

 

BCD文件信息
-------------------------------------
主入口:Windows启动管理器
标识符:{bootmgr}
device:主入口bootmgr所在驱动器号
inherit:全局设置

-------------------------------------
老式入口:Vista以前版本Windows启动加载器
标识符:{ntldr}
device:引导文件ntldr所在驱动器号
path:引导程序路径
inherit:启动项设置

......

-------------------------------------
新式入口:Windows启动加载器
标识符:随机ID
device:引导文件ntldr所在驱动器号
path:引导程序路径
inherit:启动项设置
......

 

由此可知,bootmgr入口是必须有的,ntldr入口最多只有一个,而新式入口可以有多个。

 

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

然后是bcdedit一些常用的命令行参数

 

/?或/help是帮助信息,用来列出参数解释(其实有这个就够了,囧)

 

/creatstore <bcd file path>     创建空BCD文件
/store <bcd file path>      指定操作的对象bcd(没有指定前使用当前系统默认bcd文件,应该是吧?)

 

/export <bcd file pate>      备份当前操作对象bcd到path
/import <bcd file path>      还原path的bcd到当前操作对象

 

/enum                              列出当前操作bcd文件中的信息

/v                                     列出当前操作bcd文件中的信息且标识符被显示为一个巨长的唯一编码

 

其他的,关于添加删除启动项,属性设置等,有兴趣的自己看去吧,哈哈哈

 

话说我发现Win7真正的引导程序是Windows/system32/winload.exe哎,真不明白为神马要搞这么复杂。。。

 

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

So,最后我把两个硬盘独立开的方法,(C盘WinXP,H盘Win7)先进Win7,用bootsect把C盘改成nt52,因为C盘原来的ntldr还保留着,所以这样设置好之后,只要C盘的磁盘优先级高,WinXP就可以直接从C盘启动而不用理H盘的bootmgr了。

然后,索性把WinXP从启动菜单里删掉,这样开机就不用显示启动项界面直接进Win7了,有了上面的基础这也很容易做到,用bcdedit把H盘下boot/bcd文件中的ntldr项删去:/delete /f {ntldr}

至此,两个硬盘的系统引导搞定,我的主板设了个快捷键F12直接调启动位置(但不影响bios设置中的优先级顺序),所以平时把经常使用的系统盘放在启动序列的前面,然后偶尔要用到另一个就F12选一下就OK了

 

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

二号硬盘剩下近百G的空间,考虑再装个linux内核的玩玩,so,现在研究一下linux的启动方式去……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值