本帖最后由 a19715 于 2014-7-21 21:43 编辑
原文地址:http://user.qzone.qq.com/1543764927/blog/1351430770
一、关于引导过程详解:
这些天搞Ramos学到最多还是关于引导,为了方便理解我画了一张图
一般win7的启动过程:BIOS->MBR->Bootmgr->BCD->Winload->内核加载 现在的情况:BIOS->MBR->Bootmgr->BCD->grldr-> Bootmgr->BCD->winload 详细说现在的情况:BIOS->MBR->Bootmgr->BCD ->grldr->读取menu.lst->map (hd0) (hd1)//这里grldr首先将系统硬盘置换为hd1磁盘 ->map (hd0)406455777+61462800 (hd0)//注意最后一个(hd0)前面有空格,说明这个也是类似上面的map (hd0) (hd1)置换命令,这里是把磁盘上⑤(如图表示⑤的扇区范围)的扇区,虚拟为hd0磁盘。这个命令不是加载到内存,而是在磁盘本地中map。 ->map --hook//它的作用是使前面map命令指定的映射立刻生效。 ->chainloader (hd0,0)/bootmgr//这里从hd0,0启动了系统,也就是前面说的⑤号区域的磁盘扇区,启动应该是引导了bootmgr文件
Bootmgr->BCD //启动项是win7_c.vhd,从boot启动 关于bootmgr做了什么,what does this bootmgr do? ->winload(差分盘上的) Bootmgr一开始虚拟了vhd盘,具体呢bootmgr是先读取了启动分区前面的MBR(MBR中包含了磁盘大小、相关扇区位置、VHD子母文件在磁盘的位置的一些信息),通过这些信息,bootmgr会找到相关扇区的子母盘文件,通过子母盘来生成VHD盘,应该是先读取了母盘(同时生成内存盘,内存盘是在加载完了start=0的那些sys驱动以后生成的),之后会加载子盘补充对原来通过母盘生成VHD的修改 二、原理: 核心是 分区2模拟了分区1 1. 系统Bootmgr会先读取当前启动磁盘前面的MBR数据,MBR数据记录了相关VHD文件的磁盘位置, 2. 因为d盘前面的63个扇区被C盘的MBR覆盖,所以系统Bootmgr会认为是在C盘启动,所以它会读取C:\vhd\win7_c.vhd,而这个c:\vhd目录是由P驱动的内存盘mklink链接过来的,所以系统实际读取的是位于内存盘上的vhd\win7_c.vhd差分文件 3. 系统会继续通过差分win7_c.vhd启动 4. 相关教程的讨论 复制C.VDF为Ramos.vdf,通过了G4D引导,Ramos.vdf做启动盘(类似这里的分区二-D盘)启动C.VDF(类似这里的分区一c盘)是相同的原理,都要求MBR一致,因为镜像相同MBR当然一致的。 5.为什么D盘要小于C盘 参考前面bootmgr做了什么,mbr中包含磁盘大小,如果D盘大于C盘,那么bootmgr在读取被修改的MBR后就不会承认D比C盘大的那部分区域,因此就不可用了,感兴趣的可自行尝试。 三、我的VM10下的实践过程: Primo ser5.6;VHDX_OneKey_2013.exe;BCDICE1.0以上版本;G4D0.46版本。
1. 第1次进WIN8PE规划磁盘 直接载入光盘win8PE,在win8PE下通过DG建立ntfs格式的两个2主分区 格式化后为C:,D:,要求C盘大于D盘的容积,且在CD盘之间预留出了些未分配空间(大约几十M就够了) 2. 安装系统 只要有可以正常启动VHD就行,当然VHD的BCD要处理(win7启动项,设备类型 Partition ,启动磁盘 BOOT)我说下我试验的做法, Win8pe下 创建容量合适vhd,为了试验我创建了1.5G的,位置d:\vhd\win7.vhd(动态、VHD上压缩磁盘),把win7lite7658ex.exe部署到VHD,用VHDX_OneKey_2013.exe在空磁盘C盘(必须是第一分区)上添加了启动项,重启进WIN7安装完,在CMD下添加注册表(不管有没有用填着玩。O(∩_∩)O~): 1.reg add hklm\system\ControlSet001\services\FsDepends\Parameters /v VirtualDiskExpandOnMount /t REG_DWORD /d 4 /f >nul 2>nul 2.reg add hklm\system\ControlSet001\Control /v BootDriverFlags /t REG_DWORD /d 4 /f >nul 2>nul 3.reg add hklm\system\ControlSet001\Control\PnP /v PollBootPartitionTimeout /t REG_DWORD /d 30000 /f >nul 2>nul 3.安装P驱动添加内存盘 安装Primo ser5.6生成一个IO模式内存盘,选择智能镜像1.5G和VHD一样大,仅加载, 目的是使用时内存动态增加。镜像文件存哪随意,这里c: \PR-image-B.vdf,然后重启下一环节。 4、重启系统第2次进WIN8PE 4.1 在win8pe下用VHDX_OneKey_2013.exe创建差分盘win7_c.vhd 4.2 在win8pe下安装Primo ser 5.6,加载第一分区的PR-image-B.vdf文件盘符B:,把80kb左右的win7_c.vhd复制到B:\vhd目录下 4.3Win+r打开CMD,输入mklink /j c:\vhd B:\vhd,为第一分区-C盘添加B:\vhd的链接目录
5.用bcdice将C盘的MBR写入D盘前面未分配的扇区 (1)先备份C的MBR:如图,63个扇区 (2)再写入到D盘前面63个扇区(C盘根据起始扇区号63),6340397-63=6340334 6.修复相关引导 6.1 将第一分区-C盘的BOOT目录和BOOTMGR复制到第二分区-D盘上,打开BCDICE处理第2分区的BOOT\BCD,删除原有的BCD,并在该位置新建BCD,添加win7_c.vhd启动项,启动磁盘选"BOOT",设备文件项填"\vhd\win7_c.vhd" 6.2用bcdice处理第一分区-C盘的BCD 将G4D的grldr和grldr.mbr文件复制到第一分区-C盘,用BCDice处理C盘的BCD,添加一个G4D启动项 6.3将如下内容保存到第一分区C:\menu.lst - title primo win7_c.vhd
- map (hd0) (hd1)
- map (hd0)63040334+52302963 (hd0) [color=seagreen]//这里要根据你的系统实际情况填写,注意空格[/color]
- map --hook
- chainloader (hd0,0)/bootmgr
复制代码7.一些图片(留纪念)
四、相关视频教程
|