准备U盘
因为要放置的系统比较多,我自己的U盘是128G的,最好是64G容量以上的U盘。为了保证兼容性,我一般是用FAT32来格式化。FAT32理论最大卷大小为2TB,单个文件最大大小为4GB。这是它的一个最大缺陷。另外,因为FAT32文件分配采用单链表结构,一个文件由一个一个链接的簇组成,而这些簇链不一定是连续的,所以经常产生碎片问题。
虽然我已经用GRUB4DOS 的映射虚拟磁盘和映射虚拟内存盘方式对系统ISO进行了映射,但是考虑到ISO的尺寸比较大,如果内存不足的话会影响系统的安装,所以我们需要连续的存放文件。因为我只是在Windows安装的时候用到GRUB4DOS,所以我们只要制作的时候一次性的把Windows 相关ISO拷贝进U盘中就行了。如果使用了一段时间,并且增删了很多文件后,就有可能出现文件碎片,表现在U盘安装过程中就会出现加载ISO到内存的情况。这时候我们就要格式化一下U盘或者是用碎片整理软件整理一下了。
格式化
在Linux下我们可以用fdisk命令或者是parted来给U盘分区并标记为fat32格式,然后通过mkfs.vfat格式化。而在windows下,因为微软的限制我们无法格式化大于32G的U盘为fat32格式,windows下格式化超过32G的U盘都会默认到exFAT的文件系统格式。所以我们在windows下格式化大容量U盘的时候一定要用第三方的分区格式化软件,比如DiskGenius。千万要注意啊,exFAT是无法兼容于Syslinux的!
Windows 格式化超过32GU盘时的提示:
在Windows下用DISKGenius 制作分区并格式化:
LINUX下的分区和格式化(也可以用parted来分区)
fdisk -l #查看U盘是哪个设备名 fdisk /dev/sdd #给U盘分区 n #新建分区 p #主分区 enter #默认分区号为1 enter #默认起始扇区 enter #默认结束扇区 t #修改分区类型 c #0c为LBA FAT32 a #活动分区 w #保存修改 #格式化 mkfs.vfat /dev/sdd1
拷贝相关软件并建立相关目录
根据定义的目录结构把syslinux,grub4dos等内容拷贝进U盘,并建立config目录。现在的结构如下:
F: U盘根目录 +---boot 启动相关项目 | +---config 启动配置文件目录 | +---grub GRUB4DOS程序和配置目录 | | | bootlace.com | | | bootlace64.com | | | grldr | | | grub.exe GRUB4DOS主程序 | | | grubinst.exe | | | Menu.lst | | | message | | | version.txt | +---syslinux Syslinux主程序目录 | | | menu.c32 文本菜单程序 | | | syslinux.exe Syslinux Windows安装程序,32位 | | | syslinux64.exe Syslinux Windows安装程序,64位 | | | vesamenu.c32 图形菜单程序 | | | ldlinux.sys Syslinux 第二阶段引导程序 | | | ..............
建立syslinux.cfg配置文件
在建立主配置文件之前,考虑到复用。我们把syslinux的配置分为三个部分:
1.common.cfg 共用的配置和参数,包括整体标题,菜单的大小,背景颜色等等
2.syslinux.cfg 主菜单,包括各大类(windows,linux)的菜单指向等
3.mainmenu.cfg 返回主菜单菜单项,抽取出来为各大类返回主菜单用
common.cfg
prompt 1 #总是显示boot:提示。 menu title System Install UFD 0.91(Test) By steven xie #主菜单的名称 #font /boot/syslinux/xiezhile.psf #菜单字体 #timeout 100 #表示要等待多长时间自动进入默认的启动项,单位为1/10秒。0为禁用超时,没有此项默认也为禁用超时。 menu autoboot Automatic boot in # second(,s)... #可自定义提示信息替换自动启动的提示 menu tabmsg Press [Tab] to edit options #替换按tab键编辑的提示 menu notabmsg Mailto:[email protected] #如果tab键禁用,显示在tabmsg的位置 #menu indent 10 #只能在LABEL标签之后,对前一项菜单缩进多少个空格 #menu disable #只能在LABEL标签之后,禁用这个菜单项,使其无法选中 #menu hidden #只能在LABEL标签之后,隐藏这个菜单项,使其不显示 #menu separator #在菜单上插入一个空行 #menu default #只能在LABEL标签之后,表示为默认的菜单项 #menu begin tagname #menu end #开始,结束一个子菜单。右边显示>标记,子菜单可以继承主菜单的属性,也可以覆盖主菜单的属性,有自己的背景,超时等设置。 #menu goto tagname #只能在LABEL标签之后,转移到指定的菜单项。比如menu goto .top。 #menu exit [tagname] #只能在LABEL标签之后,退出到上一级菜单或到tagname的菜单 #menu quit #只能在LABEL标签之后,退出菜单系统 #menu start #只能在menu begin ... menu end之间,定义默认选项 #menu save #menu nosave #是否记录菜单最后选择的项目 menu background /boot/syslinux/back800.jpg #在使用vesamenu.c32图形菜单的时候,设置背景图片或颜色。支持的图片格式有PNG,JPEG或LSS16格式 menu resolution 800 600 #定义屏幕的分辨率,如果分辨率不可用,将显示文本菜单 #控制屏幕上菜单布局的选项 menu width 80 menu margin 10 menu passwordmargin 3 menu rows 24 menu tabmsgrow 29 menu cmdlinerow 29 menu endrow -1 menu passwordrow 30 menu timeoutrow 32 menu helpmsgrow 34 menu helpmsgendrow -1 menu hiddenrow -2 menu hshift 8 menu vshift 0 #菜单的相关颜色定义 menu color screen37;44 #ff00ff00 #0000ff00 none menu color border30;44 #00000000 #00000000 none menu color title1;36;44 #ffff0000 #1000ff00 std menu color unsel37;44 #ffffffff #0000ff00 std menu color hotkey1;37;44 #ffff0000 #00000000 std menu color sel7;37;40 #ffffffff #20ff8000 std menu color hotsel1;7;37;40 #ff400000 #20ff8000 std menu color disabled1;30;44 #ffcccccc #00000000 none menu color scrollbar30;44 #00000000 #00000000 none menu color tabmsg31;40 #90ffff00 #00000000 none menu color cmdmark1;36;40 #c000ffff #00000000 none menu color cmdline37;40 #c0ffffff #00000000 none menu color pwdborder30;47 #80ffffff #20ffffff none menu color pwdheader31;47 #80ff8080 #20ffffff none menu color pwdentry30;47 #80ffffff #20ffffff none menu color timeout_msg37;40 #80ffffff #00000000 none menu color timeout1;37;40 #c0ffffff #00000000 none menu color help37;40 #ff000000 #00000000 none menu color msg0737;40 #ffffffff #ff000000 none
mainmenu.cfg #内容只有一项,就是返回主菜单
menu separator #插入空行 label mainmenu #syslinux菜单内部名称,必须为唯一的 menu label Return To Main Menu #只能在LABEL标签下,显示在屏幕上的菜单名称 kernel /boot/syslinux/vesamenu.c32 #加载的核心。可以是 LINUX image- Linux kernel image (default) BOOT image- Bootstrap program (.bs, .bin) BSS image- BSS image (.bss) PXE image- PXE Network Bootstrap Program (.0) FDIMAGE image - Floppy disk image (.img) COM32 image- COM32 program (.c32) CONFIG image - New configuration file append ~ #添加一个或多个核心命令行选项,此处~是指主配置文件
syslinux.cfg #主配置文件
ui /boot/syslinux/vesamenu.c32 #选择UI模块是用图形菜单(vesamenu.c32)还是文本菜单(menu.c32) default windowsinstall #定义默认菜单项 onerror /boot/syslinux/menu.c32 /boot/syslinux/syslinux.cfg #当发生错误(比如未找到内核镜像文件)时运行定义的命令 include /boot/config/common.cfg #插入公用配置文件 menu master passwd xiele #定义一个主密码,在用户进入命令行编辑时必须输入(按下[Tab]或[Esc]) menu passprompt Please Input Password #定义密码提示信息 #F1 /boot.msg #F2 /syslinux.cfg #F3 /linux/linux.cfg F4 /help/xperror.txt F5 /help/pciid.txt 按下相应快捷键提供一个全屏的帮助信息,可添加自定义背景(F1-F12 textfile [background]) 下面统一为定义菜单项和附加相应的配置文件 #-------------------------------hp-------------------------------------------- LABEL hpinstall MENU LABEL ^HP SmartStart CDROM KERNEL /boot/syslinux/vesamenu.c32 APPEND /boot/config/hp.cfg /boot/config/mainmenu.cfg #附加hp.cfg 和 mainmenu.cfg menu separator #-------------------------------linux----------------------------------------- LABEL linuxinstall MENU LABEL ^Linux System Install KERNEL /boot/syslinux/vesamenu.c32 APPEND /boot/config/linux.cfg /boot/config/mainmenu.cfg #附加linux.cfg 和 mainmenu.cfg menu separator #-------------------------------windows---------------------------------------- LABEL windowsinstall MENU LABEL ^Windows System Install KERNEL /boot/syslinux/vesamenu.c32 APPEND /boot/config/windows.cfg /boot/config/mainmenu.cfg #附加windows.cfg 和 mainmenu.cfg menu separator #-------------------------------vmware esx-------------------------------------- LABEL vmwareinstall MENU LABEL ^VMware ESX And ESXi Install KERNEL /boot/syslinux/vesamenu.c32 APPEND /boot/config/vmware.cfg /boot/config/mainmenu.cfg #附加vmware.cfg 和 mainmenu.cfg menu separator #-------------------------------tools----------------------------------------- label tools menu label ^Tools kernel /boot/syslinux/vesamenu.c32 append /boot/config/tools.cfg /boot/config/mainmenu.cfg #附加tools.cfg 和 mainmenu.cfg menu separator #-------------------------------my small system-------------------------------- label mytools menu label ^Small Live System kernel /boot/syslinux/vesamenu.c32 append /boot/config/livelinux.cfg /boot/config/mainmenu.cfg #附加livelinux.cfg 和 mainmenu.cfg menu separator #-------------------------------common-------------------------------------------- #隐藏的grub4dos进入项,测试用 label grub4dos menu label grub4dos menu hide boot /boot/grub/grldr #自定义一个分隔条,主要是为了好看 label separator menu label ---------------------------------------- menu disable #调用syslinux的内存测试模块 label memtest86 menu label ^MemTest 86+ 4.2 linux /boot/syslinux/memtest.bin #调用syslinux的硬件检测模块 label hdt menu label ^Infomation Of HardWare com32 /boot/syslinux/hdt.c32 #调用syslinux的重启模块 label reboot menu label ^Reboot com32 /boot/syslinux/reboot.c32 #调用syslinux的关机模块 label poweroff menu label ^Power Off com32 /boot/syslinux/poweroff.c32 #从本地硬盘启动,不一定百分百成功。有可能还是从U盘启动。 LABEL hddboot menu label ^Boot From 1st Hard Disk kernel /boot/grub/grub.exe append --config-file="checkrange 0x80 read 0x8280 && map (hd1) (hd0);checkrange 0x80 read 0x8280 && map --hook;chainloader (hd0)+1"