chenall 发表于 2016-1-12 16:32:36

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/

不点 发表于 2016-1-12 17:37:04

最好再介绍详细一点。初次接触的人,对此没有概念。比如说:

占用多少个扇区?

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

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

cchessbd 发表于 2016-1-12 18:02:57

支持,又有好东西了

fuldho 发表于 2016-1-12 19:31:33

辛苦了!

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

qj_tzy 发表于 2016-1-12 19:39:42

本帖最后由 qj_tzy 于 2016-1-12 19:55 编辑

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

chenall 发表于 2016-1-12 19:55:58

本帖最后由 chenall 于 2016-1-12 19:57 编辑


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

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


chenall 发表于 2016-1-12 20:05:26

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

占用多少个扇区?


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

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

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

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

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

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

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

moran 发表于 2016-1-12 20:23:03

不错,支持一下。

不点 发表于 2016-1-12 20:46:06

chenall 发表于 2016-1-12 20:05
其实这个很早之前就有介绍过

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


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

chenall 发表于 2016-1-13 10:08:10

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

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

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

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

qj_tzy 发表于 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。





chenall 发表于 2016-1-13 11:23:30

qj_tzy 发表于 2016-1-13 11:18
测试报告

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


命令执行的提示信息?

会提示成功安装的项目

qj_tzy 发表于 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改名后,重启,结果相同。

chenall 发表于 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失败,可能是这个文件有误或者有碎片.

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

chenall 发表于 2016-1-13 12:22:50

1楼已经更新,重新上传了.

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

nf17b 发表于 2016-1-13 13:19:11

chenall 发表于 2016-1-13 12:22
1楼已经更新,重新上传了.

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

新版在 VMware Workstation 測試成功



qj_tzy 发表于 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

图2

nf17b 发表于 2016-1-13 13:52:31

一樣是 VMware Workstation 成功啟動 3TB GPT WIN7 SP1 X86

chenall 发表于 2016-1-13 14:03:47

#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)

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

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

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

nf17b 发表于 2016-1-13 14:34:11

本帖最后由 nf17b 于 2016-1-13 15:23 编辑

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

guyue2011 发表于 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无关了.

上述问题, 还请大大可以答疑解惑{:3_148:}


   

chenall 发表于 2016-1-13 15:03:55

并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.

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

guyue2011 发表于 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 的代码空间,这样功能就有可能增加了。

不点 发表于 2016-1-13 17:31:10

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



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

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

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

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


chenall 发表于 2016-1-13 17:43:57

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

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

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

chenall 发表于 2016-1-13 17:46:04

不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。

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

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

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

chenall 发表于 2016-1-13 17:47:51

不点 发表于 2016-1-13 17:31
我相信你很快就会成功的,汇编语言对你来说没什么困难。

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

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

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

我觉得一个扇区足够了.

2011yaya2007777 发表于 2016-1-13 21:26:09

一个扇区够了。直接定位grldr,直接加载,是乎不用考虑pbr的参数。

chenall 发表于 2016-1-14 14:49:30

再修改了下,现在可以直接启动某个分区了

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

因为目前读取引导代码是一次性读入的,一次性读取扇区数太多的话,有的机器是不支持的.
页: [1] 2 3 4
查看完整版本: umbr 测试(适用于BIOS+GPT磁盘的MBR程序)