无忧启动论坛

标题: umbr 测试(适用于BIOS+GPT磁盘的MBR程序) [打印本页]

作者: chenall    时间: 2016-1-12 16:32
标题: 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/

umbr.zip

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


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

占用多少个扇区?

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

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


作者: cchessbd    时间: 2016-1-12 18:02
支持,又有好东西了
作者: fuldho    时间: 2016-1-12 19:31
辛苦了!

留下脚印,待有条件测试。
作者: qj_tzy    时间: 2016-1-12 19:39
本帖最后由 qj_tzy 于 2016-1-12 19:55 编辑

感谢C大又出新东西,非常期待,很想在实机硬盘上测试一下,但我的两个硬盘上均有重要数据,怕出问题,所以,只有暂时不在实机硬盘上测试了。
作者: chenall    时间: 2016-1-12 19:55
本帖最后由 chenall 于 2016-1-12 19:57 编辑


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

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



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

占用多少个扇区?

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

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

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

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

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

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

主要是用于GPT格式磁盘,当然了MBR格式的也可以用.
作者: moran    时间: 2016-1-12 20:23
不错,支持一下。
作者: 不点    时间: 2016-1-12 20:46
chenall 发表于 2016-1-12 20:05
其实这个很早之前就有介绍过

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

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


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

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

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

我想在umbr的启动记录最后一条添加直接启动第一个分区,直接启动第一个分区
作者: qj_tzy    时间: 2016-1-13 11:18
本帖最后由 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
qj_tzy 发表于 2016-1-13 11:18
测试报告

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

命令执行的提示信息?

会提示成功安装的项目
作者: qj_tzy    时间: 2016-1-13 11:26
本帖最后由 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
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
1楼已经更新,重新上传了.

安装时增加了几个错误提示信息,方便知道是否安装成功.
作者: nf17b    时间: 2016-1-13 13:19
chenall 发表于 2016-1-13 12:22
1楼已经更新,重新上传了.

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

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

02.png

作者: qj_tzy    时间: 2016-1-13 13:27
本帖最后由 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

作者: nf17b    时间: 2016-1-13 13:52
一樣是 VMware Workstation 成功啟動 3TB GPT WIN7 SP1 X86
01.png

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

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

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

如果不点大大可以帮忙改写一下启动代码就好了.^_^
作者: nf17b    时间: 2016-1-13 14:34
本帖最后由 nf17b 于 2016-1-13 15:23 编辑

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

作者: guyue2011    时间: 2016-1-13 14:55
本帖最后由 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无关了.

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


   
作者: chenall    时间: 2016-1-13 15:03
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.

附件的grldr是有修改过的,主要用于执行umbr安装.启动的可以是任意grldr.也可以是wee63
作者: guyue2011    时间: 2016-1-13 15:09
chenall 发表于 2016-1-13 15:03
并不是查找,而是安装的时候就已经定位了启动位置,umbr只是根据这些信息来来加载并启动而已.

附件的grldr ...

哦..明白了

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

按道理, 未来甚至可以支持bootmgr等更多引导文件吧?
作者: 不点    时间: 2016-1-13 17:03
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
chenall 发表于 2016-1-13 14:03
#18
因为使用的是绝对位置,所以改名删除有时候是不影响启动的(因为文件的位置不变)

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

我觉得一个扇区足够了.

作者: 2011yaya2007777    时间: 2016-1-13 21:26
一个扇区够了。直接定位grldr,直接加载,是乎不用考虑pbr的参数。
作者: chenall    时间: 2016-1-14 14:49
再修改了下,现在可以直接启动某个分区了

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

因为目前读取引导代码是一次性读入的,一次性读取扇区数太多的话,有的机器是不支持的.
作者: 不点    时间: 2016-1-14 15:13
chenall 发表于 2016-1-14 14:49
再修改了下,现在可以直接启动某个分区了

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

一次性读入?

按照公开的规范,int13/ah=42h 一个调用可以读 127 个扇区。不可能再多。

但 127 扇区基本都是支持的,除非那些恶意的 BIOS。

你不可能一次性读入整个 GRLDR 文件(它远远超过 127 扇区)。


作者: chenall    时间: 2016-1-14 15:25
不点 发表于 2016-1-14 15:13
一次性读入?

按照公开的规范,int13/ah=42h 一个调用可以读 127 个扇区。不可能再多。

是的,我昨天才注意到只能读127个.

但有一些主机可以全部读入.
作者: 不点    时间: 2016-1-14 15:28
chenall 发表于 2016-1-14 15:25
是的,我昨天才注意到只能读127个.

但有一些主机可以全部读入.

比规范读得更多,这不知道是不是好事。

问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于故意制造死机的那些 bios 来说。


作者: chenall    时间: 2016-1-14 15:54
不点 发表于 2016-1-14 15:28
比规范读得更多,这不知道是不是好事。

问题是,如果多读了,属于超出规范,那有可能死机,尤其是对于 ...

刚开始我没有注意,我自己用的电脑和虚拟机都是可以全部读入的,并且我看了一下读入的数据还是正常的.

要多次读入的话会麻烦些,需要添加好多代码.还在修改中.

作者: guyue2011    时间: 2016-1-14 16:27
昨晚想到一个问题, umbr在安装前就确定好grldr文件的扇区位置了吗?  而并没有做分析文件系统的工作吗?

   那下面这种情况, umbr能够正常工作呢?

1, 复制附件中的grldr到U盘根目录
2, 安装umbr, 使用命令umbr -d=0 (hd0,0)/grldr
3, 把U盘根目录的grldr复制多一份, 并改名为grldr2, 即grldr2和grldr都在根目录, 但存在于不同扇区
4, 把grldr删掉, grldr2重命名为grldr
5, 请问umbr能正常工作吗?
作者: 2011yaya2007777    时间: 2016-1-14 19:41
gpt分区表间隙一般可以容纳grldr.mbr,有时也可以容纳grldr。也可以将grldr安装到不使用的分区表。
作者: 2011yaya2007777    时间: 2016-1-14 19:50
我不清楚,现在将grldr安装到(hd1,0)/ ,是一般意义上的写入?即写入文件分配表?可以通过,Windows 看到这个增加的grldr吗?
作者: 2011yaya2007777    时间: 2016-1-14 19:54
如果将grldr写入特殊位置,那么删除所有的可见的grldr(包括改名),应该一切正常。
作者: chenall    时间: 2016-1-14 20:37
guyue2011 发表于 2016-1-14 16:27
昨晚想到一个问题, umbr在安装前就确定好grldr文件的扇区位置了吗?  而并没有做分析文件系统的工作吗?

  ...

这个是使用固定位置的.
即然是固定位置的,就和文件名没有什么关系了.

移动或删除就会启动失败(但不一定因为有时候虽然移动或删除了但文件内容还在这里还是可以启动的).

这就是这个的弊端,所以可以指定多个备用位置并且通过内置的校验判断内容是否有变化.


作者: chenall    时间: 2016-1-14 20:39
2011yaya2007777 发表于 2016-1-14 19:50
我不清楚,现在将grldr安装到(hd1,0)/ ,是一般意义上的写入?即写入文件分配表?可以通过,Windows 看到这 ...

这个的安装只是修改了MBR引导,其它的没有动.
作者: chenall    时间: 2016-1-14 20:49
再次更新了

这次应该比较完美了,我自己测试了暂时没发现问题.
作者: nf17b    时间: 2016-1-14 22:29
chenall 发表于 2016-1-14 20:49
再次更新了

这次应该比较完美了,我自己测试了暂时没发现问题.

的確目前的版本在實機測試正常 , 之前的版本怪怪的
作者: guyue2011    时间: 2016-1-14 22:31
chenall 发表于 2016-1-14 20:37
这个是使用固定位置的.
即然是固定位置的,就和文件名没有什么关系了.

哦..明白了..谢谢大大指教..
作者: 不点    时间: 2016-1-18 16:28
这个源代码在哪?github 上是很老的源代码,没更新。


作者: chenall    时间: 2016-1-18 17:18
本帖最后由 chenall 于 2016-1-18 17:20 编辑
不点 发表于 2016-1-18 16:28
这个源代码在哪?github 上是很老的源代码,没更新。


https://github.com/chenall/grubutils

https://github.com/chenall/grubutils/blob/master/umbr/umbr.s


麻烦你看看有没有问题,

作者: 不点    时间: 2016-1-18 21:56
chenall 发表于 2016-1-18 17:18
https://github.com/chenall/grubutils

https://github.com/chenall/grubutils/blob/master/umbr/um ...

wee 是有连续 63 个扇区,所以第一扇区写得复杂。

你这个 umbr 只有一个扇区,就没必要搞那么复杂了。

所以,第一感觉,首先就发现可以精简掉一些无用的代码。

wee 是考虑被 boot.ini 加载,由于是多扇区,它可能被加载在 0d00:0000 或 2000:0000 处。

你这个 umbr 只有一个扇区,肯定被加载在 0000:7c00 处,所以代码可以精简。


作者: chenall    时间: 2016-1-19 09:31
不点 发表于 2016-1-18 21:56
wee 是有连续 63 个扇区,所以第一扇区写得复杂。

你这个 umbr 只有一个扇区,就没必要搞那么复杂了。 ...


前面的代码我没怎么动,主要是不明白用途,
我修改了move_down_to_7000相关代码本来是move_down_to_7C00的,
因为7C00后要启动需要,所以我改成了7000.

不知后面的代码有没有什么问题?

另外有一个疑问,MBR代码应该是16位的,可以使用32位寄存器吗?
我之前以为不行,后面看到了前面的repz movsl 代码,所以就测试了下,发现可以正常使用.

如果能再优化掉20个节字左右应该足够支持启动NTLDR/BOOTMGR了

作者: 不点    时间: 2016-1-19 09:50
本帖最后由 不点 于 2016-1-19 10:01 编辑
chenall 发表于 2016-1-19 09:31
前面的代码我没怎么动,主要是不明白用途,
我修改了move_down_to_7000相关代码本来是move_down_to_7C00 ...


我觉得应该可以砍掉不少代码。这个 mbr 扇区,无论在任何情况下(包括被 boot.ini 加载),都是被加载在固定地址 0000:7C00 处。你只要了解这个,就简化了,即可开展后面的工作了。

16位 模式下,当然可以使用 32 位寄存器。这是 CPU 厂家提供的方便。遗憾的是,16 位模式无法直接使用 64 位寄存器,我认为这是 CPU 制造者有意封杀的。他们不想让 16 位的实模式能够有太多的访问能力。我认为这也是从 CPU 层面制造不兼容的一个总体规划吧,逐步消灭实模式。



作者: tiansw1    时间: 2016-1-21 15:40
感觉这个程序像病毒
作者: 不点    时间: 2016-2-6 18:10
Hack Bootmgr to boot Windows in BIOS to GPT
http://reboot.pro/topic/19516-hack-bootmgr-to-boot-windows-in-bios-to-gpt/

上述这个帖子, chenall 也有回帖。我不知道他们为什么要用一些复杂的方法?比如,还要用 map --in-situ 把 GPT 虚拟为 MBR,或者创建一个 floppy image 用 fd0 里面的 bootmgr 来启动系统。

chenall 知道来龙去脉吗?

我想知道,在一个纯粹的 GPT + BIOS + Windows (不含常规 MBR 分区表)环境下,用 chenall 的 umbr 启动 grldr 然后再直接 chainloader /bootmgr 这样能否成功启动 Windows?难道无法成功?究竟需要做什么额外的工作才能成功呢?

麻烦知情者给以解惑。


作者: 不点    时间: 2016-2-6 18:38
nf17b 发表于 2016-1-13 14:34
實機也測試成功 , 第二顆硬碟 3TB GPT , 最後一個分割區的 WIN7 SP1 X86

你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr?

你的硬盘是纯 GPT 方式呢,还是 GPT/MBR 双重模式?

你的 Win7 是怎么安装上的?究竟是在 MBR 方式安装的呢,还是在 GPT 方式下安装的?


作者: qj_tzy    时间: 2016-2-6 20:23
本帖最后由 qj_tzy 于 2016-2-6 20:26 编辑
不点 发表于 2016-2-6 18:38
你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr?

你的硬盘是纯 ...


在我的GPT分区单硬盘下,均以安装ghost版方式,安装了winxp+win7+win8三个分区系统,均是按bios+gpt方式启动的。启动时能用chainloader /ntldr启动winxp,但不能以chainloader /bootmgr或chainloader +1方式启动nt6系统,读取BCD时会出错(即使BCD是修改好的)。目前,我所知道的,只有三种方法能以bios+gpt方式启动nt6系统:一是用grldr 执行一个软盘映像ima文件,其内有bootmgr和boot目录下的BCD等文件;二是grldr 调用ntboot 以nt6=(hdx,y) 方式启动。三是用xorboot_0.74版(还为测试版,Pauly 尚未公开发布)启动NT6系统。其他还有什么方法,我就不知道了。
作者: nf17b    时间: 2016-2-6 20:26
不点 发表于 2016-2-6 18:38
你成功启动 Win7,菜单命令是怎样的?是不是直接用 chainloader 加载硬盘上的 bootmgr?

你的硬盘是纯 ...

硬碟 : GPT

安裝方式 : MBR 裝好 再 GHOST 改註冊表

啟動
title [09] 執行 Windows 7 (32位元)
map --mem /boot/win7.ima (fd0)
map --hook
rootnoverify (fd0)
chainloader +1

WIN7.IMA
01.PNG

02.PNG

作者: 不点    时间: 2016-2-6 21:49
谢谢两位,根据你们的解释,我明白了,确实无法直接用 chainloader 启动硬盘上的 bootmgr。
作者: minmax    时间: 2016-2-17 12:34
本帖最后由 minmax 于 2016-2-17 12:37 编辑

用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功
實體USBHDD 安裝完成  用QEMU已經可以開
但是真正拿來BIOS PC使用, 報找不到檔案(因為GPT是不能設為開機)
請問這種狀況如何解決
作者: chenall    时间: 2016-2-17 14:50
本帖最后由 chenall 于 2016-2-17 14:51 编辑
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功


"找不到檔案"是哪里的提示?

另外上面
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr

这个用法也是错误的.这个命令运行应该会有错误提示的吧??

这个-d=x必须和后面的hdx一样,比如
umbr -d=0 (hd0,0)/grldr (hd0,1)/grldr

umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr



作者: minmax    时间: 2016-2-17 16:09
本帖最后由 minmax 于 2016-2-17 16:11 编辑
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功


我打的是 umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr 才對
實體機顯示
reboot and select proper boot device
or insert boot media in selected boot device and press a key
我用的是一個乾淨的128G SSD HDD, GPT 切 FAT32 , NTFS 各一
作者: chenall    时间: 2016-2-17 16:44
minmax 发表于 2016-2-17 16:09
我打的是 umbr -d=1 (hd1,0)/grldr (hd1,1)/grldr 才對
實體機顯示
reboot and select proper boot d ...

这个提示好像是系统没有识别到启动设备??

可以用WINHEX之类的检查下硬盘的0扇区内容.

作者: minmax    时间: 2016-2-17 16:55
chenall 发表于 2016-2-17 16:44
这个提示好像是系统没有识别到启动设备??

可以用WINHEX之类的检查下硬盘的0扇区内容.

是的,我的疑問也是如何讓 GPT格式的HDD被識別為啟動,目前並沒有工具可以達成(以前都倚賴BOOTICE)
手動方法已經忘了要修改哪了@@
作者: 不点    时间: 2016-2-17 16:56
minmax 发表于 2016-2-17 12:34
用USBDISK(0,0) + USBHDD(1,1)
umbr -d=1 (hd0,0)/grldr (hd0,1)/grldr
要兩個FILE才成功

根据你的描述,当你的主板检测到硬盘是 GPT 格式时,拒绝从 GPT 的第一扇区引导系统,也就是说,强制使用 EFI 启动方式。

我没猜错你的意思吧?

那就无解呀。你乖乖儿地使用 EFI 吧。




作者: minmax    时间: 2016-2-17 21:27
不点 发表于 2016-2-17 16:56
根据你的描述,当你的主板检测到硬盘是 GPT 格式时,拒绝从 GPT 的第一扇区引导系统,也就是说,强制使用 ...

不点完全正確。 ACER品牌機無法啟動, HP NB就可以了
作者: qj_tzy    时间: 2016-2-20 14:38
发现一个问题,不知是何原因,请您看一下是否要修改umbr

在一个双硬盘的电脑上,机械硬盘为MBR分区结构,仅分两个分区,作数据盘。SSD硬盘为GPT分区结构,分为4个分区,作操作系统盘,在BIOS中将SSD设为第一启动盘,用umbr -d=0 (hd0,0)/umbr/grldr命令在0扇区写入启动信息。用bootice查看,ssd的主引导记录类型为其他类型的引导,而机械硬盘的主引导记录类型为nt5,又未在机械硬盘上存放grldr等任何引导文件(我是故意不想让机械硬盘作启动盘)。

启动后能进入grub4dos菜单,想用grub4dos的root (hd0,3),再启动该分区的系统,提示无此分区。用find命令(未带任何参数,下同)查看,发现硬盘分区情况是:(hd1,0)、(hd1,1)、(hd1,2)、(hd1,3)、(hd0,0)、(hd0,1)。

而用xorboot在0扇区写入启动信息,启动相同版本的grub4dos,用find命令查看,发现硬盘分区情况是:(hd0,0)、(hd0,1)、(hd0,2)、(hd0,3)、(hd1,0)、(hd1,1)。就可启动(hd0,3)的系统了。

两个硬盘在主板上的物理连接是,机械硬盘连接的sata二代的某个编号口上,而SSD硬盘连接的sata三代的编号号上(我的主板只有一个灰色的sata三代口)。

从上可看出,umbr启动时,似乎未将在BIOS中选定的第一硬盘置为(hd0),不知是何原因,请您看一下是否要修改umbr。

作者: 不点    时间: 2016-2-20 20:02
有三种可能,

1、xorboot 对这两个硬盘号码进行了交换。
2、bios 本身根据引导代码的不同而采用了不同的硬盘编号。
3、xorboot 所启动的 grldr 与 umbr 启动的 grldr,可能有某些差别,导致启动的菜单不同。就是说,grldr 文件虽然一样,但是加载 grldr 的位置以及采用的 cpu 寄存器的不同,会导致 grldr 有不同的表现,比如说,找到不同的菜单而启动,产生差异。
作者: qj_tzy    时间: 2016-2-20 20:32
不点 发表于 2016-2-20 20:02
有三种可能,

1、xorboot 对这两个硬盘号码进行了交换。

谢谢!

我用umbr及xorboot启动的是改名的grldr,文件名特别,且只在ssd 的指定目录下才有此文件,也就是启动的文件只有一个,我猜,可能是xorboot是对这两个硬盘号作了交换,而umbr却没有交换造成的。

作者: chenall    时间: 2016-2-21 09:17
qj_tzy 发表于 2016-2-20 14:38
发现一个问题,不知是何原因,请您看一下是否要修改umbr

在一个双硬盘的电脑上,机械硬盘为MBR分区结构 ...

我估计你机械硬盘的启动代码也是直接启动GRUB4DOS

然后你的主板无法启动安装了UMBR的SSD磁盘,就会自动跳到机械硬盘去启动了.

若是这样的话,要验证的方法很简单,把机械硬盘的引导代码改成默认的不让它启动GRUB4DOS.就可以测试了.


作者: qj_tzy    时间: 2016-2-21 19:40
chenall 发表于 2016-2-21 09:17
我估计你机械硬盘的启动代码也是直接启动GRUB4DOS

然后你的主板无法启动安装了UMBR的SSD磁盘,就会自动 ...

好的,我空时再仔细测试一下,谢谢!
作者: 12250279    时间: 2016-3-2 19:15
好东西
作者: 叮叮咚咚    时间: 2017-4-29 13:58
发现的问题,安装umbr后,可以引导grub4dos了,但是当我要去BIOS总关闭csm模块时,发现csm模块锁死了,无法关闭!于此同时,安全启动项也无法关闭!但是不影响efi的使用,只是默认为grldr启动。想要使用uefi必须手动使用快捷键来选择uefi来启动。

所以,这东西如何卸载?
作者: 叮叮咚咚    时间: 2017-5-3 19:17
叮叮咚咚 发表于 2017-4-29 13:58
发现的问题,安装umbr后,可以引导grub4dos了,但是当我要去BIOS总关闭csm模块时,发现csm模块锁死了,无法 ...

好吧,是我搞错了,这款笔记本的BIOS有点繁琐,关于legacy的有几项......
作者: 青青草    时间: 2017-5-4 12:39
谢谢分享
作者: xlhong    时间: 2017-10-7 12:21
VM 下测试
硬盘用 GPT分区
3分区,第一个分区上有grldr 和 BOOTMGR
写入时提示错误,
重新启动一直循环重启
求大神指点!
umbr.png

作者: dyw9    时间: 2018-3-21 23:28
正在学习GRUB4DOS
作者: wzg1886    时间: 2018-5-2 21:59
我来试一试, 感谢分享!
作者: 2010qaqz111    时间: 2019-5-26 02:14
本帖最后由 2010qaqz111 于 2019-5-26 02:18 编辑

chenall 请问这个程序还在维护吗?
能否提供一个 PE 格式的 exe 程序,grub.exe 在 winPE 或者 win 桌面版上都不能直接运行。(提示【该版本的 F:\ds918+\grub4dos-0.4.6a\grub.exe 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者。】,这应该是 DOS 实模式的程序才会有的反馈吧)
另外可否像 weesetup 一样提供直接将指定位置的 grldr 或者其他外部文件写入磁盘的能力?
现在的分区软件基本都会将第一分区放在第 2048 扇区开始,不论是 MBR 还是 GPT 的第一分区之前都有大量空闲的空间可以利用,如果能将安装 umbr 和写入 grldr 之类引导程序整合一下就很方便了。
作者: wjgyz740526    时间: 2019-8-28 09:54
版主,如果用在GPT移动硬盘上,因为使用场景不同,HD1、HD2不确定啊?umbr怎么写呢?
作者: 蓝星明月    时间: 2020-10-12 10:35
谢谢!!! 支持!!!  谢谢!!! 支持!!!  谢谢!!! 支持!!!
作者: wsqpp123    时间: 2020-11-7 01:55
慢慢研究
作者: zyy    时间: 2021-6-2 12:48
还在学习中
作者: 星语风    时间: 2021-6-15 09:38
发现这个工具,是读安装时的grldr绝对地址的,如果把grldr删除了,重新拷一份放在同样的地址,基本上就启动不了了,不知楼主能不能改为按文件分配表读Grldr?
作者: 星语风    时间: 2021-9-22 16:30
发现一台 HP EliteBook 2570P,用楼主的工具,做成GPT+UMBR,重启时就是不去读0扇区,当然也就引导不起来了。用bootice看0扇区,则完成正常。估计这就是某些品牌电脑BIOS的特殊性吧
作者: 不点    时间: 2021-9-22 18:15
星语风 发表于 2021-6-15 09:38
发现这个工具,是读安装时的grldr绝对地址的,如果把grldr删除了,重新拷一份放在同样的地址,基本上就启动 ...

开发者要是能够像你说的那样去实现,那肯定实现了。既然没实现,那就是实现不了,或者难度太大,没兴趣去做。单扇区的 MBR 代码,不可能去查找文件系统中的文件。根据要支持的文件系统种类的不同、数量的多少,要完成这个功能,需要几十个、几百个扇区的代码空间。
作者: 不点    时间: 2021-9-22 18:19
星语风 发表于 2021-9-22 16:30
发现一台 HP EliteBook 2570P,用楼主的工具,做成GPT+UMBR,重启时就是不去读0扇区,当然也就引导不起来了 ...

BIOS 要淘汰,不是光说说就完了。不仅要说到,而且要做到。可惜呀,有很多人还没有意识到。
作者: liuzhaoyzz    时间: 2022-3-28 08:57
本帖最后由 liuzhaoyzz 于 2022-3-28 08:58 编辑

试了下chenall的这个umbr兼容性挺好的,很屌的一个程序,BIOS+GPT启动,满满的黑科技呀!如果有windows下的写入程序就更好了。
   

作者: lhpxs    时间: 2022-4-5 06:38
高手很给力!
作者: goyou    时间: 2022-4-27 08:55
真是需要,正是在寻找的东西。可惜不会用,用bootice把umbr装入mbr,有8个扇区而不是1个,装入后没反应,启动还是跟在装入之前一样。
作者: goyou    时间: 2022-4-27 11:17
还有一个问题:本来就是为了不破坏gpt磁盘的分区表,才想到只使用1个扇区的mbr。现在要在grub4dos下安装,而g4d本身就需要16个扇区了(就是说要先安装这16个扇区),再为了安装这个1个扇区,是不是已经破坏了gpt?
作者: liuzhaoyzz    时间: 2022-4-27 17:20
goyou 发表于 2022-4-27 11:17
还有一个问题:本来就是为了不破坏gpt磁盘的分区表,才想到只使用1个扇区的mbr。现在要在grub4dos下安装, ...

不会的,umbr引导只占用1个扇区,这个扇区引导时会跳转到grldr所在的地址。不是grldr.mbr占用的16个扇区,有区别。
作者: goyou    时间: 2022-4-28 10:04
liuzhaoyzz 发表于 2022-4-27 17:20
不会的,umbr引导只占用1个扇区,这个扇区引导时会跳转到grldr所在的地址。不是grldr.mbr占用的16个扇区 ...

它不是要在grub4dos下执行那个命令吗?那不要先安装grub4dos的mbr?
作者: liuzhaoyzz    时间: 2022-4-28 10:37
goyou 发表于 2022-4-28 10:04
它不是要在grub4dos下执行那个命令吗?那不要先安装grub4dos的mbr?


用任何可用的办法进入g4d命令行即可,g4d不一定要在硬盘的MBR,可以由bootmgr→grldr进入g4d环境。优盘也可以,要活学活用。
作者: goyou    时间: 2022-4-28 12:37
liuzhaoyzz 发表于 2022-4-28 10:37
用任何可用的办法进入g4d命令行即可,g4d不一定要在硬盘的MBR,可以由bootmgr→grldr进入g4d环境。优盘 ...

好的,多谢!本来我对这些就是一窍不通,为了使用ventoy.vhd临时去学grub2,现在在gpt下可以启动ventoy.vhd了,又想在兼容bios下启动。
作者: 2011whp    时间: 2022-4-29 17:36
本帖最后由 2011whp 于 2022-5-4 08:00 编辑

c大的方法:

1.   下载 一楼附件 建一个 启动盘(工具盘)(下图中的 hd0)
2.    建一个练习的 vhd 格式化为  gpt(下图中的 hd1)
3.    用dd 写文件 制作 :重点选好 磁盘空白区
       ( 用blocklist  目标盘hd1上的grldr  直接备好 启动文件的连续碎片)
4.    制作过程图片(修正:图中文件位置应为 (hd1)0x23+608)  )
    屏幕截图 2022-04-29 171717.png




附加UMBR实例图片:(下图与上面用的 grldr不同,但都能启动)
umbr.png

作者: 2011whp    时间: 2022-5-1 16:07
本帖最后由 2011whp 于 2022-5-11 21:03 编辑

更简单的

步骤:
  1.  用bootice 给  要 启动的 gpt磁盘的 分区 写入 pbr  (选g4d的 )
        (直接用nt6的pbr  感觉更好,这一步可省略 :因为格式化分区时自带,
          用 umbr的 -p参数 指定到 win所在分区即可)
  2.  用 一楼附件  做工具盘 ,写umbr
  3.   过程见图

屏幕截图 2022-05-01 154945.png

4.  不想按两次回车时:
屏幕截图 2022-05-07 185941.png

UMBR使用说明.zip (681.06 KB, 下载次数: 35)