QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2585|回复: 12

[好像解决了]用Grub Legacy/Grub4DOS制作可引导的ISO。

[复制链接]
发表于 2010-6-20 12:27:09 | 显示全部楼层 |阅读模式
好像解决了

感谢[聚焦深空]@[LinuxSir.org]的提醒和[糊涂]@[LinuxSir.org]的支持。


================================================================================

我试图自行制做一份可引导的ISO,引导器用Grub Legacy/Grub4DOS。

问题用蓝色标注:
  • 大家谁有在Linux上用Grub做ISO引导的经验?用的是Grub Legacy还是Grub4DOS?

    • 如果用Grub Legacy,需要用到“stage2_eltorito”文件。到哪里去弄这个文件?还是用什么办法“生成”一个吗?
    • 我目前没有弄到“stage2_eltorito”文件,所以用的是Grub4DOS。
        

          
      • 我准备把“grub4dos_ROOT”作为ISO源内容根目录,此目录结构如下:
        grub4dos_ROOT
        |-contents/ //用于存放各种内容
        |-grldr //取自grub4dos-0.4.4-2009-06-20.zip
        `-menu.lst

        menu.lst内容如下:
        1. default=0
        2. timeout=10
        3. title Main Boot Record
        4.         rootnoverify (hd0)
        5.         chainloader +1
        复制代码
        压制ISO的命令和提示如下:
        1. [root@TFW-EVL06-LT grub_iso_test]# mkisofs -J -b grldr -no-emul-boot -boot-load-size 4 -o grub4dos_ROOT.iso grub4dos_ROOT
        2. Warning: creating filesystem with Joliet extensions but without Rock Ridge
        3.          extensions. It is highly recommended to add Rock Ridge.
        4. I: -input-charset not specified, using gb18030 (detected in locale settings)
        5. Size of boot image is 4 sectors -> No emulation
        6. Total translation table size: 2048
        7. Total rockridge attributes bytes: 0
        8. Total directory bytes: 2048
        9. Path table size(bytes): 26
        10. Max brk space used 0
        11. 300 extents written (0 MB)
        12. [root@TFW-EVL06-LT grub_iso_test]#
        复制代码
        生成的ISO文件可以mount,结构如下:
        mnt/ //grub4dos_ROOT.iso
        |-contents/ //用于存放各种内容
        |-boot.catalog
        |-grldr //取自grub4dos-0.4.4-2009-06-20.zip
        `-menu.lst
          
      • ISO里生成一个2KB的boot.catalog,这个文件是什么?有什么用?
          
      • 在VirtualBox虚拟机里用这张ISO引导,BIOS画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,可能的原因有哪些?应该怎样调整?
          




继承自 http://www.linuxfans.org/bbs/thread-192271-1-1.html

[ 本帖最后由 自由狼-台风 于 2010-6-20 20:02 编辑 ]
 楼主| 发表于 2010-6-20 13:40:28 | 显示全部楼层
线索:

系统中没有“/usr/lib/grub/i386-pc/stage2_eltorito”

[ 本帖最后由 自由狼-台风 于 2010-6-20 13:46 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-6-20 15:54:36 | 显示全部楼层
一翻寻找,原来我的“stage2_eltorito”不在“/usr/lib/……”里,而在“/usr/share/……”里。

[ 本帖最后由 自由狼-台风 于 2010-6-23 20:48 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-6-20 16:27:24 | 显示全部楼层
我分别用Grub Legacy和Grub4DOS制作了两个ISO文件,grub_legacy_ROOT.iso和grub4dos_ROOT.iso。在VirtualBox虚拟机上做引导试验时,BIOS画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,没有任何提示信息,所以我做了实机引导试验。现在,这两个ISO都位于[/dev/sda4]/soft.cache/下。

以下为重启试验实况记录。

  • 一级引导用的Lilo,不启动任何系统,只引导到各系统所在的分区。默认项前往Everest Linux 0.6及其Grub所在的[/dev/sda8];第二项前往Ntldr所在的[/dev/sda8]。

    我在[/dev/sda1]装有Grub4DOS,并在Ntldr中添加了引导项。

    Grub4DOS的启动项。

      

        
    • “Boot ISO B”项引导grub4dos_ROOT.iso。

      引导参数见图。

      引导参数见图。

      boot时却无法找到“menu.lst”,出现fall back选单。

      而转入命令行却发现“menu.lst”是存在的。

        
    • “Boot ISO C”项引导grub_legacy_ROOT.iso。

      引导到loading stage2的时候停住不动了,只能重新启动。

        

回复

使用道具 举报

 楼主| 发表于 2010-6-20 16:33:49 | 显示全部楼层
前述命令、提示以及照片记录是否足以判断ISO引导失败的原因

[ 本帖最后由 自由狼-台风 于 2010-6-20 16:38 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-6-20 17:23:55 | 显示全部楼层
最新制作一份用Grub Legacy引导的ISO,可以引导至menu部分。

[root@TFW-EVL06-LT grub_iso_test]# mkisofs -R -J -b boot/grub/stage2_eltorito -no-emul-boot -boot-info-table -boot-load-size 4 -o grub_legacy_ROOT.iso grub_legacy_ROOT
I: -input-charset not specified, using gb18030 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 921
Total directory bytes: 4096
Path table size(bytes): 34
Max brk space used 0
240 extents written (0 MB)
[root@TFW-EVL06-LT grub_iso_test]#

参数缺一不可。
回复

使用道具 举报

发表于 2010-6-20 17:30:15 | 显示全部楼层
印象中Grub Legacy不支持map --mem ISO的……
回复

使用道具 举报

发表于 2010-6-20 18:59:33 | 显示全部楼层
国内制作iso的那些人大多用grub4dos,不管是Linux发行还是WinPe这样的光盘。
国外就比较倾向于用那个Grub Legacy了。
我倾向于grub4dos,因为符合国内大多数人用windows的习惯。

关于stage2_eltorito文件
Grub Legacy是开源项目,所以你要去它发布的源码和二进制包中找找有没有答案。

在VirtualBox虚拟机里用这张ISO引导,BIOS画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,可能的原因有哪些?应该怎样调整?

这个问题应该从光盘引导开始分析,有可能是你的引导没有写入mbr头,有可能是你的mbr头找不到需要引导的文件(比如grldr)。

引导iso用的map -mem不是100%能成功启动的。你这样测试又有了不确定因素。
还是用Virtualbox来测试吧。
再就是引导器只是一个程序,运行起来就是加载到内存中的一个程序,和这个程序在哪个盘符上没有区别...
回复

使用道具 举报

发表于 2010-6-20 19:01:21 | 显示全部楼层
原来你发的那个帖子上有我生成iso的一段操作。那个命令行就是实际MI生成iso使用的。
回复

使用道具 举报

 楼主| 发表于 2010-6-20 19:21:06 | 显示全部楼层
重新用Grub-0.97-X和Grub4DOS-0.4.4-2009-06-20各做了一个ISO,在Virtual Box虚拟机上都能引导至选单,实现重启和关机。为了以后方便,我在两个ISO里分别放置了build_iso.sh。我的Shell脚本写得很烂,愿意喷的就喷吧,喷喷更健康。
  1. export SELF_VERSION=2010-06-20_19-0X
  2. export GRUB_VERSION=0.97-X
  3. #        export ISO_ROOT_DIR=XXX
  4. #        export ISO_TARGET_PATH=XXX
  5. export ISO_NAME=bootable.grub-$GRUB_VERSION.build-$SELF_VERSION.iso
  6. #        chmod -R u+w,a+r,go-w $ISO_ROOT_DIR
  7. export BUILD_CMD='mkisofs -J -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-info-table -boot-load-size 4 -o '$TARGET_PATH/$ISO_NAME' '$ISO_ROOT_DIR
  8. echo $BUILD_CMD
  9. $BUILD_CMD
复制代码
  1. export SELF_VERSION=2010-06-20_19-0X
  2. export GRUB4DOS_VERSION=0.4.4-2009-06-20
  3. #        export ISO_ROOT_DIR=XXX
  4. #        export ISO_TARGET_PATH=XXX
  5. export ISO_NAME=bootable.grub4dos-$GRUB4DOS_VERSION.build-$SELF_VERSION.iso
  6. #        chmod -R u+w,a+r,go-w $ISO_ROOT_DIR
  7. export BUILD_CMD='mkisofs -J -R -b boot/grub/grldr -no-emul-boot -boot-load-size 4 -o '$TARGET_PATH/$ISO_NAME' '$ISO_ROOT_DIR
  8. echo $BUILD_CMD
  9. $BUILD_CMD
复制代码
回复

使用道具 举报

 楼主| 发表于 2010-6-20 19:22:08 | 显示全部楼层
下一步做实机试验。
回复

使用道具 举报

 楼主| 发表于 2010-6-20 19:44:42 | 显示全部楼层
实机测试,两个ISO均可使用。
回复

使用道具 举报

 楼主| 发表于 2010-6-23 20:49:17 | 显示全部楼层
更正笔误:

一翻寻找,原来我的“stage2_eltorito”不在“/usr/lib/……”里,而在“/usr/share/……”里。

[ 本帖最后由 自由狼-台风 于 2010-6-23 20:52 编辑 ]
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-26 03:02 , Processed in 0.045815 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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