无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 45151|回复: 92

umbr 测试(适用于BIOS+GPT磁盘的MBR程序)

    [复制链接]
发表于 2016-1-12 16:32:36 | 显示全部楼层 |阅读模式
本帖最后由 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/

umbr.zip

173.3 KB, 下载次数: 689, 下载积分: 无忧币 -2

评分

参与人数 3无忧币 +15 收起 理由
zhczf + 5 很给力!
蓝星明月 + 5 很给力!
yang77 + 5 很给力!

查看全部评分

发表于 2016-1-12 17:37:04 | 显示全部楼层
最好再介绍详细一点。初次接触的人,对此没有概念。比如说:

占用多少个扇区?

启动的逻辑线索、步骤大致是怎样的?

与其他引导代码有何共同点与不同点?

点评

其实这个很早之前就有介绍过 就是一个MBR引导程序只需要一个扇区, 功能很简单,只是直接启动固定的位置的引导程序. 为了防止由于文件移动或其它原因导致的启动失败,用户最多可以指定4个位置.启动时通过内置  详情 回复 发表于 2016-1-12 20:05
回复

使用道具 举报

发表于 2016-1-12 18:02:57 | 显示全部楼层
支持,又有好东西了
回复

使用道具 举报

发表于 2016-1-12 19:31:33 | 显示全部楼层
辛苦了!

留下脚印,待有条件测试。
回复

使用道具 举报

发表于 2016-1-12 19:39:42 | 显示全部楼层
本帖最后由 qj_tzy 于 2016-1-12 19:55 编辑

感谢C大又出新东西,非常期待,很想在实机硬盘上测试一下,但我的两个硬盘上均有重要数据,怕出问题,所以,只有暂时不在实机硬盘上测试了。

点评

建议在虚拟机,比如可以在QEMU下加添-snapshot 参数,这样就可以在QEMU下模拟写入实机硬盘测试,没问题了再写入实机. 运行umbr会写入硬盘的0扇区也就是修改MBR内容.只写入0x1b0字节,不影响分区表等.  详情 回复 发表于 2016-1-12 19:55
回复

使用道具 举报

 楼主| 发表于 2016-1-12 19:55:58 | 显示全部楼层
本帖最后由 chenall 于 2016-1-12 19:57 编辑


建议先在虚拟机,比如可以在QEMU下加添-snapshot 参数,这样就可以在QEMU下模拟写入实机硬盘测试,没问题了再写入实机.

运行umbr会写入硬盘的0扇区也就是修改MBR内容.只写入0x1b0字节,理论上不影响分区表等.


回复

使用道具 举报

 楼主| 发表于 2016-1-12 20:05:26 | 显示全部楼层
不点 发表于 2016-1-12 17:37
最好再介绍详细一点。初次接触的人,对此没有概念。比如说:

占用多少个扇区?

其实这个很早之前就有介绍过

就是一个MBR引导程序只需要一个扇区,

功能很简单,只是直接启动固定的位置的引导程序.

为了防止由于文件移动或其它原因导致的启动失败,用户最多可以指定4个位置.启动时通过内置的简单校验判断启动文件是否完整(修改或移动).

总之4个只要有其中一个可以正常使用就可以保证启动不失败.

我对汇编和引导都不熟,完全是参考wee63.mbr来改写的,依葫芦画瓢.

主要是用于GPT格式磁盘,当然了MBR格式的也可以用.

点评

有这个介绍就很好。让人起码知道,只需一个扇区。  详情 回复 发表于 2016-1-12 20:46
回复

使用道具 举报

发表于 2016-1-12 20:23:03 | 显示全部楼层
不错,支持一下。
回复

使用道具 举报

发表于 2016-1-12 20:46:06 | 显示全部楼层
chenall 发表于 2016-1-12 20:05
其实这个很早之前就有介绍过

就是一个MBR引导程序只需要一个扇区,

有这个介绍就很好。让人起码知道,只需一个扇区。

点评

请问一下要如何启动某个分区的PBR? 比如知道(hd0,0)分区的位置,我想直接启动(hd0,0)+1,直接加载启动好像不行,我看了WEE源码没找到关键的地方,需要额外设置什么数据? 我想在umbr的启动记录最后一条添加直接启动  详情 回复 发表于 2016-1-13 10:08
回复

使用道具 举报

 楼主| 发表于 2016-1-13 10:08:10 | 显示全部楼层
不点 发表于 2016-1-12 20:46
有这个介绍就很好。让人起码知道,只需一个扇区。

请问一下要如何启动某个分区的PBR?

比如知道(hd0,0)分区的位置,我想直接启动(hd0,0)+1,直接加载启动好像不行,我看了WEE源码没找到关键的地方,需要额外设置什么数据?

我想在umbr的启动记录最后一条添加直接启动第一个分区,直接启动第一个分区

点评

应该可以加载 PBR 启动的。需要加载 512 字节到 0000:7C00 处,并设置正确的 DL 寄存器。扩展分区里面的逻辑分区上的 PBR 是不能启动的,因为 PBR 偏移 0x1C 处的 “分区起始扇区号” 是错误的。必须纠正为正确值才  详情 回复 发表于 2016-1-13 17:03
回复

使用道具 举报

发表于 2016-1-13 11:18:36 | 显示全部楼层
本帖最后由 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。





点评

命令执行的提示信息? 会提示成功安装的项目  详情 回复 发表于 2016-1-13 11:23
回复

使用道具 举报

 楼主| 发表于 2016-1-13 11:23:30 | 显示全部楼层
qj_tzy 发表于 2016-1-13 11:18
测试报告

我在MBR分区硬盘上实机作了如下测试:

命令执行的提示信息?

会提示成功安装的项目

点评

当时执行完毕/umbr/umbr -d=0 (hd0,1)/umbr/grldr (hd0)913065435+608 后,好像只提示: (hd0)913065435+608  详情 回复 发表于 2016-1-13 11:26
回复

使用道具 举报

发表于 2016-1-13 11:26:16 | 显示全部楼层
本帖最后由 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改名后,重启,结果相同。

点评

如果没有提示 (hd0,1)/umbr/grldr那就是这个 (hd0,1)/umbr/grldr失败,可能是这个文件有误或者有碎片. 稍后我再上传一个,添加更多错误提示信息  详情 回复 发表于 2016-1-13 11:58
回复

使用道具 举报

 楼主| 发表于 2016-1-13 11:58:20 | 显示全部楼层
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失败,可能是这个文件有误或者有碎片.

稍后我再上传一个,添加更多错误提示信息

回复

使用道具 举报

 楼主| 发表于 2016-1-13 12:22:50 | 显示全部楼层
1楼已经更新,重新上传了.

安装时增加了几个错误提示信息,方便知道是否安装成功.

点评

重新测试如下: 1.在1楼重新下载,将两个文件拷入(hd0,1)的%umbr\目录下覆盖原文件;拷贝grldr到(hd0,0)根目录;用bootice重新装入grldr到未分配空间中,起始扇区为913065435。 2.仍用xorboot搜索启动%umbr\grld  详情 回复 发表于 2016-1-13 13:27
新版在 VMware Workstation 測試成功 [attachimg]237659[/attachimg] [attachimg]237660[/attachimg]  详情 回复 发表于 2016-1-13 13:19
回复

使用道具 举报

发表于 2016-1-13 13:19:11 | 显示全部楼层
chenall 发表于 2016-1-13 12:22
1楼已经更新,重新上传了.

安装时增加了几个错误提示信息,方便知道是否安装成功.

新版在 VMware Workstation 測試成功
01.png

02.png
回复

使用道具 举报

发表于 2016-1-13 13:27:35 | 显示全部楼层
本帖最后由 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
图1.jpg
图2
图2.jpg
回复

使用道具 举报

发表于 2016-1-13 13:52:31 | 显示全部楼层
一樣是 VMware Workstation 成功啟動 3TB GPT WIN7 SP1 X86
01.png
回复

使用道具 举报

 楼主| 发表于 2016-1-13 14:03:47 | 显示全部楼层
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)

我估计是umbr代码的问题,有三种可能原因,

1. 无法读取大文件
2. 无法访问大扇区
3. 目前因为只校验了部份扇区,所以也有可能导致失败.

如果不点大大可以帮忙改写一下启动代码就好了.^_^

点评

我相信你很快就会成功的,汇编语言对你来说没什么困难。 真正的困难在于,BIOS 的访问能力是有限的,许多 BIOS 只能访问 128G,不能访问后面的扇区。说不定还会有某些恶意 BIOS,故意把 BIOS 的访问能力降低到 8G  详情 回复 发表于 2016-1-13 17:31
回复

使用道具 举报

发表于 2016-1-13 14:34:11 | 显示全部楼层
本帖最后由 nf17b 于 2016-1-13 15:23 编辑

實機也測試成功 , 第二顆硬碟 3TB GPT , 最後一個分割區的 WIN7 SP1 X86
01.png

点评

你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr? 你的硬盘是纯 GPT 方式呢,还是 GPT/MBR 双重模式? 你的 Win7 是怎么安装上的?究竟是在 MBR 方式安装的呢,还是在 GP  详情 回复 发表于 2016-2-6 18:38
回复

使用道具 举报

发表于 2016-1-13 14:55:54 | 显示全部楼层
本帖最后由 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无关了.

上述问题, 还请大大可以答疑解惑


   
回复

使用道具 举报

 楼主| 发表于 2016-1-13 15:03:55 | 显示全部楼层
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.

附件的grldr是有修改过的,主要用于执行umbr安装.启动的可以是任意grldr.也可以是wee63

点评

哦..明白了 "启动的可以是任意grldr.也可以是wee63" 按道理, 未来甚至可以支持bootmgr等更多引导文件吧?  详情 回复 发表于 2016-1-13 15:09
回复

使用道具 举报

发表于 2016-1-13 15:09:50 | 显示全部楼层
chenall 发表于 2016-1-13 15:03
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.

附件的grldr ...

哦..明白了

"启动的可以是任意grldr.也可以是wee63"  

按道理, 未来甚至可以支持bootmgr等更多引导文件吧?
回复

使用道具 举报

发表于 2016-1-13 17:03:20 | 显示全部楼层
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 的代码空间,这样功能就有可能增加了。

点评

因为这个的启动方式是绝对扇区, 也就是只要把引导扇区加载完之后再修正0X1C处的值为该扇区位置就行了,这个理论上不难. 我明天继续修改一下让它可以启动PBR,应该不需要太多代码^_^  详情 回复 发表于 2016-1-13 17:43
回复

使用道具 举报

发表于 2016-1-13 17:31:10 | 显示全部楼层
chenall 发表于 2016-1-13 14:03
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)

我相信你很快就会成功的,汇编语言对你来说没什么困难。

真正的困难在于,BIOS 的访问能力是有限的,许多 BIOS 只能访问 128G,不能访问后面的扇区。说不定还会有某些恶意 BIOS,故意把 BIOS 的访问能力降低到 8G 或更低。

所以,你安装的时候,应该检查扇区号,拒绝那些位于 128G 之后的扇区号。

我觉得当前要紧的事,是得找个空间来扩大 umbr 的代码量,否则,只有这一个扇区,无法让功能更加丰富。


点评

这个相当于中转站,只是用来启动另一个引导程序的. 启动的信息都是固定的不需要太多功能, 我觉得一个扇区足够了.  详情 回复 发表于 2016-1-13 17:47
目前只使用INT13的4200H功能来读磁盘 发现有些电脑很正常,有些机子不正常(只能读开头的扇区,具体能读多大还需要测试.)  详情 回复 发表于 2016-1-13 17:46
回复

使用道具 举报

 楼主| 发表于 2016-1-13 17:43:57 | 显示全部楼层
不点 发表于 2016-1-13 17:03
应该可以加载 PBR 启动的。需要加载 512 字节到 0000:7C00 处,并设置正确的 DL 寄存器。扩展分区里面 ...

因为这个的启动方式是绝对扇区,
也就是只要把引导扇区加载完之后再修正0X1C处的值为该扇区位置就行了,这个理论上不难.

我明天继续修改一下让它可以启动PBR,应该不需要太多代码^_^
回复

使用道具 举报

 楼主| 发表于 2016-1-13 17:46:04 | 显示全部楼层
不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。

真正的困难在于,BIOS 的访问能力是有限的, ...

目前只使用INT13的4200H功能来读磁盘

发现有些电脑很正常,有些机子不正常(只能读开头的扇区,具体能读多大还需要测试.)
回复

使用道具 举报

 楼主| 发表于 2016-1-13 17:47:51 | 显示全部楼层
不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。

真正的困难在于,BIOS 的访问能力是有限的, ...

这个相当于中转站,只是用来启动另一个引导程序的.

启动的信息都是固定的不需要太多功能,

我觉得一个扇区足够了.
回复

使用道具 举报

发表于 2016-1-13 21:26:09 来自手机 | 显示全部楼层
一个扇区够了。直接定位grldr,直接加载,是乎不用考虑pbr的参数。
回复

使用道具 举报

 楼主| 发表于 2016-1-14 14:49:30 | 显示全部楼层
再修改了下,现在可以直接启动某个分区了

另外直接启动GRLDR失败的可以尝试启动WEE63.MBR估计就会成功了.

因为目前读取引导代码是一次性读入的,一次性读取扇区数太多的话,有的机器是不支持的.

点评

一次性读入? 按照公开的规范,int13/ah=42h 一个调用可以读 127 个扇区。不可能再多。 但 127 扇区基本都是支持的,除非那些恶意的 BIOS。 你不可能一次性读入整个 GRLDR 文件(它远远超过 127 扇区)。  详情 回复 发表于 2016-1-14 15:13
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-18 12:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表