中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [分享]Grub 命令索引 上一主题 | 下一主题
bean123
中级用户




积分 214
发帖 34
注册 2004-3-10
状态 离线
『楼 主』:  [分享]Grub 命令索引

按字母表列出顺序列出 Grub 中所有的命令(包括Grub4Dos等的扩展),其中带有用法和基本的描述。
英文版:http://grub4dos.sourceforge.net/grubcmd_en.htm
中文版:http://grub4dos.sourceforge.net/grubcmd_ch.htm

2004-12-13 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yuuyuu
初级用户




积分 115
发帖 5
注册 2004-8-19
状态 离线
『第 2 楼』:  

谢谢

2004-12-20 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pierrexqw
初级用户




积分 121
发帖 10
注册 2004-11-19
状态 离线
『第 3 楼』:  

能不能区分一下哪些是gnu grub的功能,哪些是grub4dos的扩展?

2004-12-27 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 4 楼』:  

grub for dos 扩展的命令有:

map --------- 原来就有,但增加了磁盘仿真的命令行参数。
find  --------- 原来就有,但增加了 --set-root 参数。
fallback -------- 原来就有,但只能用于菜单初始化设置中,不能用作菜单项的命令。扩展后可以用于菜单项,也可以用于命令行。

write --------- 原来没有,新增的用于写入内存的命令,是 read 命令的反操作。这对调试 GRUB 有用。

commandline --------- 原来没有,新增的,用来从菜单项返回到命令提示符状态。

能想起来的大致就这些。当然还有其它一些扩展,是 gandalf 和 bean123 等做出的。



因为我们亲手创建,这个世界更加美丽。
2004-12-28 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pierrexqw
初级用户




积分 121
发帖 10
注册 2004-11-19
状态 离线
『第 5 楼』:  

磁盘仿真是指增加了对memdisk.gz的调用吗?我查了一下文档,好像这个是要把整个磁盘memdisk.gz读到内存里面,所以虚拟出来的硬盘不能太大,对不对?
这个仿真磁盘启动时如果需要绕过bios直接读取的话,是不是就会失效?比如说我把现在硬盘上的windows分区制作成了一个映像文件。虽然有足够大的内存,然后把整个都读入内存了,但是仍然启动不了。
如果修改一下memdisk.gz,是不是能实现从iso镜像启动的功能?当然原memdisk.gz的缺陷依然保留着。
gandalf 的IELDR从iso启动是用的什么原理呢?
使用map操作映像文件是不适意味着可以允许操作系统避开bios?只不过这时要求映像文件连续存放了。
呵,看到精华里不点和诸位高手的讨论,挺激动的。我是菜鸟,请指教....

[此贴子已经被作者于2004-12-29 1:33:11编辑过]




2004-12-29 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 6 楼』:  

目前 0.2.0pre13 还没有用 ram 来作为虚拟磁盘的。你可以在 GRUB 下调用 memdisk 来利用 RAM 作为仿真磁盘,不过 memdisk 本身不属于 GRUB 的一部分,它是 syslinux 的一个组成部分。

grub4dos 目前的磁盘仿真,是采用硬盘上的文件来作为虚拟盘,没有用到内存。我现在正在考虑对 RAM 虚拟模式的支持,不过还没有具体的时间表。如果完成了,那么以后就不再需要调用 memdisk 这个软件了。

目前由于是用硬盘文件来作为虚拟盘,所以,可以虚拟很大的硬盘,可以认为是任意大。

这里所谓的虚拟,其实都是指 BIOS 调用。在那些不用 BIOS 的场合,这种虚拟就失效了。在搜索引擎中搜索 grub for dos 可以找到几篇文章,详细说明这一问题。

关于 CDROM以及ISO 的虚拟,我以后可能就不再投入了,或者较少关注了。目前似乎 gandalf在做这方面的工作。这个领域比较困难,我认为的。所以,我自己撤出,还是等待别人去做吧。如果我们的要求不是太苛刻,那么 gandalf现有的工作就基本可以满足需要了。我认为,在 CDROM/ISO 仿真的领域,不可能做到太完美,这是历史的原因造成的,正如我以前所认为的那样。

补充一点,我还没有研究 gandalf 的 IELDR,所以,他用什么原理,我答复不了,你可以看看他的文档。

经过 map 仿真的磁盘,只有在 DOS 以及其他的一些承认 BIOS 磁盘的操作系统(如 win98 )下才有效,否则,在别的操作系统下是根本访问不到这样的仿真磁盘的。

img文件必须按照物理扇区连续存放,这是 map 命令的要求,否则 map 不工作。这与是否允许操作系统避开 BIOS 无关。

谢谢你关注 GRUB 的开发。








因为我们亲手创建,这个世界更加美丽。
2004-12-29 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pierrexqw
初级用户




积分 121
发帖 10
注册 2004-11-19
状态 离线
『第 7 楼』:  

谢谢不点的回答。

“经过 map 仿真的磁盘,只有在 DOS 以及其他的一些承认 BIOS 磁盘的操作系统(如 win98 )下才有效,否则,在别的操作系统下是根本访问不到这样的仿真磁盘的。”这段话也就是说直接通过iso文件安装Linux等系统是不可能的了吧?真是遗憾哪。
map之所以有连续存放的要求,是因为很关键的技术限制吗?没有可能改进的对吧?
memdisk的技术是linux给的,是不是意味着它就可以避开bios访问这个限制呢?

再提几个建议。
1.dos4grub能不能提供类似boot.ini中启动NT系统的方式启动。multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin/fastdetect
这样一句话的功能好像dos4grub还没有实现.我所想要的一个功能是把boot.ini中的timeout=0,然后只出现grub的启动画面,可以从 grub中直接进入NT系统。
不点是仔细分析过NTLDR的,应该清楚这个怎么实现的吧?不知道用GRLDR实现这样一个功能值不值得考虑。
2.ReactOS(http://www.reactos.com/),不点了解吗?是一个模拟Windows NT(原来模拟Windows9x)系统的FreeOS,不知道有没有计划对它的启动作一些特别的支持?还有OS/2等系统。毕竟这个项目是基于dos的,我觉得和dos相关的这些系统提供内嵌的支持很方便,直接执行grub.exe就可以了。类似grub4lin这样的方案就容易受kexec模块的限制了。
3.整个grub的有关文件能不能放在磁盘的0磁道上?这样它就可以完全脱离操作系统了。254个扇区够用了吗?
4.由于硬盘只支持4个主分区,而大多数操作系统要求装在主分区上,意味着一台PC里面能装的操作系统是很有限的。有个软件BootStar(http://www.bootstar.com/),据称可以支持多达15个主分区。我想过它的实现方法,应该也就是靠备份分区表,没什么技术上的难度。只要在装上软件后不改动分区大小和位置,然后在剩下的空间里添加分区,那么多少个主分区都可以实现的。grub实现类似的功能,在同一块硬盘上启动很多很多的操作系统,有没有必要呢?

再有一个 ,在sourceforge.net的页面上我看到有人提交了一个bug,好像说的是nt的某个特殊服务要利用引导扇区空白段的一些字节,使用grldr会把这些字节冲掉。这个bug没人回应,是已经解决了吗?



2004-12-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 8 楼』:  

时间比较紧张,现在先只说说你提到的第一个问题。

与你说的相反,通过磁盘仿真,比如虚拟软盘或者虚拟 ISO 光盘,是可以安装或者启动 linux 的。这在以前的一些文章中有说明的。

要点在于,启动 linux 有两个步骤,第一个步骤就是加载 linux 内核到内存中。第二步,linux 内核取得控制权,脱离 BIOS ,也脱离 CPU 的实模式。

在第一步骤,加载 LINUX 内核到内存中,这时仍然利用了 BIOS,所以,此时仿真的磁盘还起作用。因此,用仿真磁盘启动 linux 是可以的。但当 linux 成功启动之后,显然你就不能访问该虚拟磁盘了。类似地,启动其他操作系统也是同样的道理。

> map之所以有连续存放的要求,是因为很关键的技术限制吗?没有可能改进的对吧?

map 仿真磁盘,利用的不是内存,而是一个磁盘文件。如果这个磁盘文件有很多碎块,7零8落的,那么仿真起来就特别麻烦,特别困难,而且还容易出现BUG,严重的BUG很危险的,毁掉磁盘是很容易的事情。所以,磁盘仿真的时候,要求 img 文件必须连续。

如果 img 文件不连续,可以加上 --mem 参数(目前正在准备做,还没有在 pre13 中实现),这样,把整个 img 文件拷贝到扩展内存中,实现 RAMdisk 方式的仿真。不过,这时你仿真的磁盘大小就要受到限制了,不能是任意大了。

> memdisk的技术是linux给的,是不是意味着它就可以避开bios访问这个限制呢?

memdisk 不是 linux 给的,而是 syslinux 的一个功能,用来启动一个虚拟磁盘的。它完全是修改 int13 和int15,也就是说是在 BIOS 的级别上实现磁盘仿真。因此,它也和 map 一样存在限制的(例如不能从linux访问到虚拟磁盘)。







因为我们亲手创建,这个世界更加美丽。
2004-12-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 9 楼』:  

关于你提出的几个建议:

1。在 boot.ini 中用 default 命令可以达到你的目的。你研究一下 boot.ini 的语法就知道了。

2 和 4。还未考虑过这些问题,因为没有时间,所以我可能不会考虑这些问题。

3。很遗憾传统的 CHS 模式所支持的磁道,最大只能是 63 个扇区,不会有 254 个扇区,所以,把 GRUB 完全放在 0磁道是不可能的。但是,不知道 GNU 新开辟的 GRUB2 是否能够把 GRUB 的代码压缩到 63 个扇区,这样,它就有可能放在 0 磁道了。

最后特别谢谢你关于 WinGRUB 主页上的 BUG 报告的提醒。解决办法如下(注意看“重要更正”部分),希望 bean123 能够相应地修改 WinGRUB:

--------------------

将 GRUB 安装到硬盘主引导磁道(MBR 以及紧接 MBR 之后的几个扇区)的方法:

a. 将硬盘第一扇区(MBR)读入内存区域1,将 GRLDR 开头 5 个扇区读入内存区域2。
b. 将 内存区域1 的 0x01be 至 0x01ff 这 66 个字节复制到 内存区域2 的 0x01be 至 0x01ff。(这个区域是硬盘分区表)。
c. 将更改后的 内存区域2(其长度是 5 个扇区)写入硬盘开头的 5 个扇区上(也就是 MBR 以及紧接着它后面的 4 个扇区上)。

重要更正:上述 b. 应当更改为:
b. 将 内存区域1 的 0x01b8 至 0x01ff 这 72 个字节复制到 内存区域2 的 0x01b8 至 0x01ff。(这个区域是Windows 的 disk signature 以及硬盘分区表)。
参见 BUG 报告 http://sourceforge.net/tracker/index.php?func=detail&aid=1062928&group_id=104188&atid=637224

(声明:以上步骤写入 MBR,危险!!操作一定要谨慎,千万避免出现阴差阳错,一定保证不要失误!)

----------------

pre13 并无 BUG,只是有关写入 MBR 的方法需要作出更改。





因为我们亲手创建,这个世界更加美丽。
2004-12-31 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pierrexqw
初级用户




积分 121
发帖 10
注册 2004-11-19
状态 离线
『第 10 楼』:  

谢谢不点关于boot.ini,我想我可能没表达清楚。我是想不把grub写入MBR,而是利用GRLDR调用,但是调用的时候又不想出现NTLDR的启动界面,而直接进入grub的选择菜单---这一点我可以通过default=grldr,timeout=0实现。但是这时若又使用grub中的root (hd0,0) chainloader +1,则又会进入ntldr,grldr,由此循环,进不了windows。所以我希望可以直接由grub进入windows而不经过ntldr。那个63扇区是我多记了一位,呵呵。不知道会不会有人用纯汇编考虑实现那个功能,不过对各种文件系统等等驱动的支持可能就会有限了,也不好。

2005-1-1 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 11 楼』:  

直接引导 windows NT 的内核,这个我没能研究。即使在 grub.exe 的情况下,目前我们也不可能直接引导 DOS 的内核IO.SYS,更不可能引导 win98 的内核 win, 以及 kernel 等等了。我估计很少有人愿意投入精力来研究这个。

正如你已经说过的那样,目前你大概只有两种选择:其一是将 GRLDR 的 5 个引导扇区装入 MBR,其二是把 timeout 设为非 0 的数值。

由于前面所说的 BUG 已经解决,所以,将 GRLDR 写入 MBR 是安全的了,建议你采用这种办法。(在bean123修改WINGRUB之前,你可以手动操作,不过确实要小心了,没有把握的话,不要这么做。)




因为我们亲手创建,这个世界更加美丽。
2005-1-1 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pierrexqw
初级用户




积分 121
发帖 10
注册 2004-11-19
状态 离线
『第 12 楼』:  

写MBR总觉得心里有疙瘩,我还是双重启动菜单好了:)再次谢谢不点

2005-1-4 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Esme
初级用户




积分 170
发帖 35
注册 2005-2-24
状态 离线
『第 13 楼』:  

一年前的技术限制,呵呵,现在可以用chainloader hd(0,0)/ntldr解决了

2006-5-21 04:29
查看资料  发送邮件  发短消息 网志  OICQ (43125874)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: