LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3246|回复: 8

做张多功能的启动盘

[复制链接]
发表于 2003-7-26 14:15:10 | 显示全部楼层 |阅读模式
做张带有Linux的Grub的启动光盘(1)。

    现在的刻录机很平宜吧,大约就100多块钱,就可以拿到一个普通的了。呵呵,我看了论坛里面,好像在Linux下使用刻录机的帖子很少吧,做过自己喜欢的Linux启动光盘的更加少。下面我就说说我是如何做的。可能写地得太过简陋,呵呵,希望给你点启示。
    我的系统是Mandrake Linux 9.0,刻录机当然不能少。
#dmesg | grep hdd
Kernel command line: BOOT_IMAGE=linux ro root=803 quite devfs=mount hdd=ide-scsi
ide_setup: hdd=ide-scsi
    ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:pio, hdd:pio
hdd: LG CD-RW CED-8080B, ATAPI CD/DVD-ROM drive
hdd: DMA disabled

     从上面的信息可以看出,我的刻录机是LG的,设备就是hdd。但在前面的那行,你看到了没有"quite devfs=mount hdd=ide-scsi ide_setup: hdd=ide-scsi"。我的DMA没有找开,不要紧,我不经常用它,快点慢点对我影响不大。先说下如何配置CR-RW的。我是这样装的:

由于我用的是ide接口的CD-RW,而且系统引导是用lilo的,装上后,要改动几处地方:
1) 在/etc/lilo.conf中的每个linux内核启动行后加上这么的一行:
append="hdd=ide-scsi"

2) 在ect/modules.conf中加入了这么的一行:
probeall ide-scsi

3)我在用hdd(刻录机)的时候,直接mount /dev/scd0(注意:CD-RW是当作scsi设备使用了)就可以了,当然,我可以在/etc/fstab里面加上相应的内容,而且直接用Mandrake linux 的supermount了。在/etc/fstab里面有这么一行:
/dev/scd0 /mnt/cdrw auto user,iocharset=gb2312,codepage=936,noauto,ro,exec 0 0

   当然,如果你的系统不是这样,你可以参照下作适当修改。

   其它的软件,就是mkisofs和cdrecord了。你看看你的装了没有?
#rpm -qa | grep mkisofs   
mkisofs-1.15-0.a32.1mdk
#rpm -qa | grep cdrecord
cdrecord-1.11-0.a32.1mdk
cdrecord-cdda2wav-1.11-0.a32.1mdk

下面开始正式做了。

    当然啦,我的系统是lilo引导的,我想做个Grub的启动光盘,那么,用它基本上可以解决引导系统的问题了。

1、制作img文件,先做Grub的启动光盘:

#mke2fs /dev/fd0
#dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
#dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

再制作img文件:
#dd if=/dev/fd0 of=/tmp/me/image/grub.img

2、单一的boot光盘的制作(single-boot-image bootable Cd-rom)

  如果你不太熟悉mkisofs的使用,你可以参考下man mkisofs或info mkisofs。用mkisofs制作能boot的iso文件,其一般的作法如下:
mkisofs -b images/boot.img -c boot.cat -J -r -T \
        -p "光盘标识号" -P "光盘制作人" -A "长光盘标识号" -V "短光盘标识号" \
        -o 光盘映象ISO 光盘内容目录/
   
   其它的参数我就不说明了。(这里要注意下boot.img,即img文件的路径,这个在info mkisofs就提到!The pathname must be relative to the source path specified to mkisofs.即是相对于要mkisofs源相对路径)
   例如,我要刻录/tmp/me目录下的内容。先看看目录的结构:
#ls /tmp/me/
pk/  image/
    pk目录是光盘里面的内容,image目录里面的是img文件。
#ls /tmp/me/image/
grub.img
    看看当前的路径:
#pwd   
/

#mkisofs -b image/grub.img -c boot.cat -J -r -T -p "pk" \
-P " pk" -A "pk" -V "pk" \
-o /tmp/pk.iso /tmp/me

Size of boot image is 2880 sectors -> Emulating a 1440 kB floppy
Total translation table size: 2242
Total rockridge attributes bytes: 913
Total directory bytes: 4096
Path table size(bytes): 38
Max brk space used 9000
784 extents written (1 Mb)

   这样,我的grub启动的iso就做好了:
#file /tmp/pk.iso   
/tmp/pk.iso: ISO 9660 CD-ROM filesystem data。mount它当然没有问题。
# mount -t iso9660 -o loop /tmp/pk.iso /mnt/iso1/
#ls /mnt/iso1/
boot.cat  pk/  image/  TRANS.TBL

(注:后来才知道,也可以这样做启动的iso文件:
#mkisofs -J -r -T -R -relaxed-filenames -p "pk" -P "pk" -A "pk" -V "pk" \
-b image/grub.img -eltorito-alt-boot -hide-rr-moved -max-iso9660-filenames \
-o /tmp/pk.iso /tmp/me
)
   其实是差不多的,你要知道每个options的含义,你看看info mkisofs,它说明得更加详细。这个单一内核的启动盘就做好了。

2. 多启动光盘映象光盘(multi-boot-image bootable CD-rom)的制作:
     同样的道理,你自己先做好多个映像文件,放到某个目录下面。此时mkisofs的一般用法:
mkisofs -J -r -T -R -relaxed-filenames -c boot.cat \
-p "光盘标识号" -P "光盘制作人" -A "长光盘标识号" -V "短光盘标识号" \
-b image1.img -eltorito-alt-boot \
-b image2.img -eltorito-alt-boot \
-b image3.img -eltorito-alt-boot \
-b image4.img -eltorito-alt-boot \
-hide-rr-moved -max-iso9660-filenames \
-o 光盘映象ISO 光盘内容目录/

这里也是要注意下img文件的路径。我是这样做的:
从软盘制作另外的img文件(或者从其它的渠道得到的img文件),
#dd if=/dev/fd0 of=/tmp/me/image/winme.img
#mkisofs -J -r -T -R -relaxed-filenames -c boot.cat \
-p "pk" -P "pk" -A "pk" -V "pk" \
-b image/grub.img -eltorito-alt-boot \
-b image/winme.img -eltorito-alt-boot \
-o /tmp/pk.iso /tmp/me

    这样多启动光盘映象光盘也搞完了。它包括grub和winme的启动光盘。

3. 刻录iso光盘:
   
    在刻录光盘前,请测试下iso是否成功。用VMware或VPC加载iso文件来测试,设置第1启动设备为光驱,选择pk.iso这个文件。iso镜像文件测试无误后,再做下面的吧(这一步你可以不做,也不是必须的,条件是你要保证空白的光盘足够多).
    在Mandrake linux 9.0下的cdrecord的使用方法,我目前还不太会用,但已经能用一些了,一般的用法如下:

cdrecord -v dev=刻录机设备 speed=刻录速度 -eject -fs=4m -data 光盘映象ISO

这里说明下吧,因为关系到刻录,如果不正确,可能会报销你的不少光盘。其中,那些参数的含义:
-v : 显示烧录过程;
-eject : 烧录结束自动弹出你的刻录光盘;
speed : 指定烧录速度;
dev : 指定烧录设备;
-data : 指定烧录档案;
-fs:设定绶冲的大小;

不过,你在使用之前,你还要看看你的系统刻录机的情况:用cdrecord -scanbus,以显示 SCSI Addresses 例如 0,0,0 (scsibus,target,lun) cdrecord的使用方法,还是请你多多看看info cdrecord或 man cdrecord吧。比如我的就是:
#( channel 0, id 3, lun 0)
#cdrecord -scanbus

Cdrecord 1.11a32 (i586-mandrake-linux-gnu) Copyright (C) 1995-2002 J鰎g Schilling
Using libscg version 'schily-0.6'
scsibus0:
        0,0,0          0) 'IBMAS400' 'DCHS09W         ' '03B7' Disk
        0,1,0          1) *
        0,2,0          2) *
        0,3,0          3) *
        0,4,0          4) *
        0,5,0          5) *
        0,6,0          6) *
        0,7,0          7) *
scsibus1:
        1,0,0        100) *
        1,1,0        101) *
        1,2,0        102) *
        1,3,0        103) 'LG      ' 'CD-RW CED-8080B ' '1.04' Removable CD-ROM
        1,4,0        104) *
        1,5,0        105) *
        1,6,0        106) *
        1,7,0        107) *

知道这些参数就可以开工了:

#cdrecord -v dev=1,3,0 speed=8 -eject -fs=4m -data /tmp/faint.iso

过不了多久,哈哈,我在Mandrake linux下又做好了boot光盘的做好。启动试试,呵呵,当然成功啦。当用光驱启动时,
出现:

boot from APAI CD-ROM
1.FD 1.44MB System type (00)
2.FD 1.44MB System type (00)

    当选择1的时候,就进入grub了,当我选择2的时候,就出现winme的启动光盘了。这样虽然简单点,但很实用。呵呵。以前在bbs看到一个软件,好像叫什么Easy Boot(专门制作那种萎软系统的N合1的多功能启动光盘),好像可以作多达36个启动项(26个字母和9个数字),而且还可以做子菜单启动。我想在linux也可以作。关键是问题是你要处理好img文件。不过,我想也不会用那么多了,我只用几个就可以了。呵呵,我可也作一些内核放到光盘来,比如我把装Debian的需要的引导安装文件和sysbase、drivers.tgz做到一个光盘来,用它就可以直接装debain系统了。
    以上,我测试在Mandrake linux 9.0全部通过。缺点:好像我看了mkfsiso的info或man都不知道如何制作启动菜单的,而且如果是启动项多于10个以上的时候,后面的数字应该是用字母开始排了,但不知道如何做。请知情者指点迷津,info mkisofs近2000行,看到我的头都大了,先谢过了!
 楼主| 发表于 2003-7-26 14:16:51 | 显示全部楼层
做张带有Linux的Grub的启动光盘(2)。


        这个帖子是针对你在Linux下不太熟悉mkisofs和cdrecord命令或它们的缺点而作的,而且也可以作为上一个帖子的补充吧,而且大部分linux初学者都可能还在机器中装有MS。呵呵,虽然已经超出了学习linux的范围,但是我们可以用来更好地为linux服务,让我们玩linux更加放心哦。
        在2001至2002年,由于win2k的“N合1”光盘大行其道,很多使用这种光盘的人都想知道这种光盘是如何做的。这类光盘使用了多重启动光盘技术,采用的工具是CD启动模拟器:diskemu1x.bin。后来其作者好像又开发一个叫w2kall.bin的小工具。其中有一篇文章叫“Win2K 3合1与WinXP 2合1启动光盘制作新法”作者是高等教育出版社的胡春林,相对比较有典型意义。我原来看的时候的原始链接:http://www.ccw.com.cn/htm/center ... 在删了没有?:)
        下面我介绍下在win2k下做用diskemu1x.bin来包括linux启动光盘的简单做法。不过,首先要做好以下准备工作:
第一、要求机器安装的是Win2k,因为制作工具CDImage.exe只能在Win2k下运行。(如果没有win2k系统,可以用ultraiso最的版本)
第二、你还要有如下工具或文件,因为制作过过程中要用到;
1、CDImage.exe (命令行界面)或CDImagegui.exe(图形界面)核心软件,必须的。可启动光盘镜像制作工具,生成标准的ISO文件,同时具有优化光盘上文件的功能,使相同的文件只刻录1个,其他的文件都连接到该文件。下载地址下载地址:http://www.tech-hints.com/prog/cdimage.zip,[url]http://www.tech-hints.com/prog/cdimagegui.zip[/url]
2、Getbtimg.exe或WinImage.exe img文件制作工具 (如果没有,可以在linux下用dd代替)
3、diskemu1x.bin cd启动模拟器(必要的),可以到这里找找:http://www.tech-hints.com/files/
4、Diskemu.cmd 英文文本启动菜单,自己可以做的,也可用别人的做参考,可以用一般的文本编辑。
5、VMware或VPC 用来iso文件来测试(不一定需要,条件就是你的刻录光盘足够多)
6、Nero等,刻录软件,在Ms下需要吧!当然可以在linux下用recorder来做也可以。
       
       
        好了工具准备好就可以开始工作了,开始写diskeme.cmd启动菜单。我的如下,你可以作个参考:

  1. :start
  2. cls
  3. print
  4. print    --------------------------------------------------------------------------
  5. print      Ms-Windows and Mandrake linux booter     Bootable CD main menu         
  6. print    --------------------------------------------------------------------------
  7. print  
  8. print              Please choose your favorite from the menu bellowing:
  9. print              ------------------------------------------------
  10. print              1.   Grub booter
  11. print              2.   Glinux booter
  12. print              3.   Dos98 booter
  13. print              4.   Winme booter (With DM)
  14. print              5.   EZ INSTALL BOOT
  15. print              6.   Mandrake Linux Lilo (More Modes)
  16. print    --------------------------------------------------------------------------
  17. print Please Enter the Choice[1-6]:
  18. getkey 30 esc
  19. onkey esc boot 30
  20. onkey 1 goto grub
  21. onkey 2 goto glinux
  22. onkey 3 goto dos98
  23. onkey 4 goto winme
  24. onkey 5 goto zy
  25. onkey 6 goto more

  26. :grub
  27. cls
  28. cd image
  29. run grub.img

  30. :glinux
  31. cls
  32. cd image
  33. run glinux.img

  34. :dos98
  35. cls
  36. cd image
  37. run dos98.img

  38. :winme
  39. cls
  40. cd image
  41. run winme.img

  42. :zy
  43. cls
  44. cd image
  45. run zy.img

  46. :more
  47. cls
  48. cd image
  49. run more.img

  50. :end

复制代码


        上面的内容我想你一看就会知道是什么意思,其中的img文件你可以放在光盘的根目录下或某个目录下,我的情况就是放在光盘image目录下。
        接下来,你就要准备那些img文件或相关的启动文件,你可以从网上下载或者自己制作。我是自己制作的,比如,我制作Windows Me的启动盘,当作好在软盘里后,在Windows下再用WinImage等,运行它,磁盘-->读取磁盘-->保存-->winme.img,要注意后缀名应该是img,而非其它的。在linux下可以这样:dd if=/dev/fd0 of=winme.img 一样可以制作的。
         
        可以用相类似的方法做其它的img文件(grub或lilo的启动盘你可以参考下我的上一个帖子或者别的帖子,在这里不重复了)。然后把做好的所有的img文件放在image目录下。
       
        如果不想一张光盘里面就这么一些东西,你可往里面加,但不要超过光盘的最大容量就可以了。
       
        余下的问题就是iso文件的制作了,在W2k的DOS下,进入bootcd目录,输入以下命令,比如我的:
cdimage -lpkboot -h -n -o -m -t07/01/2003,00:00:00 -bdiskem1x.bin cd pk.iso
其中的结构是这样的:
bootcd是包括cdinage.exe、DISKEM1X.BIN、DISKEMU.CMD,CD目录。
cd目录是光盘的内容,它是存在生成光盘的根目录,最好也存在DISKEM1X.BIN、DISKEMU.CMD这两个文件。里面一定要有image目录(我的情况),而且此目录下的img文件的名字要和diskeme.cmd文件里面的img名相对应(注意一定要对应清楚,多核实几下)。

直接运行CDIMAGE将显示参数说明。下面简单解释一下常用参数意义:
-l : (是JKL的L,不是IBM的I)这是光盘的卷标,我的为pkboot,
-t : 将所有文件设成指定的时间,看起来很专业,我是设为2003年7月1日零点零分零秒(专业吧,你可设为911什么的,呵呵)
-h : 包括隐藏文件
-n : 允许长文件名
-o : 这是最重要的,CDIMAGE的精华就是它。自动判断重复文件,对重复文件只处理一次,并自动修改相关的文件指向。如果你要求逐字节对比,用-oc参数,不这你想制作iso的内容巨多,则需要的时间巨长,速度也会巨慢无比。
-m : 产生大于650M的ISO映象。

其它的参数你可以自己找找来看。

        这样,我的情况就会bootcd目录下生成卷标为pkboot,名字为pk.iso的iso文件了。

测试ISO文件
      用VMware或VPC加载iso文件来测试,设置第1启动设备为光驱,选择pk.iso这个文件。iso镜像文件测试无误后,即可用自己熟悉的软件(例如Nero)将其烧录到光盘。 这样,一个多功能有光盘就可以做好了。再启动机器试试,在我的情况下,不管是grub或者lilo或其它的img都能成功。
      说白了,在Windows下,如果你能理解以上的一些关键内容,就可以做出一张令自己满意的光盘。对于这张光盘,你可以增加他的功能。具体的使用就要看你需要什么样的功能了。呵呵,我有了这张光盘,完全把软盘软驱或其它的启动盘留作纪念了。

      后话,如果你想做出更多的启动菜单,要注意数字只能选1-9,字母只能选a-z,这可能是diskemu1x.bin的特点决定的吧,但至少可以做30多个的img文件了(呵呵,后来再仔细看了下,原来没有必要做那么多的启动菜单选项,因为diskemu1x.bin可以在命令行,在启动的时候,可以按"Q"退出,cd到img文件所在的目录,然后运行"run *.img"也可启动你的img文件了,是不是有点像grub的交互式呢?),已经够牛B的了,而且菜单里面还可以做子菜单。缺点:无法制作出漂亮的彩色菜单。如果想做个漂亮的菜单,好像有一个软件的,叫什么easyboot的,自己找找吧。我不太感兴趣它吧。

(后注:估计初玩linux的朋友,一般都还装有Ms的多个系统,比如win2k和windows9x/me/xp等。此时,你可制作w2k的启动盘,这样你可以更加放心地玩linux。当w2k系统出现引导的问题时,为了能及时修复系统错误,通常需要用含有各种诊断程序的启动盘来启动系统,所以制作一张W2k系统启动盘是一项不可忽略的工作。不过,在制作W2k启动盘时一次就要制作4张,有些夸张。其实,我们完全可以制作出一张可以启动系统的W2k启动盘Mini版,而且可以做在光盘里面。

  1.把W2k的光盘插入光驱中,并进入BootDisk文件夹,并运行其中的MAKEBT32.exe程序(中文提示信息)或MAKEBOOT.ext(英文提示信息)后开始制作,当制作完第一张启动盘后不理会插入另外一张软盘或警告信息,直接关闭DOS窗就OK了;

  2.将制作好的软盘中的所有内容全部删除掉;

  3.从w2k启动分区的根目录(一般都是C盘)中将NTDETECT.COM、BOOT.INI和BOOTSECT.DOS拷贝到软盘中(在w2k中要注意去掉其保护和隐藏的属性!);

  4.从W2k启动分区的根目录中将NTLDR文件拷贝到软盘中,并将其重新命名为SETUPLDR.BIN;

  5.将W2k启动分区的根目录中的NTBOOTDD.SYS复制到软盘中,这个文件是用于控制SCSI卡驱动器的,如果您没有此设备也可以不拷贝,但是拷贝过来可以防止SCSI BIOS发生错误时造成无法启动。
    这样,一张W2k的启动盘就制作完成了。然后再把这张软盘有上面的方法制作到可引导光盘上去,以后遇到无法启动W2k时,用它就可启动你的ms多系统了。)
发表于 2003-7-26 17:57:42 | 显示全部楼层
最近被硬盘分区表搞的头大,做张启动光盘现,那个Kon...x也不错,来,FT,让小弟亲一下先
 楼主| 发表于 2003-7-26 18:03:00 | 显示全部楼层
分区表坏了?那么先用一些常用的工具修复哦?能启动系统,X应该就很容易启动起来了。
发表于 2003-7-26 18:09:14 | 显示全部楼层
可是我用了那垃圾PQforDOS,把我那安装文件的目录(reiserFS)强行改为ext2了,5555555555555
我又没有启动光盘,第二次分区就坏了
 楼主| 发表于 2003-7-26 18:28:15 | 显示全部楼层
抛弃PQ,用Mandraker自带的方便,而且速度也很快,如果想更快,就用DM,几分钟可以搞掂。
扯远了,这个帖子只讨论启动盘和启动相关的基础哦。
发表于 2003-7-27 11:00:46 | 显示全部楼层
要求置精华 ;)

虽然我一般就使用 mandrake 自己的光盘就解决问题了
发表于 2003-7-28 08:28:54 | 显示全部楼层
在MDK9.2下可省掉第1-3步的ide to scsi步骤 ;-)
发表于 2003-9-5 16:29:45 | 显示全部楼层

好阿...

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

本版积分规则

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