双系统启动分析
来源:互联网 发布:彗星dns优化器安卓版 编辑:程序博客网 时间:2024/05/03 14:00
现在的操作系统都很大,所以在它能跑起来之前需要一个小程序把它载入内存,这个小程序就是boot loader(引导加载器)。boot loader可以被存在两个地方,一个是MBR(Master Boot Recorder),也就是硬盘的第一个扇区;另一个是每一个分区的第一个512字节的扇区,也就是所谓的boot sector。
在MBR里存有硬盘的分区表。因为MBR一般只有512字节大,所以一个硬盘只能有最多4个分区,叫主分区。幸运的是,其中一个分区可以是扩展分区,在里面可以划分很多个逻辑分区。在分区里面有一个可以被标志为启动分区,它的作用下面会说到。
在开始之前让我们先来回顾一下操作系统的启动顺序。
开机之后第一步是硬件初始化、Bios自检,完成之后Bios会去查看MBR。
如果Bios在MBR里找到了boot loader,就把它载入内存,让后把控制权移交给boot loader,至此Bios的使命宣告结束。
如果MBR里面没有boot loader——像windows的系统就是这样,boot loader并不存在MBR,而是存在系统盘的boot sector里——Bios会去查分区表,找到里面的启动分区,从它的第一个扇区加载boot loader。如果还是没有,那很不幸,系统就起不来了。
boot loader的作用其实很简单,核心功能就是把操作系统内核载入内存,然后启动内核开始执行就OK了。不过现在的boot loader都做的很灵活,像Grub,有很多的选项,可以加载多个系统,也能加载其他的boot loader,或是从某个分区启动。
现在就明白了,如果我们想引导多系统(经验所限,只值linux、windows),第一个要决定的就是用什么boot loader做主引导器,Bios直接把它引导起来,之后再用它去引导其他的系统或boot loader。因为终归还是用windows比较多,而且Grub更灵活,所以我一般都是选择用windows的ntldr来做主引导器。这样的话我们安装Grub(linux)的时候就不能把Grub装到MBR,只能装到所选分区。
用ntldr来引导windows不用说,保持原配置不变就可以了。要用它来引导Grub,就有两个事需要做。一,告诉ntldr,有一个新的引导选项。二,ntldr在哪儿可以找到新选项对应的引导器,也就是Grub。
现在就明白了,如果我们想引导多系统(经验所限,只值linux、windows),第一个要决定的就是用什么boot loader做主引导器,Bios直接把它引导起来,之后再用它去引导其他的系统或boot loader。因为终归还是用windows比较多,而且Grub更灵活,所以我一般都是选择用windows的ntldr来做主引导器。这样的话我们安装Grub(linux)的时候就不能把Grub装到MBR,只能装到所选分区。
用ntldr来引导windows不用说,保持原配置不变就可以了。要用它来引导Grub,就有两个事需要做。一,告诉ntldr,有一个新的引导选项。二,ntldr在哪儿可以找到新选项对应的引导器,也就是Grub。
第一个事在Vista之前都可以通过编辑C:/boot.ini来完成。就是在文件的最后加一行C:/linux.sec="Linux"。等号的后面是显示在ntldr里的启动选项的名字。等号前面指定了ntldr要载入的下一级boot loader也就是Grub所在的文件。至于在Vista及以后的系统里怎么完成这一步,下面再说。
对于第二个事,如果是Grub,我们可以直接指定要启动的分区就可以,但是ntldr似乎并不支持直接启动一个分区。所以得采取“曲线救国”的办法。上面说过,安装Grub的时候,要把它装在选定分区的boot sector。现在要做的则是把这个boot sector抠出来,存成一个C盘根目录下的文件,就是前面的C:/linux.sec。linux下可以用dd来方便的完成这个事,windows下则推荐用winhex,一个挺不错的二进制编辑器,据说还可以用它找回已经删除了的文件。记住指需要最开始的512字节就足够了。
对于Vista和之后的windows7,微软换了一个加载器windows boot manager,所以前面编辑boot.ini的办法就不灵了,不过目标还是一样,就是要告诉boot manager到哪儿去加载下一个boot loader。而且第二步的办法还是一样。
boot.ini的位置在windows boot manager里被BCD(boot configuration data)取代,所以现在要修改BCD,这就要用到bcdedit,以管理员身份打开一个command窗口就能找到。可以用以下的命令来替代boot.ini中的那一行:
1. bcdedit /create /d "Linux" /application bootsector (这时会生成一个id以{asdfadsf})这样的内容
2. bcdedit /set {id} device partition=C: (id 就用之前生成的id)指定所在分区
3. bcdedit /set {id} path /linux.sec (id同理)指定boot loader所在文件
4. bcdedit /displayorder {id} /addlast (id同理)添加到启动菜单的最后
2. bcdedit /set {id} device partition=C: (id 就用之前生成的id)指定所在分区
3. bcdedit /set {id} path /linux.sec (id同理)指定boot loader所在文件
4. bcdedit /displayorder {id} /addlast (id同理)添加到启动菜单的最后
重启 就可以进Linux了。
最后这个方法是从这看来的 http://blog.csdn.net/px2wxh/archive/2009/08/24/4478274.aspx
对bcdedit这个命令的详细解释看这两篇文章:http://technet.microsoft.com/zh-cn/library/cc709667(WS.10).aspx
http://hapeacock.blog.51cto.com/193534/76716
如果对BCD有兴趣,可以看这,有微软给出的详细技术文档:
http://www.microsoft.com/whdc/system/platform/firmware/bcd.mspx
- 双系统启动分析
- 双系统不能启动
- 双系统启动问题
- 双系统启动grub.conf
- linux,windows 双系统启动
- 双系统启动选项修改
- 双系统WIN7启动黑屏
- win7 + centos7 双系统启动
- Win2000/WinXP/Win2003双系统启动
- 如何删除双系统启动符??
- 双系统启动问题的解决
- windows2000/XP双系统启动问题
- 双系统启动修复完整解决方案
- grub双系统启动顺序更改
- 2000XP双系统启动问题
- 深入浅出剖析双系统启动文件
- xp,2003双系统启动菜单
- 2000XP双系统启动问题
- 搬家
- cookie 与 session 的区别
- javascript中eval用法
- 高分辨率遥感影像应用研究----桥梁提取(1)
- 加为好友 下东西
- 双系统启动分析
- 重新开张
- asp.net连接MYSQL出现Character set 'gbk' is not supported的解决方法
- 页内搜索功能源代码
- GPRS模块介绍
- 电信增值业务学习笔记8——3G视频类增值业务
- 两个类相互包含对方成员的问题
- C#可逆加密-Rijndael算法
- SQL server2000简介