準備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"