轉載對岸時空論壇
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還是原來的意義。
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還是原來的意義。