grub通过相对扇区号引导文件
绝对扇区引导是下面的写法:title 【40】 引导金士顿SSD-480G-HPA-MBR修改版
chainloader (hd0)40154320+63
grub通过相对扇区号引导文件怎么写?
帮一个朋友安装HPA分区,grldr启动后无法准确识别分区和里面的文件,故想到引导“相对扇区”文件,
比如引导grldr所在位置之后10000个扇区的ISO文件,怎么写?谢谢!
用 chenall 为 grub4dos 增添的变量、函数以及编程方法,可以实现。
先列出 grldr 的块号列表,用 blocklist 命令。
再设法解析 blocklist 的输出结果,找到你想要的扇区号数值。
将它加上 10000,得到你的 iso 文件的起始扇区号。
你的 iso 文件就等同于 (hd0)xxxx+yyyy 这个文件了。其中,xxxx 是起始扇区号,yyyy 是 iso 的扇区总数。前提条件是,iso 要连续,即,没有碎块。
接下来,你可以把 (hd0)xxxx+yyyy 当成你的 iso 文件,进行 map 等等之类的操作。
非常感谢“不点”大师回答。。。 好久没有露面了。 备忘一下,map 确实能够跳过一定数目的扇区,再开始映射。请查阅 map 的参数(不过,要查阅源代码才行,公开的文档不一定写明,可视为未公开、半公开的功能)。
但如果想用 img 相对于 grldr 的距离,这种应用场景还是很少会见到的,所以也难有现成的解决方案。大概也只能像前面提到的,用曲折的办法了。 本帖最后由 天涯海角1216 于 2020-3-26 07:27 编辑
不点 发表于 2020-3-24 17:02
备忘一下,map 确实能够跳过一定数目的扇区,再开始映射。请查阅 map 的参数(不过,要查阅源代码才行,公 ...
谢谢不点大师亲临指导!
还有个问题,清华同方5.0.7的启动代码,是放在硬盘0扇区及其以后20多个扇区,在硬盘上加载固然没有问题,比如硬盘里MBR代码损坏,如果用U盘启动电脑,通过U盘里备份的同方5.0.7的启动代码MBR文件,用grldr引导启动电脑硬盘的清华同方5.0.7程序正常运作,菜单怎么写?
谢谢!
本帖最后由 sunsea 于 2020-3-26 08:54 编辑
天涯海角1216 发表于 2020-3-26 07:26
谢谢不点大师亲临指导!
还有个问题,清华同方5.0.7的启动代码,是放在硬盘0扇区及其以后20多个扇区,在 ...
chainloader --force /XXXX.bin#(备份文件)
rootnoverify (hdX,Y) #你的硬盘和适当的分区
boot
尝试一下这两句?
引用自本区置顶的帮助帖子:
例2:
直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及FreeDOS 的 KERNEL.SYS.
例如:
chainloader --edx=0xPPYY (hd0,0)/ntldr
boot
chainloader --edx=0xYY (hd0,0)/io.sys
boot
chainloader --ebx=0xYY (hd0,0)/kernel.sys
boot
十六进制的YY 指定了启动驱动器号,十六进制的PP指定了 NTLDR 的启动分区号。如果启动驱动器是软驱,PP应该是一个十六进制的值ff,即十进制的255.
对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行,请使用--ebx 。当文件位于它们平常的位置时,选项 --edx (--ebx)可以省略。但某些情况下,这些选项是必需的。
例如,假设被调用的ntldr文件在ext2分区(hd2,8)中,而你又希望它认为(hd0,7)的 windows 分区是启动分区,那么--edx就是必需的:
chainloader --edx=0x0780 (hd2,8)/ntldr
对于DOS核心(即,IO.SYS和KERNEL.SYS),启动分区号是没有意义的,因此你只需指定恰当的启动驱动器号YY(不过指定了启动分区号也是无害的)。
上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命令来指定。
例如:
chainloader (hd2,6)/kernel.sys
rootnoverify (hd0) <-------- YY=80
boot
chainloader (hd0,0)/ntldr
rootnoverify (hd0,5) <-------- YY=80, PP=05
boot
sunsea 发表于 2020-3-26 08:51
尝试一下这两句?
引用自本区置顶的帮助帖子:
谢谢回复!
试了一下,不成功的。 本帖最后由 sunsea 于 2020-3-26 10:27 编辑
天涯海角1216 发表于 2020-3-26 09:58
谢谢回复!
试了一下,不成功的。
BIOS默认的启动行为是只读0扇区,0扇区的代码负责加载后面20多个扇区……估计0扇区代码找不到后面的了……或许需要弄一个硬盘镜像,本身是空的,然后引导扇区是你的东西,然后map --mem到内存并启动(rootnoverify指定一下EDX)
仅提供思路……这种多扇区的引导代码确实麻烦
要是有办法解析一下它0扇区的行为就好了……然后用g4d复刻一下
本帖最后由 天涯海角1216 于 2020-3-27 08:31 编辑
sunsea 发表于 2020-3-26 10:21
BIOS默认的启动行为是只读0扇区,0扇区的代码负责加载后面20多个扇区……估计0扇区代码找不到后面的了… ...
title【09】 启动HPA所在盘第2扇区启动同方急救中心
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1)
chainloader 2+1
title【10】 启动HPA所在盘第459331522扇区启动同方急救中心
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1)
chainloader 459331522+1
title【11】 从U盘第60597180扇区启动同方急救中心
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1)
chainloader (hd0)60597180+1
title【13】/SZ56-TF5.0.3.BIN
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1)
chainloader (hd0)/SZ56-TF5.0.3.BIN
boot
无数次尝试,终于成功!!!
这几个菜单都成功!
页:
[1]