无忧启动论坛

 找回密码
 注册
搜索
一次装机 终生领工资最纯净的「微PE装机优盘」UEPON大师作品卡瑞飞系统和装机二合一超级U盘
诚聘PE工具开发技术员QQ:1607112133系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
12
返回列表 发新帖
楼主: Limpo

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

[复制链接]
 楼主| 发表于 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, 2019-4-20 02:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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