Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

使用 Grub4Dos 來做隨身碟的開機管理
post by tommy @ 01 十二月, 2007 00:03

上星期買印表機時, 送了一個 1G 的 USB 隨身碟. 由於容量不小, 自己每天也都是筆記型電腦帶來帶去的, 也沒什麼東西要用這個來存放. 最後想說, 這玩意也可以拿來開機, 我只要把一些常用的程式放到上頭去, 就可以取代原本的一堆緊急救援的光碟片了, 這樣子應該會方便許多. 不過這些光碟, 有些是 DOS, 有些是 Linux, 也有些是 XPE 的程式, 如果要都放在一個隨身碟上頭, 就必須要有個開機管理的程式, 能夠在開機時選擇要進到那一個系統才可以. 所以就想到了在 Linux 中常用的 grub 這個 boot loader, 剛好也有個 DOS 版本的 grub4dos 可以使用. 所以... 就決定使用 grub4dos 來處理了.

首先使用 grubutil 裡頭的 grubinst_gui.exe 程式, 把隨身碟的 MBR 修改成使用 grub 來開機, 然後把 grub4dos 的 grldr 放到隨身碟的根目錄中, 基本上, 這樣子做之後, 就會在開機後執行 grldr 來使用 grub 了.  剩下來的, 就是設定 grub 的各種開機選項了.  只要同樣在隨身碟的根目錄中, 建立一個 menu.lst 的文字檔, 設定 grub 的各種開機選項就可以了.

首先, 如果你的隨身碟要由 DOS (Windows 98 中的 DOS) 開機, 只要把 IO.SYS, MSDOS.SYS 與 COMMAND.COM 複製到隨身碟的根目錄中, 然後在 menu.lst 中加上下面的設定:

title DOS
chainloader /io.sys

這樣子在 grub 中就會出現 DOS 這個選項了. 選擇後就會透過 IO.SYS 來做一般 DOS 開機的動作了.

接著, 我還有用 NoN 的 XPE, 把 ISO 檔案內的 SETUPLDR.BIN, RXPE.COM, RXPE.IM_ 與 RXPE.SIF 放到隨身碟的根目錄, 再把 OUTTOOL 目錄複製一份到隨身碟中, 然後在 menu.lst 中加上下面的設定:

title NoName XPE
chainloader /setupldr.bin

這樣子在 grub 中會出現 NoName XPE 這個選項, 選擇後就會載入 NoN XPE 了.

接著, 經常使用的 memtest86 軟體, 建立一個 MEMTEST86 的目錄, 把 memtest86.bin 放到這個目錄下頭, 然後在 menu.lst 中加上下面的設定:

title MemTest86 3.4
kernel /memtest86/memtest.bin (fd0)
boot

這樣子在 grub 中選擇 MemTest86 3.4 就會執行 memtest86 軟體. 

接著, 在 Linux 中, 經常使用 SystemRescueCd 這個光碟, 同樣也可以放到隨身碟中. 首先建立一個 SYSRCD 的目錄, 然後把光碟內的 sysrcd.dat 放到這個目錄下, 再把光碟內 isolinux 目錄下的 rescuecd 與 rescuecd.igz (如果你習慣選擇使用其他的 kernel 也可以, 如 x86-64 的 rescue64 與 rescue64.igz)也放到 SYSRCD 目錄內. 然後在 menu.lst 中加上下面的設定:

title SystemRescueCd
root (hd0,0)
kernel /sysrcd/rescuecd subdir=sysrcd setkmap=us video=ofonly vga=0 cdroot
initrd /sysrcd/rescuecd.igz
boot

這樣子在 grub 中選擇 SystemRescueCd 就會載入 SystemRescueCd 的內容了.

如果你有使用 Acronis True Image 這個軟體, 可以先使用這個軟體, 產生回復光碟或光碟的 iso 檔案, 然後建立一個 ATIRCD 的子目錄, 把光碟內的 kernel.dat 與 ramdisk.dat 放到 ATIRCD 的子目錄中. 然後在 menu.lst 中加上下面的設定:

title Acronis True Image
root (hd0,0)
kernel /atircd/kernel.dat quiet
initrd /atircd/ramdisk.dat /s
boot

這樣子在 grub 中選擇 Acronis True Image 這個選項, 就會執行 True Image 了.

如果你有 Windows 98 的開機片, 也可以把開機片做成一個 image 檔案 (winimage 或 linux 下頭直接用 dd 指令就可以), 如 win98.img 然後建立一個 WIN98 的目錄, 把這個檔案放到 WIN98 目錄中, 在 menu.lst 中加上下頭的設定:

title Windows 98 Boot Disk
map --mem (hd0,0)/win98/win98.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

這樣子 grub 會弄一個虛擬的軟碟機, 把這個 image 載入會再開機.

最後, 加上一些進入 grub shell, 由軟碟機開機, reboot, halt 指令的項目:

title GRUB Command Line
commandline
 
title Floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
 
title Reboot
reboot
 
title Halt
halt

這樣子就完成了. 整個 menu.lst 如下:

color black/cyan yellow/cyan
default 0
 
title DOS
chainloader /io.sys
 
title NoName XPE
chainloader /setupldr.bin
 
title MemTest86 3.4
kernel /memtest86/memtest.bin (fd0)
boot
 
title SystemRescueCd
root (hd0,0)
kernel /sysrcd/rescuecd subdir=sysrcd setkmap=us video=ofonly vga=0 cdroot
initrd /sysrcd/rescuecd.igz
boot
 
title Acronis True Image
root (hd0,0)
kernel /atircd/kernel.dat quiet
initrd /atircd/ramdisk.dat /s
boot
 
title Windows 98 Boot Disk
map --mem (hd0,0)/win98/win98.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
 
title Windows 98 Boot Disk with USB support
map --mem (hd0,0)/win98/w98usb.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
 
title GRUB Command Line
commandline
 
title Floppy (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
 
title Reboot
reboot
 
title Halt
halt

經過這樣子的處理, 我們可以把一堆原本開機的軟碟片或光碟片, 都整合在一個小小的隨身碟中, 只要系統有支援 USB 開機 (現在應該沒有機器是不支援的吧), 就可以執行這些程式了. 同樣的方法, 並非只有 USB 隨身碟可以使用, 也可以使用在 USB 的硬碟機上頭. 剛好公司這幾天也發給我一個 WD 2.5" 160G 的 USB 硬碟來備份我的筆記型電腦 (老闆的電腦硬碟壞了一次怕到了, 給每個主管都配一個小硬碟來備份資料), 同樣使用 grub4dos, 把這些軟體都複製過去, 一樣可以拿來開機使用. 


2007/12/06: 

grub4dos 0.4.3 2007/11 之後的版本, 也支援直接由 .iso 的檔案中開機, 例如我們有個 ftool_203.iso, 可以用下面的方式來開機:

title FTool 2.0.3
map --mem (hd0,0)/ftool/ftool_203.iso (hd32)
map --hook
chainloader (hd32)
boot

只要指定 hd32 或更大的數字, 就表示該 image 是一個 ISO 9660 的光碟檔, 這樣子就可以了 (不過載入動作很慢, 就算是小檔案, 也要等一段不算短的時間, 檔案如果不小... 會有機器不動了的感覺). 不過, 如果你的系統是在光碟開機載入核心之後, 還會用到光碟的內容, 可能就會有問題 (以 NoN XPE 來說, 載入核心後會找不到 OUTTOOL 的檔案, 所以除了內建在核心的軟體外, 在 OUTTOOL 的程式不會出現). 

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

一值以為grub4dos只能在fat/fat32下工作,在ntfs下只能寄居ntldr下…今天才發現grubinst(grubutil)可以在nt/2k/xp下寫進mbr,這樣grub4dos就懂得搜索ntfs根目錄下的grldr了,再加上個splash, perfect!!!!

commons icon [2] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

原本公司配的那個 WD 160G 的外接硬碟是用 FAT32 格式的, 後來在備份某些 .iso 檔案時, 發現大於 4G 不支援, 就轉成 NTFS 格式了.

不過 grub4dos 照樣可以使用, 上頭說的只有 DOS 開機的那部份無法使用, 不過利用 .img 的磁碟檔來模擬軟碟機也可以達到 DOS/WIN98 開機的動作. 如果使用新的版本, 更可以利用 .iso 來開機.

只不過 DOS 開機後, 沒有外加程式的話, 無法讀寫 NTFS 的資料, 不過... 這樣的需求不多, 如果真有需求, 也有免費的 NTFS4DOS (Avira 的免費版本, 就是 AntiVir 那家公司出的) 可以使用.

commons icon [3] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

HELLO 想請問一下, 小弟按照您說的,TrueImage11可以順利完成, 但用TrueImage10,一直失敗...!

我是用4G USB隨身碟,DOS開機(為了用Spfdisk,Ghost),來載入GrubDOS 0.4.3 (有中文選單,使用NoName XPE)。不知小弟那裡弄錯了, 10版才無法順利執行,錯誤訊息如下:
Booting '(2) Acronis True Image 10 HOME
Filesystem type is fat,partition type 0xb
[Linux-bzImage,setup=0x1400,size=0xa3392]

Loading, please wait...
Kernel panic:No init found.Try passing init=option to kernel.
- (一個遊標就一直一直閃,當掉了...)

commons icon [4] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

我印象中好像有用過 TrueImage 10, 並沒有什麼問題. (不知道有沒有記錯)
如果不能用, 可以用 TrueImage 10 做成 .iso 的檔案, 再透過 Grub4Dos 去利用這個 .iso 開機應該也是可以的.

commons icon [5] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

可不可以解釋一下你上面議些在menu.lst中的語法
謝謝!!

commons icon [6] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

請問大大~~
如果我要加入spfdisk及ghost要怎加入???
3q^^

commons icon [7] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

我想請問一下,如果我要將Centos、slax、puppy..等的linux版本放進隨身碟,那我的grub4dos也是按照上面設定就可以了嗎?

commons icon [8] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

核心載入是上頭的作法就可以. 不過你的核心要能夠知道 root 及之後的 filesystem 要去 usb 上頭找才可以.

可以參考 SystemRescueCd 的作法. http://www.sysresccd.org/Main_Page

commons icon [9] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

這是個好用的工具,
我有個問題,因為我把它拿來做Win7的安裝光碟,結果是可以進安裝光碟,但卻無法安裝,會出現找不到DVD device driver的視窗,然後整個安裝就卡住了。
不知版主是否知道該如何解,還請告知小弟.

commons icon [10] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

如果是在USB上用ISO開機呢?

commons icon [11] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

iso? 上頭不是有寫?

commons icon [12] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

如果是要map .ISO的話
可以把--mem 拿掉,有些多功能的ISO容量比較大
,在記憶體不夠的狀況下會造成載入不完全,映射會失敗

commons icon [13] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

請問大大如果要加入ghost.exe的話,menu.lst要怎麼寫呢?

commons icon [14] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

給#13
我是做成開機軟體加入GHOST.EXE檔
再由AUTOEXEC.BAT呼叫GHOST.EXE
find --set-root /GHOST.gz
map --mem /GHOST.gz (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
boot

commons icon [15] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

板大~比如說我的iso檔大約有2G左右
以上述方式製作後確實卡的像當機...
這有方法可解決讓他讀取此iso時可快速進入嗎?

commons icon [16] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

如果我想將一隻16G的隨身碟製作成USB開機後可以選擇進入DOS及安裝XP、Windows7以及其它OS,此法是否可行?

commons icon [17] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

用光碟模擬的方式應該都不行 (因為重開機後還是需要再去讀光碟, 那時就會讀不到).
至於其他的方式, 自動的我覺得應該也不行吧, 手動的也許有可能, 以 XP 為例, 就是把要安裝的 partition 弄好後, 再把 i386 的目錄複製過去, 再去執行 winnt.exe 就可以安裝. 至於裝不裝的起來, 要試了才能知道.

commons icon [18] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

想請問GRUB與GRUB4Dos有何不同?
因為我想將DOS製作好的XXX.img
透過grub直接用memdisk去執行
可是無論怎麼試都失敗..
有人可以教教我嗎?

commons icon [19] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

所以你是用一般的 grub (0.9x 或 1.9x 版)?
我想名字是一樣, 功用也差不多, 不過實際上是不同的程式. 在 1.9x 的手冊中並沒有看到有 map 這功能 (0.9x 的不想去找....)

不過有個 loopback 的功能, 可以載入 image 或 iso, 然後應該就可以 load 裡頭要開機的那一個檔案來跑了.

類似 http://blog.teatime.com.tw/1/post/407 的作法吧. (不過我沒用 image 試過, 如果有空我再用 VM 試看看能不能動)

commons icon [20] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

試了一下, grub2 的 loopback 無法搭配 chainloader 使用, 所以你要的功能在 grub2 會做不到.
請改回使用 grub 0.9x 版就應該有與類似 grub4dos 相同的功能了.

commons icon [21] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

謝謝tommy板大的熱心幫助與回覆..我會在試看看的
剛接觸Linux不久所以很多地方不懂.見笑了
我目前是使用fedora13內建的GRUB應該就是您所謂grub2的版本吧..我會試著安裝grub 0.9x try 看看
當初用了3種方式都失敗
1.title QTPRunin-Test
root noverify (hd0,0)
kernel /dev/ram0
initrd /boot/QTPRunin.img
chainlooder +1
makeactive
2.title QTPRunin-Test
root=(hd0,0)
root=/dev/ram
initrd /boot/QTPRunin.img
boot=/dev/ram0
出現:Error13: lnvalid or unsupported executable format
3.title QTPRunin-Test
map --men(hd0,0)/QTPRuning(ram0)
map --hook
chainlooder (ram0)+1
rootnoverify(ram0)
我想我使用的語法(程式碼)應該有很多的錯誤..
還請批評指教.也謝謝您提供這個網站做linux的資訊交流..受益良多.謝謝

commons icon [22] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

你那個 image 放到是類似 linux 的 kernel 的程式嗎?
如果是的話, 直接執行不就好了?
如果不是的話 (dos/windows 之類的開機程式), 應該也不能用 kernel 去指定 (而是要用 chainload 的方式)

commons icon [23] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

是的.我是用(dos/windows之類的開機程式).原來是應該要用chainload的方式.而非kernel去指定..謝謝

commons icon [24] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

利用指令 grub-install -v確認版本為0.92
可是不管我怎麼試出現的結果都是
error 11:Unrecognized device string!!(T^T)
為何GRUB不能像pxelinux.cfg的default檔
一樣載入DOS的一些Image檔案呢?
我看指令跟GRUB很像ㄚ..
搞到快花轟了>~<
板大..我在股溝(Google)看看好了....

commons icon [25] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

有錯就表示你的指令是打錯的.
自己學著進到 grub 的 shell 裡頭去打指令吧. 確定打的指令可以用再寫到 menu.lst 去用吧.
如果你用的是 grub 就看 grub 的手冊, 不要用 grub4dos 的文件. http://www.gnu.org/software/grub/manual/legacy/grub.html

應該是類似這樣的做法去載入 image (路徑要自己試, 不一定在 / 上), 自己用 grub 的 shell 下指令去找.
grub> device (fd0) /floppy-image

如果覺得麻煩, 直接用 grub4dos 不就好了? 反正 grub4dos 也可以 load 一般的 linux kernel 來跑....

commons icon [26] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

感謝恩師

commons icon [27] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

你好:幾個問題想請教,拜託教一下,我想知道以下命令的用法及實際意義
fallback + NUM
find --set-root
map --mem
map --hook
chainloader
savedefault

查了很多英文,簡中頁面,還是看不懂,感恩

commons icon [28] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

您好,
我有一片Norton Ghost11光碟片,可以用來備份及還原.
想試著用USB來做這個功能,Ghost光碟片中只有4個檔,如下:
GhostSrv.exe
ghost32.exe
Ghost64.exe
Ghostexp.exe
我把4個檔copy到USB中,在BIOS中指定USB開機,但開機時一直都不能讀取到USB,看了您的文章,我想是否我少了一個menu.lst檔?
由於我不懂語法,可否指教,像我這樣的需求,應該怎麼寫menu.lst ?寫完後是否與其它4個檔一起放入USB中即可?

commons icon [29] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

光碟有自己的開機 image (通常是模擬軟碟機吧). 並不是用那四個檔案來開機....

自己用 ultraiso 之類的軟體看看那個光碟吧.

commons icon [30] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

版主您好 關於H170 progamin的主機版用gbrb可以安裝xp嗎

commons icon [31] Re:使用 Grub4Dos 來做隨身碟的開機管理 [ 回覆 ]

能不能裝 XP 跟 grub 沒什麼關係. 這東西只是把原本光碟的東西放到隨身碟來用.... 如果原本用光碟就不能裝, 並不會因為改用 grub 就變成能裝.

迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 244 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS