免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11226 | 回复: 11

[好像解决了]用Grub Legacy/Grub4DOS制作可引导的ISO,遇到问题,求解,谢谢。 [复制链接]

论坛徽章:
0
发表于 2010-06-20 12:50 |显示全部楼层
本帖最后由 自由狼-台风0 于 2010-06-20 19:59 编辑

好像解决了。

感谢[聚焦深空]@[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画面过后只有一个光标停留在屏幕左上角,其他地方黑屏,可能的原因有哪些?应该怎样调整?
          


论坛徽章:
0
发表于 2010-06-20 13:40 |显示全部楼层
本帖最后由 自由狼-台风0 于 2010-06-20 13:45 编辑

线索:

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

论坛徽章:
0
发表于 2010-06-20 15:55 |显示全部楼层
一翻寻找,原来我的“stage2_eltorito”不在“/usr/share/……”里,而在“/usr/share/……”里。

论坛徽章:
0
发表于 2010-06-20 16:34 |显示全部楼层
我分别用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的时候停住不动了,只能重新启动。

        

论坛徽章:
0
发表于 2010-06-20 16:35 |显示全部楼层
本帖最后由 自由狼-台风0 于 2010-06-20 16:38 编辑

前述命令、提示以及照片记录是否足以判断ISO引导失败的原因

论坛徽章:
0
发表于 2010-06-20 19:51 |显示全部楼层
好像解决了。少了参数“-R”。

重新用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-2X
  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
复制代码
需要注意,这是最少的参数了,再也不能更少了。

论坛徽章:
0
发表于 2010-06-20 23:24 |显示全部楼层
你用手机照多累啊,另外我估计你是刻碟吧
建议你用虚拟机,可以截屏又省碟

论坛徽章:
0
发表于 2010-06-21 00:54 |显示全部楼层
显然楼上没仔细看。

论坛徽章:
0
发表于 2010-06-21 01:24 |显示全部楼层
本帖最后由 383228273 于 2010-06-21 01:35 编辑

呵呵,楼主,这才叫“真实”,说明是在自己本机上进行了,没法切图,只能用手机照 {:3_200:}

关于 stage2_eltorito 我知道那里有,但不知道是否是你找的,就在 /usr/lib/grub/i386-pc/stage2_eltorito 这里(使用grub1的发行版linux)

楼主,关于 grub 引导 iso 文件我做过,遇到的问题与你差不多,用 linux 中的 grub 引导 iso 不行,就是你切的图那样,要用 grub4dos 来引导 iso 文件。

把 grub4dos 解压出来,放分区根目录中。

如果你是 linux 中的引导,直接在启动时grub菜单,按c键进入grub命令行,输入:

root (hd0,0)          // 这个根据自己的情况写,就是grub4dos解压出来放的分区
kernel /grub.exe
boot                  // 启动,转向 grub4dos了,你可以在grub菜单左上角的位置看得到是 0.97 或是 0.4.4 的字样,现在的 grub4dos 版本是 0.4.4

如果是 windows 就在c:\boot.ini中最后添加个 x:\grldr="Start GRUB4DOS" 吧,从图上看出,似乎楼主已经会做这个了:)

进入 grub4dos 的菜单了,还是用grub命令吧:

map (hd0,1)/xxx.iso (0xff) || map --mem (hd0,1)/xxx.iso (0xff)  // 其中 (hd0,1) 和 xxx.iso 根据自己的情况写
map --hook
chainloader (0xff)
boot

这样就应该可以了启动可引导的iso文件了,感觉这种方式引导了iso文件似乎有些问题,比如:引导xp.iso安装盘,安装会蓝屏;引导大点的linux live cd 时,不能成功启动到桌面(Knoppix)吧,自己没去深入了,楼主有兴趣再去深入下,然后分享出来,呵呵!

{:3_186:}

论坛徽章:
0
发表于 2010-06-22 17:19 |显示全部楼层
呵呵  用这个东西打算做什么啊 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

基于案例的 SQL 优化实战训练营

讲师:中电福富特级专家梁敬彬,参与本次课程培训,你将收获:
1. 能编写出较为高效的 SQL;
2. 能解决70%以上的数据库常见优化问题;
3. 能得到老师提供的高效的相关工具和解决方案;
4. 能举一反三,收获不仅仅是 SQL 优化。
现在购票享受8.8折优惠!
----------------------------------------
优惠时间:2019年3月20日前

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP