无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 11714|回复: 30
打印 上一主题 下一主题

[已解决] 如何实现用UD引导时转从本地硬盘启动?

[复制链接]
跳转到指定楼层
1#
发表于 2012-7-20 11:42:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用了chiannet 的 实现转从本地硬盘启动的一个方法。 暂时还没发现问题。


  1. title                        从本地硬盘启动
  2. checkrange 0x80 read 0x8280 && map (hd1) (hd0)  && map (hd0) (hd1) && map --hook
  3. rootnoverify (hd0,0)
  4. makeactive
  5. chainloader +1
复制代码
在UD被识别为(hd0)时,用上面的代码无法实现从UD转从本地硬盘启动,执行后继续从UD启动?应该怎么修改?

[ 本帖最后由 2012hotmail 于 2012-7-23 20:34 编辑 ]
2#
发表于 2012-7-20 11:54:36 | 只看该作者
不需要用map映射直接用最新版的一个命令
boot -1
应该就可以了.
回复

使用道具 举报

3#
发表于 2012-7-20 11:55:09 | 只看该作者
title 从本地硬盘启动
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr || rootnoverify (hd0) && chainloader +1
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
chainloader /ntldr || chainloader /bootmgr

[ 本帖最后由 2011phzhc 于 2012-7-20 11:56 编辑 ]
回复

使用道具 举报

4#
 楼主| 发表于 2012-7-20 11:59:36 | 只看该作者

回复 #3 2011phzhc 的帖子

这个有局限性,万一本地硬盘是linux或DOS就没辙。
回复

使用道具 举报

5#
 楼主| 发表于 2012-7-20 12:07:09 | 只看该作者

回复 #2 chenall 的帖子


  1. boot -1
复制代码
转从PXE引导了。。。。

[ 本帖最后由 2012hotmail 于 2012-7-20 12:10 编辑 ]

XP工作环境-2012-07-20-12-09-03.png (5.43 KB, 下载次数: 172)

XP工作环境-2012-07-20-12-09-03.png
回复

使用道具 举报

6#
发表于 2012-7-20 12:27:17 | 只看该作者
title [o] 从硬盘启动计算机    \n
boot -1


从硬盘启动计算机成功!
回复

使用道具 举报

7#
发表于 2012-7-20 13:51:49 | 只看该作者

回复 #5 2012hotmail 的帖子

看截图,因为你的启动顺序是U盘->PXE->XXXX

后面的提示,操作系统没有找到...可能是硬盘的引导的问题.

也有可能是有多硬盘.

在BIOS上设置好正确的启动顺序就可以了.

boot -1是根据BIOS设置的启动顺序进行启动的.
回复

使用道具 举报

8#
 楼主| 发表于 2012-7-20 14:08:27 | 只看该作者

回复 #7 chenall 的帖子

谢大帅。

截图是在VM虚拟机里,虚拟机的硬盘上是有一个可启动的windows XP的。虚拟机的bios启动顺序是:本地硬盘(hdd-PXE-CDROM等)、该UD被识别为HDD类。


在实机测试BOOT -1后,居然出现:

f1 ...
F2 ...
f5 进入bios设置   


这些F1、F2、F5都是BIOS的一些错误处理提示信息(DELL optiplex 台式机)。

此时按f1或f2,又从UD引导了,再执行BOOT -1菜单项,依旧从UD引导。


按f5,进入了BIOS设置,不做任何修改,退出BIOS设置,此时机器依旧为UD引导,再执行BOOT -1菜单项,奇迹发生了,实现了从本地硬盘启动。



BOOT -1还是不太可靠?

[ 本帖最后由 2012hotmail 于 2012-7-20 14:11 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2012-7-20 14:16:46 | 只看该作者
boot -1是根据BIOS设置的启动顺序进行启动的。


已经进入UD,没进入本地硬盘,说明本机bios的设定的确是从UD优先,而不是设定为本地硬盘优先。现在想通过boot -1 实现从本地硬盘优先,是不是有矛盾?
回复

使用道具 举报

10#
发表于 2012-7-20 14:32:30 | 只看该作者
boot -1
和你BIOS设置的启动顺序有关系.你可以自己查看一下启动顺序.

如果你是USB->硬盘.
从USB启动后
boot -1就会从硬盘启动.
如果是USB->PXE-硬盘.
第一次转到PXE启动.这时如果启动的还是GRLDR,再次执行就会转硬盘启动.

这个功能完全依赖BIOS.没有任何选择的余地.只要你的BIOS正常(设置还有功能),就是正常的,反之,就......
回复

使用道具 举报

11#
发表于 2012-7-20 18:30:45 | 只看该作者
如果UD被识别为HDD时,有些BIOS是在硬盘中选择硬盘(真实的硬盘、被识别为HDD的U盘)进行启动的,而它的启动顺序依然是硬盘(实际上是U盘,而永远不会是真实的硬盘)。比如设置的顺序是移动设备-硬盘-PXE,而在硬盘启动项中,会出现让你选择真实硬盘或者是被识别为硬盘的U盘进行启动;如果选择了硬盘中的U盘启动的话,只要那个被识别为硬盘的U盘没拔下,就永远不会从真实的硬盘启动——这或者是 BOOT -1 失败的原因所在。
回复

使用道具 举报

12#
发表于 2012-7-20 19:09:29 | 只看该作者

回复 #2 chenall 的帖子

电脑启动顺序是:移动盘-硬盘-光驱-网启

现U盘被当成硬盘,无移动盘,无光驱,
从U盘启动后用boot -1无法从本地硬盘启动,提示无法init18之类的东西,请问是啥原因?

[ 本帖最后由 2011aaaaa0808 于 2012-7-20 19:11 编辑 ]
回复

使用道具 举报

13#
 楼主| 发表于 2012-7-21 14:30:52 | 只看该作者

回复 #11 xianglang 的帖子

为什么map也不成功呢?
回复

使用道具 举报

14#
发表于 2012-7-22 13:47:13 | 只看该作者
我想应该不是MAP不成功,而是CHECKRANGE的问题。试试直接在命令行下MAP进行交换,看能不能成功。
回复

使用道具 举报

15#
发表于 2012-7-22 13:53:13 | 只看该作者
还有,如果U盘是做成UD盘而又被识别为HDD的话,checkrange 0x80 read 0x8280 读到的值可能不会是 0x80,而是0x23,这样MAP的条件不成立,就自然没有进行过MAP的动作了。
回复

使用道具 举报

16#
 楼主| 发表于 2012-7-22 16:21:30 | 只看该作者

回复 #15 xianglang 的帖子

哦,原来如此!!!!
我改成下面的试试。

  1. title                        从本地硬盘启动
  2. checkrange 0x80 read 0x8280 set sw=yes
  3. checkrange 0x23 read 0x8280 set sw=yes
  4. if "%sw%"=="yes" map (hd1) (hd0)  && map (hd0) (hd1) && map --hook
  5. rootnoverify (hd0,0)
  6. makeactive
  7. chainloader +1
复制代码

[ 本帖最后由 2012hotmail 于 2012-7-22 16:26 编辑 ]
回复

使用道具 举报

17#
发表于 2012-7-22 17:26:36 | 只看该作者
  1. title                        从本地硬盘启动
  2. checkrange 0x80 read 0x8280 && if exist (hd0)/fb.cfg && set sw=yes
  3. checkrange 0x23 read 0x8280 && if not exist (fd0)/fb.cfg && set sw=yes
  4. set /a hdn=*0x475&0xff
  5. if %hdn%>=2 && if "%sw%"=="yes" && map --unmap=0:0xff && map (hd1) (hd0)  && map (hd0) (hd1) && map --rehook
  6. rootnoverify (hd0,0)
  7. chainloader +1
复制代码


我略加修改,上面的代码在本人的机器上倒是成功了。
回复

使用道具 举报

18#
发表于 2012-7-22 17:39:00 | 只看该作者
我的机器是单一硬盘,主活跃分区是第一分区。

万一主活跃分区是(hdx,y)   (其中x<>0且y<>0),该怎么自动实现?貌似很麻烦?
回复

使用道具 举报

19#
发表于 2012-7-23 05:23:49 | 只看该作者
原帖由 chiannet 于 2012-7-22 17:39 发表
我的机器是单一硬盘,主活跃分区是第一分区。

万一主活跃分区是(hdx,y)   (其中x0且y0),该怎么自动实现?貌似很麻烦?

用find搜索启动文件,设为root,然后按正常判断交换,然后再搜索一次,照样设成root,再chainloader /xxx或者kernel /xxx再initrd /xxx
回复

使用道具 举报

20#
发表于 2012-7-23 05:47:03 | 只看该作者

回复 #19 2011czmxbb52 的帖子

用find搜索启动文件的方法,例如find bootmgr,最大的缺陷是某些软激活的盗版windows 7/vista的激活方式被无效了!!又要重新软激活。为了1秒快活,带来几十秒麻烦。
回复

使用道具 举报

21#
发表于 2012-7-23 12:07:35 | 只看该作者
rootnoverify (hd0,0)
chainloader +1

改成
chainloader (hd0)+1
回复

使用道具 举报

22#
发表于 2012-7-23 23:22:57 | 只看该作者
我的启动硬盘系统的菜单,还没有发现不能启动的,包括双硬盘。这是我心如水PE的菜单

map (hd1) (hd0)
root (hd1,0)
chainloader +1
回复

使用道具 举报

23#
 楼主| 发表于 2012-7-24 05:52:21 | 只看该作者

回复 #22 fyq 的帖子

呵呵,就这三句?

刚才已测试用你的这三句代码:在UD识别为HDD时不能实现转从本地硬盘启动,表现为黑屏无动静。谢谢回复。
回复

使用道具 举报

24#
发表于 2012-7-24 09:25:31 | 只看该作者
title   →        硬盘启动 USB
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
chainloader +1
title   →        硬盘启动 CD
chainloader (hd0)+1
回复

使用道具 举报

25#
发表于 2012-7-24 11:56:44 | 只看该作者
原帖由 chiannet 于 2012-7-23 05:47 发表
用find搜索启动文件的方法,例如find bootmgr,最大的缺陷是某些软激活的盗版windows 7/vista的激活方式被无效了!!又要重新软激活。为了1秒快活,带来几十秒麻烦。

那就find bootmgr再交换磁盘再chainloader ()+1再rootnoverify ()
回复

使用道具 举报

26#
发表于 2012-7-24 11:56:45 | 只看该作者
对不起,用手机发重复了。。。

[ 本帖最后由 2011czmxbb52 于 2012-7-24 11:58 编辑 ]
回复

使用道具 举报

27#
发表于 2012-7-27 16:58:52 | 只看该作者
  1. title [0] Start LOCAL NT5x
  2. find --set-root --devices=h /ntldr || echo 该机器上未安装 NT5x 系统 && pause --wait=3 && exit
  3. if not "%@root:~,4%"=="(hd0" set sw=%@root:~,4%)
  4. if exist sw map (hd0) %sw% && map %sw% (hd0) && map --rehook && rootnoverify (hd0,%@root:~-2%
  5. chainloader +1

  6. title [0] Start LOCAL NT6x
  7. find --set-root --devices=h /bootmgr || echo 该机器上未安装 NT6x 系统 && pause --wait=3 && exit
  8. chainloader +1
复制代码


我测试,启动 bootmgr 不必交换磁盘就可顺利进系统,且上面的代码不影响软激活。

另菜单中是不支持 exit 命令的,出错后会返回主菜单。
请教G4D菜单项执行判错后,如何直接返回? 不用 configfile 命令。
回复

使用道具 举报

28#
发表于 2012-7-27 18:13:35 | 只看该作者

回复 #27 canmao 的帖子

你可以使用 goto 命令来做。比如:

find --set-root --devices=h /bootmgr || goto .....
chainloader +1

goto 命令需要另外一个 title 段,专门处理错误的。你可以参考 pseudo  的 grub4dos 菜单,主要学习命令的用法。
回复

使用道具 举报

29#
发表于 2012-7-27 19:51:09 | 只看该作者

回复 #28 不点 的帖子

谢谢不点!

很早前啃过 pseudo 的 0pe 中各种脚本。后来主要关注7pe,所以好久都没看过 0pe 的脚本了。

我就是想返回(重显)主菜单。我希望这个 “exit” 是 “return menu”
回复

使用道具 举报

30#
发表于 2012-8-27 22:25:58 | 只看该作者
这个比较有用,多硬盘时试一下
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-12 08:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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