2008年11月10日星期一

用Syslinux+GRUB4DOS实现U盘的多启动WinXP+WinPE+Ubuntu+Vista

用Syslinux+GRUB4DOS实现U盘的多启动WinXP+WinPE+Ubuntu+Vista



第一章 用Syslinux制作U盘启动盘


1. 下载syslinux,有windows(syslinux-3.72.zip)和linux的版本,根据你的操作系统选择相应的版本。

2. 用FAT32格式格式化你的U盘。

3. 解压syslinux到某个目录,然后制作U盘启动盘:
Windows:
    进入syslinux主目录下的\win32目录,执行:
    syslinux -sfma e: (假定E盘为你的U盘盘符)
Linux:
    进入syslinux主目录下的\linux目录,执行:
    syslinux -sf /dev/sd0  (假定sd0为你的U盘设备)
执行完之后在U盘根目录下可以看到新加了一个文件:ldlinux.sys,它是syslinux自动生成的。

4. 设置syslinux配置文件:
在U盘根目录下新建文件:syslinux.cfg,title.txt,readme.txt,内容分别如下(配置项的意思请参考syslinux主目录下的\doc\syslinux.txt文件):
readme.txt文件内容:
This is readme file.

title.txt文件内容:
1fCopyRight 2008-2008 Adai All Right Reserved.
Contact: adaishu@gmail.com

4fPlease Select:

0f        1. dfStart GRUB4DOS
0f       

syslinux.cfg文件内容:
# The following 1 is 1 of LABEL 1
DEFAULT 1                缺省启动项就是下面的LABEL 1
DISPLAY title.txt        在启动之前的屏幕显示
TIMEOUT 300            等待用户输入,若是在这个时间内不输入,则选择缺省项启动。单位为1/10秒
PROMPT 1                 是否跟用户交互
F1 readme.txt            等待用户输入时,按F1键将要显示的文件
F2 title.txt                等待用户输入时,按F2键将要显示的文件
F3 syslinux.cfg            等待用户输入时,按F3键将要显示的文件

# Start GRUB4DOS
LABEL 1                     第一个启动项,1可以改成其它文字
    kernel ldntldr           启动的内核
    append initrd=grldr   内核再装载映像来启动系统

第二章 用GRUB4DOS实现多重启动

1. 下载grub4dos(grub4dos-0.4.4-2008-08-08.zip)和loadbin(loadbin-0.1-bin-w32-2008-03-01.zip)。

2. 解压grub4dos和loadbin到各自的目录。

3. 拷贝grub4dos里面的grldr(如果要支持中文,则用chinese目录下的grldr)、menu.lst到U盘根目录下。
拷贝loadbin里面的ldntldr.bin到U盘根目录下。

4. 第一章里面的syslinux.cfg文件实现了GRUB4DOS的启动。就是下面这几行:
LABEL 1

    kernel ldntldr

    append initrd=grldr

5. 修改menu.lst文件,实现多启动。
下面实现9个启动项(配置项的意思请参考grub4dos目录下的README_GRUB4DOS.txt文件):

color white/blue green/blue               颜色设置:未选中字体颜色/背景色    选中字体颜色/背景色
timeout 30                                     等待用户输入,超时则用缺省启动,单位为1秒
default 1                                       缺省启动项

title 0. Boot from Hard Drive (hd1,0)    屏幕上显示的菜单标题
    map (hd0) (hd1)                          把hd0映射成hd1
    map (hd1) (hd0)                          把hd1映射成hd0,这两项就是把两个硬盘交换。因为Windows必须在第一个磁盘的第一个主分区才能启动,而U盘启动时把U盘当成了第一个磁盘,所以必须交换。
使用绝对路径时要注意GRUB对设备的命名方法:
系统的第一个硬盘驱动器表示成(hd0),其上的第一个分区表示为(hd0,0),也就是说对于硬盘,采用(hdx,y)的形式来表示,x、y都是从0开始计数的,x表示硬盘号,y表示分区号。
由于主分区只能有四个,所以第一硬盘的四个主分区分别用(hd0,0)~(hd0,3)来表示;逻辑分区则从(hd0,4)开始算,即第一逻辑分区用(hd0,4),第二逻辑分区用(hd0,5)来表示,依次类推。
一般机子的硬盘都是一个主分区,其余是逻辑分区。因此C盘用(hd0,0),D盘用(hd0,4)来表示。
光盘用(cd)表示,第一软驱用(fd0)表示。

    rootnoverify (hd0,0)                      设置根启动磁盘
    chainloader +1                              从启动链启动,就是从hd0,0分区的引导记录中装入这个分区的自己的引导器,然后引导它。

title 1. Microsoft Micro Windows XPE
    find --set-root /ldrxpe                    找到U盘上的ldrxpe文件,作为根启动文件,因为U盘默认,所以可以不加分区表。
    chainloader /ldrxpe                        启动U盘上的ldrxpe

title 2. Microsoft Windows NT/2K/XP
    map (hd0) (hd1)
    map (hd1) (hd0)
    rootnoverify (hd0,0)
    chainloader +1

title 3. Microsoft Windows Vista
    map (hd0) (hd1)
    map (hd1) (hd0)
    rootnoverify (hd0,0)
    chainloader +1
   
title 4. Ubuntu Linux                            启动U盘上的Ubuntu
    root (hd0,0)
    kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-8.10-desktop-i386.iso
    initrd (hd0,0)/initrd.gz ramdisk_size=10240

title 5. Floppy (fd0)                             启动软盘上的操作系统
    chainloader (fd0)+1
    rootnoverify (fd0)

title 6. memdrive duplicated from floppy image file (hd0,0)/sbm.bin
    map --mem (hd0,0)/sbm.bin (fd0)        把(hd0,0)/sbm.bin在内存里映射成(fd0)
    map --hook                                     hook后就可以使用内存里的(fd0)了
    chainloader (fd0)+1
    rootnoverify (fd0)

title 7. Command Line
    commandline                                   进入命令行模式

title 8. Reboot
    reboot                                            重启机器

title 9. Halt
    halt                                                关闭机器

第三章 用U盘启动U盘里面的Ubuntu

1. 下载Ubuntu(ubuntu-8.10-desktop-i386.iso)。

2. 解压Ubuntu到U盘根目录下,然后把刚解压出来的根目录下\casper目录下的initrd.gz和vmlinuz拷贝到U盘根目录。同时把ubuntu-8.10-desktop-i386.iso也拷贝到U盘根目录下。

3. 第二章里面设置了Ubuntu启动项:
title 4. Ubuntu Linux                            启动U盘上的Ubuntu

    root (hd0,0)

    kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-8.10-desktop-i386.iso

    initrd (hd0,0)/initrd.gz ramdisk_size=10240

第四章 用U盘启动U盘里面的WIN PE

1. 下载win PE(winpeboot.iso)。

2. 把win PE解压到U盘根目录(注意杀毒,上面iso文件里面E:\SETUP\MYINS\MYINS.EXE文件带病毒,把它删除也可以),保证WINNT.XPE位于U盘根目录下,拷贝刚才解压出来的E:\MINIPE\WINPE.IS_到U盘根目录,拷贝刚才解压出来的E:\WXPE\SETUPLDR.BIN和NTDETECT.COM到U盘根目录下。

3. 把U盘根目录下的SETUPLDR.BIN改名为ldrxpe,为啥改名呢,因为在GRUB4DOS里面,.bin后缀名字有特殊意义,所以不能用.bin作为装载文件名。

4. 第二章里面设置了win PE启动项:
title 1. Microsoft Micro Windows XPE
    find --set-root /ldrxpe                    找到U盘上的ldrxpe文件,作为根启动文件
    chainloader /ldrxpe                        启动U盘上的ldrxpe

第五章 用U盘启动C盘里面的WIN XP或vista

1. 无须下载任何东西。

2. 第二章里面设置了这些启动项:
title 2. Microsoft Windows NT/2K/XP
    map (hd0) (hd1)
    map (hd1) (hd0)
    rootnoverify (hd0,0)
    chainloader +1

title 3. Microsoft Windows Vista
    map (hd0) (hd1)
    map (hd1) (hd0)
    rootnoverify (hd0,0)
    chainloader +1

第六章 启动

把U盘插入机器的USB口,重启机器,进入机器的BIOS设置,把“从USB启动”选项加入BIOS的启动项,并且需要放在“从硬盘启动”前面,不然就从硬盘支持启动了。

等待机器读到U盘,进入syslinux启动项,然后进入grub4dos启动项,最后选择相应的操作系统进行启动。




没有评论: