製作可開機USB隨身碟(完全必動法)

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
轉載對岸時空論壇
Grub4dos高級功能(部分

1. 虛擬磁盤
GRUB4DOS中的虛擬磁盤是由map命令實現的。map命令的功能介紹如下:
1.1 磁盤交換
map命令在GRUB Legacy中的也存在,它是用作磁盤交換。比如說,你有兩隻硬盤,但兩隻硬盤上均有可啟動的系統。在第一隻硬盤上啟動時,不需要特殊的處理,直接用chainloader裝載啟動扇區就可以了。不過,如果要從第二隻硬盤上啟動,那麼單單用chainloader是不夠的,這是因為很多操作系統都缺省地從第一隻硬盤上裝載啟動所需的文件,如果文件不在其上,系統便不能順利地讀取,從而導致啟動失敗。
一個原始的解決方法是在BIOS中修改啟動順序,把需要啟動的硬盤放到最前面。那麼,重啟計算機後該硬盤便會成為第一隻硬盤,從而可以正常啟動。
GRUB中的map命令便是為了解決這個問題而設計的,它可以在運行時交換磁盤,而無需修改BIOS。例如:
title Boot First Partition on Second Disk
map (hd0) (hd1) map (hd1) (hd0)
chainloader (hd1,0)+1 boot
在該例子中,使用了map命令實現了(hd0)和(hd1)的交換。要注意的是,交換是在命令boot後才生效的。因此在chainloader命令中,讀取的仍然是第二隻硬盤。
1.2 建立虛擬磁盤
在GRUB4DOS中,大大地擴展了map命令的用法。利用該命令可以建立虛擬磁盤,例子:把(hd0,0)根目錄下的aa.dsk文件映射為第二隻硬盤,並且使用原來硬盤上的系統啟動:
title Create Virtual Disk
map (hd0,0)/aa.dsk (hd1)
root (hd0,0) chainloader +1 boot
把(hd0,0)根目錄下的aa.dsk文件映射為第一隻硬盤,原來的第一隻映射為第二隻硬盤,並且從aa.dsk裡虛擬出來的磁盤中啟動:
title Boot From Virtual Disk
map (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1) map --hook
root (hd0,0) chainloader +1 boot
在上面提到,map命令的映射不是馬上起作用的。但是,要從虛擬磁盤中啟動,就必須從中讀取數據,因此需要使映射提前起效。在以上的例子中,map --hook的作用便是使前面map命令指定的映射立刻生效。
把(hd0,0)根目錄下的aa.img文件映射為第一隻虛擬軟盤,並從中啟動:
title Boot From Virtual Floppy
map (hd0,0)/aa.img (fd0)
map –hook root (fd0) chainloader +1 boot
使用這種方式進行映射後,虛擬磁盤的內容和影像文件的內容是同步的,也就是說,如果你修改了虛擬磁盤的內容,影像文件也同樣被更新。如果你重啟了機器,該修改的效果仍然存在。
在使用這種方式進行映射時,影像文件在磁盤上的存放必須是連續的。
GRUB4DOS中建立的虛擬磁盤,包括以下所說的內存盤,都是通過截取INT 13來實現的。因此在啟動了操作系統後,如果該系統是通過INT 13來訪問磁盤的,例如各類的DOS,那麼在進入系統後仍然可以訪問虛擬盤。如果系統是採用其它方式來訪問磁盤,例如Linux,各類Unix和Windows NT系列的操作系統,那麼在進入系統後便不能訪問虛擬盤。Windows 9X系列的操作系統比較特殊,它通常是使用保護模式的驅動來訪問磁盤,但當它找不到合適的驅動時,會依舊使用INT 13來訪問磁盤,因此,在Windows 9X下也可以訪問虛擬磁盤。
1.3 建立虛擬內存盤
用map也可以建立虛擬內存盤,其用法和以上的很相似,你只需要在map建立虛擬盤的命令中加上--mem參數就行了。例子:把(hd0,0)根目錄下的aa.dsk文件映射為第一隻硬盤,原來的第一隻映射為第二隻硬盤,並且從aa.dsk裡虛擬出來的磁盤中啟動:
title Boot From Virtual Disk
map --mem (hd0,0)/aa.dsk (hd0)
map (hd0) (hd1) map --hook
root (hd0,0) chainloader +1 boot
把(hd0,0)根目錄下的aa.img文件映射為第一隻虛擬軟盤,並從中啟動:
title Boot From Virtual Floppy
map --mem (hd0,0)/aa.img (fd0)
map –hook root (fd0) chainloader +1 boot
使用了該映射方式,影像文件的內容是裝載到內存後才進行映射。這意味著,你必須有足夠的內存來存放影像和啟動系統。而且,虛擬磁盤和影像文件是分離的,對虛擬磁盤所作的修改不會被更新到影像文件中。
在這種映射方式中,影像文件在磁盤上的存放不需要是連續的。
1.4 自動生成MBR
影像文件有兩種類型。一種是文件系統影像,它裡面只包含某一個文件系統的數據。另一種是磁盤影像,它裡面包含了類似於物理硬盤的結構,也就是,影像以MBR開始,然後才是文件系統的數據。對於虛擬內存盤,其結構是類似於真實硬盤的,因此在使用map命令進行映射時,應該使用磁盤影像。
GRUB4DOS考慮到了這個問題。為了讓用戶使用更加方便,GRUB4DOS作了如下的改進:當把磁盤影像讀入內存時,程序會檢測其結構,如果發現是文件系統影像,那麼在它前面自動生成MBR,把它變為磁盤影像。因此,無論用戶選擇使用文件系統影像還是磁盤影像,裝載到內存後都會變成正確的格式。
自動生成MBR還有一個應用,就是直接從硬盤上的裝載分區,從而生成虛擬磁盤。例如:
title Load Partition From Disk
map --mem (hd0,0)+1 (hd0)
map (hd0) (hd1) map --hook
root (hd0,0) chainloader +1 boot
該菜單的功能是把硬盤上第一個分區的內容裝載到內存,並且自動在其前面加上MBR而生成虛擬磁盤。然後,把該虛擬磁盤映射為第一隻硬盤,原來的硬盤映射為第二隻硬盤。最後,從虛擬磁盤中啟動。
在使用該菜單啟動後,系統分區的內容和好像和原來一樣,但這時實際是使用在內存裡的虛擬磁盤。對分區的修改在重啟機器後便會消失。
該菜單是把整個分區的內容裝載到內存,要確定內存足夠大,否則命令不會成功。
在map命令中,(hd0,0)+1是指整個(hd0,0)分區,而不是(hd0,0)的第一個扇區。這種表示只是在map命令中適用,在其它的地方,(hd0,0)+1還是原來的意義。
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
轉載對岸時空論壇

Grubinst使用介紹
1. 介紹
grubinst是一個用來將GRUB4DOS安裝到硬盤的MBR(或者分區的引導扇區)以及映像文件中的工具。
grubinst.exe是一個命令行方式的程序,它的功能基本上與不點的GRUB4DOS發行包中的bootlace.com(可以運行在純DOS或者Linux環境)相同,但是跟bootlace.com不同,grubinst完全是用C語言開發的,能夠在Windows NT/2K/XP、Linux和FreeBSD等操作系統下編譯並運行。
grubinst_gui.exe是grubinst.exe的圖形界面shell程序,對於那些不熟悉命令行操作的用戶來說,它提供了更友好的圖形操作界面,目前,grubinst_gui.exe只能運行在Windows操作系統(事實上是只能運行在NT/2K/XP環境)下。
另外請注意,當前版本的grubinst不支持在Windows 95/98/ME下修改硬盤的MBR,對於這些操作系統,請使用bootlace.com。

2. grubinst跟bootlace.com的區別
在bootlace.com裡,硬盤盤等設備只能用設備的BIOS識別號來表示,如0x80表示第一塊硬盤,0x81表示第二塊硬盤等等。而在grubinst中,硬盤則可以用特定的設備文件名來表示(跟grub的傳統類似),如(hd0), (hd1)...。軟驅暫時還不支持這種表示方式。
grubinst支持幾個新的選項,主要用於恢復原來的MBR。
--save-mbr=FILENAME
這個選項用於保存原來的MBR到文件中。
--restore-mbr=FILENAME
這個選項用來從前面保存的文件中恢復原來的MBR。
--restore-prevmbr
這個選項用來恢復保存在硬盤或者映像文件中第二個扇區的原來的MBR。
正常情況下,原來的MBR只有一個扇區,它被保存在新的GRLDR MBR中的第二個扇區中。你可以用--restore-prevmbr選項來恢復它。然而,如果原來的MBR的長度超過一個扇區,例如,你安裝了別的引導管理軟件,那麼GRLDR MBR就沒有足夠的空間保存原來的MBR。在這種情況下,你應該使用--save-mbr=FILENAME將原來的MBR保存到一個外部文件中,需要時再使用--restore-mbr=FILENAME選項從保存的文件中恢復它。
3 用法及示例
取自grubinst 1.1的--help。(by Climbing)
grubinst [選項] 設備或文件
選項:
--help,-h 顯示本幫助
--pause 退出前暫停
--version 顯示grubinst版本信息
--verbose,-v 輸出詳細信息
--list-part,-l 列出設備或者文件中的所有分區信息
--save=FN,-s=FN 保存原來的MBR/引導扇區到文件FN中。
--restore=FN,-r=FN 從前面備份的FN中恢復原來的MBR/引導扇區
--restore-prevmbr,-r 恢復保存在設備或者文件第二扇區中的原來的MBR
--read-only,-t 只是模擬操作,沒有真正的寫操作(測試模式)
--no-backup-mbr 不在第二扇區中備份原來的MBR。
--force-backup-mbr 強制備份原來的MBR到第二扇區(默認選項)
--mbr-enable-floppy 在軟驅上搜索grldr(默認選項)
--mbr-disable-floppy 禁止搜索軟驅上的grldr
--mbr-enable-osbr 當分區表非法時(通常是某操作系統的引導扇區),仍然啟動原來的MBR(默認選項)
--mbr-disable-osbr 當分區表非法時(通常是某操作系統的引導扇區),禁止啟動原來的MBR。
--duce (不明白,無法翻譯)disable the feature of unconditional entrance to the command-line.
--boot-prevmbr-first 在搜索GRLDR之前嘗試首先啟動原來的MBR
--boot-prevmbr-last 在啟動原來的MBR之前先搜索GRLDR(默認選項)
--preferred-drive=D 優先啟動磁盤編號, 0 <= D < 255.
--preferred-partition=P 優先啟動分區編號, 0 <= P < 255.
--time-out=T,-t=T 在啟動原來的MBR之前等待T秒,如果T是0xff,無限等待,默認等待5秒
--hot-key=K,-k=K 如果在啟動原來的MBR之前按下了指定鍵,則啟動GRUB。K的長度為一個字(word),也就是int16/AH=1中斷的AX寄存器值。高位字節是對應按鍵的掃瞄碼,低位字節是ASCII碼。默認按鍵是0x3920,也就是空格鍵。
--key-name=S 指定熱鍵的顯示名
--floppy,-f 如果安裝目標是軟驅,則指定這個選項。
--floppy=N 如果安裝目標是硬盤的某個分區,則指定這個選項。N用來指定分區編號:0,1,2和3對應主分區,4,5,6,...對應邏輯分區。
--sectors-per-track=S 對--floppy選項指定每磁道扇區數,1 <= S <= 63, 默認是63.
--heads=H 對--floppy選項指定磁頭數,1 <= H <= 256, 默認是255.
--start-sector=B 對--floppy=N選項指定隱藏扇區數。
--total-sectors=C 對--floppy選項指定總扇區數,默認是0。
--lba 對--floppy選項使用LBA方式。如果軟驅的BIOS支持LBA,你可以指定這個選項。按規定所有的軟驅BIOS都支持CHS方式,所以最好指定--chs選項。如果既沒指定--lba也沒指定--chs,則LBA指示字節(一般是啟動扇區第3字節)的值不會被改變。
--chs 對--floppy選項使用chs方式。如果你的軟驅BIOS不支持LBA方式,你應該指定--chs選項。我們假定所有的軟驅BIOS都支持CHS方式,所以推薦使用--chs選項。如果既沒指定--lba也沒指定--chs,則LBA指示字節(一般是啟動扇區第3字節)的值不會被改變。
--install-partition=I 安裝引導扇區到指定硬盤(或硬盤映像)的分區I。
-p=I
--boot-file=F,-b=F 改變默認啟動文件名(默認是grldr)。
--load-seg=S 改變啟動文件的默認內存加載段(默認是0x2000:0)。
--grub2,-2 裝載grub2的內核g2ldr而不是grldr。
--output,-o 輸出內置的grldr.mbr(受-b參數的影響)。
示例 1: 安裝GRLDR MBR到第一個硬盤 grubinst (hd0)
示例 2: 安裝GRLDR MBR 到磁盤映像文件 disk.dsk grubinst disk.dsk
示例 3: 恢復第一塊硬盤的單扇區MBR grubinst --restore-prevmbr (hd0)
示例 4: 安裝GRLDR MBR到第一塊硬盤並保存原來的MBR到MBR.sav文件中。
grubinst --save-mbr=MBR.sav (hd0)
示例 5: 從保存的MBR.sav中恢復原來的MBR。 grubinst --restore-mbr=MBR.sav (hd0)
示例 6: 在啟動時10秒內按下空格才加載GRUB
grubinst --boot-prevmbr-first --time-out=10 (hd0)
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
使用愉快!
部份dos好像無法用前述方法(7.1?)
MSDOS.SYS不須放入\之下
 
最後編輯:

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
giga的板子不能用GRUB4DOS(GA-945GCM-S2L)
必須用SYSLINUX
USB設定
i17709_2.jpg

harddisk boot順序設定
i17707_0.jpg

改成SYSLINUX才抓到裝置:
i17708_1.jpg
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
補充:
並非所有的USB port會動作
有時在前方,有時後面,甚至主機版接pin的usb才會動
新一點的主機板就好一點
請自己試驗,哪一port裝置會出現
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
使用愉快!
部份dos好像無法用前述方法(7.1?)
MSDOS.SYS不須放入\之下

測過的dos
ok! dos 7.1 代號是 7.10.1999(可放root下)
ok! Windows98 代號是 4.0.1998(可放root下)
ok! Windows 98 SE 代號是 4.10.2222(可放root下)
no! Windows ME 代號是 4.90.3000(須用磁片image)
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
;em03;我的USB家族:
;face0;
我的隨身碟 SanDisk 4G
讀卡機(CardReader Alcor 6371)有一陣子了,windows 7無法使用
SD 1G 與2G (相機可用)

i17804_IMGP0001.jpg
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
補充:
如果你的隨身碟要由 DOS (Windows 98 中的 DOS) 開機, 只要把 IO.SYS與 COMMAND.COM 複製到隨身碟的根目錄中, 然後在 menu.lst 中加上下面的設定:
title dos boot
chainloader /io.sys

這方法有很多限制,只適用Clear boot 用來更新BIOS最恰當
現今XP內所附的開機片是ME,所以用磁片image最好

my menu.lst

color black/cyan yellow/cyan
timeout 60
default 0

title MS-DOS (ME)
map --mem /myboot/dos2.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
boot

title DOS Clean boot for BIOS update(98SE)
rootnoverify (hd0,0)
chainloader /io.sys

title Paragon Partition Manager
map --mem /myboot/dos3.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
boot

title UNIVERSAL TCP/IP NETWORK+GHOST
map --mem /myboot/dos1.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
map --floppies=1
boot

title Windows 7 Install
find --set-root /bootmgr
chainloader /bootmgr
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
補充syslinux.cfg另一寫法:

default GRUB
prompt 1
timeout 5

label GRUB
kernel /grub.exe

善用這部份,就有非常多組合
 

yucharles

進階會員
已加入
9/9/08
訊息
402
互動分數
0
點數
0
例如
syslinux加入menu:

PROMPT 1
TIMEOUT 5
TOTALTIMEOUT 5
DEFAULT main
ONTIMEOUT GRUB

# GRUB
LABEL GRUB
kernel \grub.exe

# Main menu
LABEL main
KERNEL menu.c32
APPEND main.cfg

開啟main.cfg(menu.32)
5秒內為未反應--->GRUB
 
▌延伸閱讀