umbr 测试(适用于BIOS+GPT磁盘的MBR程序)
本帖最后由 chenall 于 2016-1-18 15:00 编辑介绍
附件的umbr是一个GRUB4DOS下的可执行程序.(必须配合附件的GRLDR使用).
可以安装在MBR上,因为这个是根据扇区定位的所以和磁盘分区格式无关像GPT也是一样使用.
可以指定多个备用启动文件,以防止文件移动或修改导致的启动失败.
这只是一个简单的MBR(占用MBR一个扇区),直接启动固定位置的引导程序.
使用方法:
首先把GRLDR文件复制到硬盘上保存多份(也可以直接写入到分区间隙等)
然后用附件的GRLDR启动进入GRUB4DOS命令行使用类似以下命令安装(程序只改写MBR)
umbr -d=0 (hd0,0)/grldr (hd0,0)/boot/grub/grldr (hd0)xxxx+yyyy
参数介绍
-p=0 启动失败时默认自动启动分区0.
-d=0 安装到(hd0),后面的文件也必须是在(hd0)上面
--test 不写入磁盘直接测试启动效果.
后面可以指定3个启动位置必须都在(hd0)上面,
启动时优先启动第一个指定的文件,如果启动失败(根据校验信息),则尝试下一个.
注:
1. 我对汇编不太熟,可能会有BUG,请不要实机测试.有兴趣的可以虚拟机测试,也可以一起改进.
2. 请把引导的文件放在尽量靠近硬盘开头的地方,放在靠后可能会无法读取.
3. 由于部份电脑不支持读大文件,可以尝试启动WEE63.MBR
2016-01-13
12:00 更新 增加错误提示信息
13:10 更新 新增 --test参数用于测试启动,不写硬盘,直接启动.
2016-01-14
重新修改了一下,现在支持启动PBR
例子: 当wee启动失败时启动(hd0,1)的pbr
2016-01-14 20:40 更新,
1.新的版本由于代码的的增加,只能指定3个位置一般也够用了,
2.新增标志信息在MBR偏移0x8处有UMBR字样,0XC处是版本标志(目前是1),方便以后有人开发WINDOWS下的GUI工具.
进入实用性阶段,现在的代码空间已经用得差不多了,功能也基本实现了.没有什么BUG的话可能不会再更新.
针对grub4dos的修改稍后会并入源码.
源码已经上传
其它介绍在这里 http://chenall.net/post/grub4dos_umbr/
最好再介绍详细一点。初次接触的人,对此没有概念。比如说:
占用多少个扇区?
启动的逻辑线索、步骤大致是怎样的?
与其他引导代码有何共同点与不同点?
支持,又有好东西了 辛苦了!
留下脚印,待有条件测试。 本帖最后由 qj_tzy 于 2016-1-12 19:55 编辑
感谢C大又出新东西,非常期待,很想在实机硬盘上测试一下,但我的两个硬盘上均有重要数据,怕出问题,所以,只有暂时不在实机硬盘上测试了。 本帖最后由 chenall 于 2016-1-12 19:57 编辑
建议先在虚拟机,比如可以在QEMU下加添-snapshot 参数,这样就可以在QEMU下模拟写入实机硬盘测试,没问题了再写入实机.
运行umbr会写入硬盘的0扇区也就是修改MBR内容.只写入0x1b0字节,理论上不影响分区表等.
不点 发表于 2016-1-12 17:37
最好再介绍详细一点。初次接触的人,对此没有概念。比如说:
占用多少个扇区?
其实这个很早之前就有介绍过
就是一个MBR引导程序只需要一个扇区,
功能很简单,只是直接启动固定的位置的引导程序.
为了防止由于文件移动或其它原因导致的启动失败,用户最多可以指定4个位置.启动时通过内置的简单校验判断启动文件是否完整(修改或移动).
总之4个只要有其中一个可以正常使用就可以保证启动不失败.
我对汇编和引导都不熟,完全是参考wee63.mbr来改写的,依葫芦画瓢.
主要是用于GPT格式磁盘,当然了MBR格式的也可以用. 不错,支持一下。 chenall 发表于 2016-1-12 20:05
其实这个很早之前就有介绍过
就是一个MBR引导程序只需要一个扇区,
有这个介绍就很好。让人起码知道,只需一个扇区。
不点 发表于 2016-1-12 20:46
有这个介绍就很好。让人起码知道,只需一个扇区。
请问一下要如何启动某个分区的PBR?
比如知道(hd0,0)分区的位置,我想直接启动(hd0,0)+1,直接加载启动好像不行,我看了WEE源码没找到关键的地方,需要额外设置什么数据?
我想在umbr的启动记录最后一条添加直接启动第一个分区,直接启动第一个分区 本帖最后由 qj_tzy 于 2016-1-13 11:20 编辑
测试报告
我在MBR分区硬盘上实机作了如下测试:
将grldr、umbr两文件,拷入(hd0,1)的\umbr\目录下,用xorboot搜索启动\umbr\grldr;将grldr用bootice将其装入未分配空间中,起始扇区为913065435
重启后,显示grub4dos版本号为0.46a 2016-01-11,
用/umbr/umbr -d=0 (hd0,1)/umbr/grldr (hd0)913065435+608 命令将引导程序写入mbr第0扇区。
重启后,黑屏,无提示,光标在左上角闪动,未出现grubdos命令行。
再重启,用BOOTICE查看主引导记录为其他类型MBR。
qj_tzy 发表于 2016-1-13 11:18
测试报告
我在MBR分区硬盘上实机作了如下测试:
命令执行的提示信息?
会提示成功安装的项目 本帖最后由 qj_tzy 于 2016-1-13 11:40 编辑
chenall 发表于 2016-1-13 11:23
命令执行的提示信息?
会提示成功安装的项目
当时执行完毕/umbr/umbr -d=0 (hd0,1)/umbr/grldr (hd0)913065435+608 后,好像只提示:
(hd0)913065435+608
对了,还有,就是我用u盘重启电脑后将/umbr/下的grldr改名后,重启,结果相同。
qj_tzy 发表于 2016-1-13 11:26
当时执行完毕/umbr/umbr -d=0 (hd0,1)/umbr/grldr (hd0)913065435+608 后,好像只提示:
(hd0)913065 ...
如果没有提示 (hd0,1)/umbr/grldr那就是这个 (hd0,1)/umbr/grldr失败,可能是这个文件有误或者有碎片.
稍后我再上传一个,添加更多错误提示信息
1楼已经更新,重新上传了.
安装时增加了几个错误提示信息,方便知道是否安装成功. chenall 发表于 2016-1-13 12:22
1楼已经更新,重新上传了.
安装时增加了几个错误提示信息,方便知道是否安装成功.
新版在 VMware Workstation 測試成功
本帖最后由 qj_tzy 于 2016-1-13 13:38 编辑
chenall 发表于 2016-1-13 12:22
1楼已经更新,重新上传了.
安装时增加了几个错误提示信息,方便知道是否安装成功.
重新测试如下:
1.在1楼重新下载,将两个文件拷入(hd0,1)的\umbr\目录下覆盖原文件;拷贝grldr到(hd0,0)根目录;用bootice重新装入grldr到未分配空间中,起始扇区为913065435。
2.仍用xorboot搜索启动\umbr\grldr,启动进入grub4dos命令行后,用/umbr/umbr -d=0 (hd0,0)/grldr (hd0,1)/umbr/grldr (hd0)913065435+608安装,见图1。
3.重启后,能进入grub4dos命令行。结果同16楼。
4.用U盘重启后,删除(hd0,0)根目录下grldr,重启后提示找不到grldr,图2。
5.用U盘重启后,改名(hd0,1)\umbr\grldr,重启后,黑屏,无提示,光标在左上角闪动,未出现grubdos命令行。
6.我的硬盘中(hd0,0)安装有win7系统,用其他方法能正常启动,我平常使用的就是这个系统,但此法未启动该系统。我平时是用chainloader (hd0,0)+1方式启动的。
图1
图2
一樣是 VMware Workstation 成功啟動 3TB GPT WIN7 SP1 X86
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)
我估计是umbr代码的问题,有三种可能原因,
1. 无法读取大文件
2. 无法访问大扇区
3. 目前因为只校验了部份扇区,所以也有可能导致失败.
如果不点大大可以帮忙改写一下启动代码就好了.^_^ 本帖最后由 nf17b 于 2016-1-13 15:23 编辑
實機也測試成功 , 第二顆硬碟 3TB GPT , 最後一個分割區的 WIN7 SP1 X86
本帖最后由 guyue2011 于 2016-1-13 15:04 编辑
大大出手了..大概看了下..有一些疑问
1, 这个工具是不是只应用在legecy BIOS引导 + gpt 磁盘的场景下呢?
2, 工具原理是不是 利用legacy bios引导的特点, 先加载执行umbr, 然后umbr按照用户设置的启动设备顺序来查找, 而这个查找过程刚好可适应GPT分区表. 当找到grldr, 就加载执行grldr来完成进一步的引导, 之后就没有umbr的事情了?
3,如果第2点的原理没错, 理论上, umbr可以做到支持更多的引导文件, 不仅仅是grub4dos的grldr, 对吧?
4, 附件提供的grldr是不是特别修改过的呢? 可以用其他版本grldr代替吗?
5, 如果附件的grldr并没有修改过, 我觉得umbr称作"适用于GPT磁盘启动GRUB4DOS"就可能不太准确了, 因为这样, umbr就是一段支持gpt分区表格式的引导代码, 可能跟grub4dos无关了.
上述问题, 还请大大可以答疑解惑{:3_148:}
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.
附件的grldr是有修改过的,主要用于执行umbr安装.启动的可以是任意grldr.也可以是wee63 chenall 发表于 2016-1-13 15:03
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.
附件的grldr ...
哦..明白了
"启动的可以是任意grldr.也可以是wee63"
按道理, 未来甚至可以支持bootmgr等更多引导文件吧? chenall 发表于 2016-1-13 10:08
请问一下要如何启动某个分区的PBR?
比如知道(hd0,0)分区的位置,我想直接启动(hd0,0)+1,直接加载启动好 ...
应该可以加载 PBR 启动的。需要加载 512 字节到 0000:7C00 处,并设置正确的 DL 寄存器。扩展分区里面的逻辑分区上的 PBR 是不能启动的,因为 PBR 偏移 0x1C 处的 “分区起始扇区号” 是错误的。必须纠正为正确值才能启动。然而 Umbr 只有一个扇区的代码空间,所以不可能添加纠正 PBR “分区起始扇区号” 的代码了。wee 有 63 个扇区的代码空间,代码量充足,因此能够纠正 PBR 上的 “分区起始扇区号”。
你也可以考虑加大 Umbr 的代码空间,这样功能就有可能增加了。
chenall 发表于 2016-1-13 14:03
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)
我相信你很快就会成功的,汇编语言对你来说没什么困难。
真正的困难在于,BIOS 的访问能力是有限的,许多 BIOS 只能访问 128G,不能访问后面的扇区。说不定还会有某些恶意 BIOS,故意把 BIOS 的访问能力降低到 8G 或更低。
所以,你安装的时候,应该检查扇区号,拒绝那些位于 128G 之后的扇区号。
我觉得当前要紧的事,是得找个空间来扩大 umbr 的代码量,否则,只有这一个扇区,无法让功能更加丰富。
不点 发表于 2016-1-13 17:03
应该可以加载 PBR 启动的。需要加载 512 字节到 0000:7C00 处,并设置正确的 DL 寄存器。扩展分区里面 ...
因为这个的启动方式是绝对扇区,
也就是只要把引导扇区加载完之后再修正0X1C处的值为该扇区位置就行了,这个理论上不难.
我明天继续修改一下让它可以启动PBR,应该不需要太多代码^_^
不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。
真正的困难在于,BIOS 的访问能力是有限的, ...
目前只使用INT13的4200H功能来读磁盘
发现有些电脑很正常,有些机子不正常(只能读开头的扇区,具体能读多大还需要测试.)
不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。
真正的困难在于,BIOS 的访问能力是有限的, ...
这个相当于中转站,只是用来启动另一个引导程序的.
启动的信息都是固定的不需要太多功能,
我觉得一个扇区足够了.
一个扇区够了。直接定位grldr,直接加载,是乎不用考虑pbr的参数。 再修改了下,现在可以直接启动某个分区了
另外直接启动GRLDR失败的可以尝试启动WEE63.MBR估计就会成功了.
因为目前读取引导代码是一次性读入的,一次性读取扇区数太多的话,有的机器是不支持的.