无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: Limpo

[求助] 优盘启动的GRUB4DOS,菜单里想加一项“从硬盘启动”

[复制链接]
发表于 2015-9-30 15:45:07 | 显示全部楼层 |阅读模式
可能命令很简单,不过我学了一下午也没弄明白怎么整。

其实就是简单的从 grub4dos 引导硬盘的主引导记录(mbr),不管硬盘上是什么操作系统,多少个分区。
发表于 2015-9-30 15:54:11 | 显示全部楼层
我就是個拿來主意
直接拿NTBOOT整合進我的menu.lst
呼叫NTBOOT內detect.lst就好了
回复

使用道具 举报

发表于 2015-9-30 16:18:24 | 显示全部楼层
本帖最后由 有阴也有阳 于 2015-10-1 00:21 编辑

grub4dos好象并不直接支持类似于Easyboot的直接从硬盘启动的"boot  80"的命令,要弄你得间接转一下,比如从grub4dos——到Easyboot,然后由Easyboot

执行。

下面我给你做了一个从硬盘启动的Easyboot的ISO文件,在grub4dos中的调用命令:

title 从本地硬盘启动
find --set-root /myudisk.txt
map /CYPQD.ISO (hd32)
map --hook
chainloader (hd32)
boot

注意:

         打开记事本,将空白的记事本命名为myudisk,从而形成一个myudisk.txt文件,将myudisk.txt文件复制到你的启动U盘的根目录。



抱歉!从硬盘启动的等待时间的设置有问题,本应该设置成0秒的,结果却弄成了无限长,不能自动执行,需要手动执行,等我弄好了再重新传给你。

改好了——从按下回车键到进入本地硬盘启动只需2——3秒

cypqd.7z

718.61 KB, 下载次数: 56

从硬盘启动的ISO文件

回复

使用道具 举报

发表于 2015-9-30 17:19:42 | 显示全部楼层
我给你做好了一个Easyboot的从硬盘启动,在上一层楼。
回复

使用道具 举报

发表于 2015-9-30 21:00:07 | 显示全部楼层
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%]  Load BOOTMGR of Microsoft Windows NT6.x on %bootmgr%
chainloader %bootmgr%/bootmgr

iftitle [find --set-root --devices=h /ntldr && call set ntldr=%@root^%] Load NTLDR of Microsoft Windows NT5.x on %bootmgr%
chainloader %bootmgr%/ntldr

点评

iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] Load BOOTMGR of Microsoft Windows NT6.x on %bootmgr% chainloader %bootmgr%/bootmgr 这一条好象有问题,在grub4dos0.4.6a的  详情 回复 发表于 2015-10-1 00:31
回复

使用道具 举报

发表于 2015-9-30 23:29:47 | 显示全部楼层
本帖最后由 有阴也有阳 于 2015-10-2 12:47 编辑

受楼上的启发,我琢磨了一下,尽量符合“不管硬盘上是什么操作系统,多少个分区”,都能启动硬盘上的操作系统的要求:

title 从硬盘上启动 Windows NT/2K/XP/2K3系统
root && map (hd0) (hd1)
root && map (hd1) (hd0)
root && map --hook
find --set-root /ntldr
chainloader /ntldr

title 从硬盘上启动 Win7/Win8/Win10系统
root && map (hd0) (hd1)
root && map (hd1) (hd0)
root && map --hook
find --set-root /bootmgr
chainloader /bootmgr

title 从硬盘上启动 Windows 9x/Me系统
root && map (hd0) (hd1)
root && map (hd1) (hd0)
root && map --hook
find --set-root /io.sys
chainloader / io.sys

大概要分成以上3条,实在无法做到象Easyboot一样:

从硬盘启动
boot 80


这么简单,推荐你还是用我给你的间接转的方式——从按下回车键到进入本地硬盘启动只需2——3秒。
回复

使用道具 举报

发表于 2015-10-1 00:31:35 | 显示全部楼层
2012列兵 发表于 2015-9-30 21:00
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%]  Load BOOTMGR of Microso ...

iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%]  Load BOOTMGR of Microsoft Windows NT6.x on %bootmgr%
chainloader %bootmgr%/bootmgr

这一条好象有问题,在grub4dos0.4.6a的实测中,在主菜单界面就显示不出来—— Load BOOTMGR of Microsoft Windows NT6.x on ,麻烦楼主检查一下。
回复

使用道具 举报

发表于 2015-10-1 01:06:47 | 显示全部楼层
title 从第一硬盘启动
rootnoverify (hd0)
chainloader (hd0)+1

点评

请问P大,既然G4D可以做到,那为什么大家还要用: find --set-root /ntldr && chainloader /ntldr 呢?  详情 回复 发表于 2015-10-1 20:42
回复

使用道具 举报

发表于 2015-10-1 20:42:11 来自手机 | 显示全部楼层
pseudo 发表于 2015-10-1 01:06
title 从第一硬盘启动
rootnoverify (hd0)
chainloader (hd0)+1

请问P大,既然G4D可以做到,那为什么大家还要用:
find --set-root /ntldr && chainloader /ntldr
呢?

点评

萝卜白菜,各有所爱。命令一大堆,只挑选自己喜欢的。 各种命令,都有其用途。在你没有需要的时候,它是无用的。当你需要它的时候,它就是有用的了。 多看看基础教程,可以解决很多疑问。  详情 回复 发表于 2015-10-1 21:08
回复

使用道具 举报

发表于 2015-10-1 21:08:05 | 显示全部楼层
nikbobo 发表于 2015-10-1 20:42
请问P大,既然G4D可以做到,那为什么大家还要用:
find --set-root /ntldr && chainloader /ntldr
呢?

萝卜白菜,各有所爱。命令一大堆,只挑选自己喜欢的。

各种命令,都有其用途。在你没有需要的时候,它是无用的。当你需要它的时候,它就是有用的了。

多看看基础教程,可以解决很多疑问。



回复

使用道具 举报

 楼主| 发表于 2015-10-1 22:11:26 | 显示全部楼层
3楼的方案理论上对路,我设置好后光盘启动菜单也出现了,可是选择后就又从优盘启动了。
8楼的方法似乎对路,但是最终的结果一样,闪一下就又从优盘启动了。

用 find 命令查找 /ntldr 、 /bootmgr、 /io.sys 的方案对我不适用。

点评

“3楼的方案理论上对路,我设置好后光盘启动菜单也出现了,可是选择后就又从优盘启动了。 8楼的方法似乎对路,但是最终的结果一样,闪一下就又从优盘启动了。”————那是你的启动U盘的 启动模式是USB——HDD,  详情 回复 发表于 2015-10-1 22:31
回复

使用道具 举报

发表于 2015-10-1 22:31:56 | 显示全部楼层
本帖最后由 有阴也有阳 于 2015-10-1 22:33 编辑
Limpo 发表于 2015-10-1 22:11
3楼的方案理论上对路,我设置好后光盘启动菜单也出现了,可是选择后就又从优盘启动了。
8楼的方法似乎对路 ...


“3楼的方案理论上对路,我设置好后光盘启动菜单也出现了,可是选择后就又从优盘启动了。

8楼的方法似乎对路,但是最终的结果一样,闪一下就又从优盘启动了。”————那是你的

启动U盘的启动模式是USB——HDD,被主板认作了硬盘,第一硬盘,还是C盘,解决的办法:

title 从第一硬盘启动
rootnoverify (hd1)
chainloader (hd1)+1

实际是从第二硬盘的第一扇区启动,但在启动模式是USB——HDD的启动U盘中使用就会从第

一块硬盘的第一扇区启动......
回复

使用道具 举报

发表于 2015-10-1 22:42:26 | 显示全部楼层
本帖最后由 不点 于 2015-10-1 22:43 编辑

建议楼主学习 EFI 的启动知识,毕竟这是微软和电脑厂家要采用的启动方法。BIOS 逐步被取缔,所以折腾 bios 已经没有意义了。

我个人对 EFI 不感兴趣,不过我打算彻底摆脱 Wintel 体系,转到 arm 体系,今后不再购买 windows 和 intel x86 体系的产品了。所以无论 EFI 或 Bios 对我都将失去意义。目前我的这些旧电脑都支持 bios,等它们退役以后,我就不会再接触任何 x86 硬件以及微软的操作系统了。所以我完全不需要学习 EFI 的知识。

然而对于那些离不开微软的用户来说,你最好趁早学习 EFI,否则你会到处碰壁。即使你现在不碰壁,两年以后你就要碰壁了。

回复

使用道具 举报

发表于 2015-10-1 22:56:48 | 显示全部楼层
哦,如果你是从U盘启动的话,情况复杂些。

多数U盘被当作第一硬盘hd0(这时实际硬盘被当作hd1),那么从hd0启动就是从U盘启动了。
少数U盘被当作软盘(这时实际硬盘被当作hd0),那么从hd0启动就是从硬盘启动了。
要判断U盘究竟是不是被当作hd0需要借助其它特征,增加麻烦。

就楼主应用来说,比较简单的是使用这样的菜单项:
title 转下一启动设备
boot -1
这里下一启动设备一般就轮到硬盘了,尤其没有插光盘,或光盘不能启动时。

点评

像 boot -1 这样的命令,依赖 bios 要遵守规范才行。假如 oem 厂家故意破坏规范,则这种方法会失灵的。 所以,这样的命令也只能 "试试 " 罢了,不能当作通用的命令去对待。  详情 回复 发表于 2015-10-1 23:05
回复

使用道具 举报

发表于 2015-10-1 23:05:21 | 显示全部楼层
pseudo 发表于 2015-10-1 22:56
哦,如果你是从U盘启动的话,情况复杂些。

多数U盘被当作第一硬盘hd0(这时实际硬盘被当作hd1),那么从 ...

像 boot -1 这样的命令,依赖 bios 要遵守规范才行。假如 oem 厂家故意破坏规范,则这种方法会失灵的。

所以,这样的命令也只能 "试试 " 罢了,不能当作通用的命令去对待。

回复

使用道具 举报

 楼主| 发表于 2015-10-1 23:57:18 | 显示全部楼层
谢谢“有阴也有阳”的提醒,确实hd0已经不是硬盘了,但是直接引导 hd1 也不成功,map (hd1) (hd0) 就可以了
借用p大的代码就成功了!
  1. title 从第一硬盘启动
  2. if %@root%==(hd0,0) map (hd1) (hd0)
  3. if %@root%==(hd0,0) map --hook
  4. rootnoverify (hd0)
  5. chainloader (hd0)+1
复制代码

点评

以下2个也应该能成功: title 从硬盘启动计算机 map (hd0) (hd1) map (hd1) (hd0) map --hook root (hd0,0) chainloader +1 title 从硬盘上启动计算机 root && map (hd0) (hd1) root  详情 回复 发表于 2015-10-2 11:31
回复

使用道具 举报

发表于 2015-10-2 11:31:39 | 显示全部楼层
本帖最后由 有阴也有阳 于 2015-10-2 12:52 编辑
Limpo 发表于 2015-10-1 23:57
谢谢“有阴也有阳”的提醒,确实hd0已经不是硬盘了,但是直接引导 hd1 也不成功,map (hd1) (hd0) 就可以了 ...


以下2个也应该能成功:

title 从硬盘启动计算机

map (hd0) (hd1)

map (hd1) (hd0)

map --hook

root (hd0,0)

chainloader +1


title 从硬盘上启动计算机

root && map (hd0) (hd1)

root && map (hd1) (hd0)

root && map --hook

root (hd0,0)

chainloader +1


“直接引导 hd1 也不成功”——这可能是有的主板只支持从第一块硬盘启动,要从第二块硬盘启动就必须把第二块硬盘映射成第一块硬盘才能启动:

命令map:

当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windowsxp,就可以使用map命令,能够将hd0映射为hd1,将hd1映射为hd0。

换句话说,可以虚拟的交换两个硬盘而启动所需要的操作系统 。命令形式如下:

grub> map (hd0) (hd1)——将hd0映射为hd1
grub> map (hd1) (hd0)——将hd1映射为hd0

你的“if %@root%==(hd0,0) map (hd1) (hd0)”命令已经将hd1映射为hd0,下面再从hd0的第1扇区启动就实际上是从hd1的第1扇区启动,

故而获得了成功——避开了hd0的启动U盘,从hd1的电脑的第1块硬盘的第1扇区启动了。

原来不成功的指令:

title 从第一硬盘启动
rootnoverify (hd1)
chainloader (hd1)+1

改为:

title 从第一硬盘启动
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd0)
chainloader (hd0)+1

就应该可以成功了。

回复

使用道具 举报

发表于 2019-3-24 23:51:00 | 显示全部楼层
试了很多都不行的
回复

使用道具 举报

发表于 2019-3-25 09:16:10 | 显示全部楼层
U盘启动后转硬盘启动,首先要判断U盘的“身份”,如它不是“硬盘”就比较简单;

还有也不应假定硬盘上有什么系统,除非是已知它上面有NTLDR或BOOTMGR等;

U盘启动后转第一硬盘启动:

1)带UD的U盘

if "%@root%"=="(ud)" && set /a xyz=*0x82b8&0xff00
if %xyz%==32768 && map (hd0) (hd1) && map (hd1) (hd0)
map --rehook
chainloader (hd0)+1
boot

2)不带UD的U盘

set /a xyz=*0x8280
if %xyz%==128 && map (hd0) (hd1) && map (hd1) (hd0)
map --rehook
chainloader (hd0)+1
boot
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 23:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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