如何用VMware在U盤上安裝Windows和Linux系統的

前言

長久以來,我想做成一件事兒,就是在U盤或移動硬盤上安裝Window和linux,這樣我就可以到任何一台電腦上使用我的開發平臺了。這件事兒,終於在上週完全的實驗成功了。

基本原理

將硬盤分成3個部分,第一部分為FAT32格式的DOS盤,第二部分為Linux分區,最後為Windows分區。

我們將DOS盤作為啟動盤,啟動grub程式,加載menu.lst。grub來進行引導。

原理图

開始準備

硬體:

  1. 移動硬盤(推薦)、U盤
  2. 普通PC

軟體:

  1. 虛擬機VMware Player
  2. DiskGenius(使用U盤的話)
  3. grub4dos
  4. bootice
  5. ghost

其他文件

  1. Linux鏡像(如:CentOS 7.0
  2. Windows鏡像(如:Windows 7)
  3. DOS系統(如:DOS 7.1

安裝DOS系統

網絡上有很多安裝DOS系統的工具,不過很多都是把整個硬盤變成DOS盤(或許是我找得不夠仔細),而我們需要的是將硬盤分出一部分空間安裝DOS系統。我使用的方法是比較特殊的,使用虛擬機進行DOS系統的安裝。

首先,備份好U盤或移動硬盤的所有數據!然後刪除所有分區,將硬盤分出大約100MB的空間格式化為FAT32的格式(不必太多,我的加上TC才14M)。移動硬盤只要用Windows的磁盤管理就行了,U盤就需要DiskGenius來分區了(請不要分配驅動號)。

DOS分区

然後,啟動虛擬機,創建一個windows7虛擬系統。把移動硬盤添加到虛擬機裏面:

1.選擇“Edit virtual machine setting”,添加一個硬盤:

edit setting

add hardware

hard disk

然後選擇“use a physical disk”,Device選擇你的移動硬盤,通常是最後一個(如果你只接入一個移動硬盤的話)。

add physical disk

choose Device

剩下的默認就好了。然後就可以在硬體列表中看到添加的磁盤,容量看對一下,應該就沒錯了。

compare

然後,選擇“Floppy”,選擇下載的DOS img。記得勾上“connect at Power on”。接著把創建虛擬機時創建的虛擬硬盤移除。

floppy setting

然後啟動虛擬機,就會進入DOS系統的安裝,如果提示要插入第二塊軟驅,就“Disconnect”掉Floppy,然後進入“Setting”選擇“DOS71_2.img”,再Connect上繼續就好了。其他沒啥可說的。

dos second disk

按裝完後,如果不做任何修改,這樣的DOS盤也就只能在虛擬機裏面啟動而已了。在實際的電腦上啟動就會報錯,原因我還沒找到,不過可以做一些修改解決這個問題:

  1. 先關閉虛擬機,這樣你才能對硬盤的數據做修改;
  2. 去“文件夾和搜索選項”那裡把顯示系統文件和隱藏文件給打開;
  3. 進入DOS盤,刪除裏面的config.sys(到這裡DOS盤就可以在PC上正常啟動了)
  4. 新建ghost和grub文件夾;
  5. 將grub4dos裏面的menu.lst和chinese文件夾裏的所有文件解壓到DOS盤裏的grub文件夾。
  6. 將ghost解壓到ghost文件夾
  7. 編輯autoexec.bat,在第二行前面插入一行,加上 PATH=C:\;C:\DOS71\;C:\ghost\;C:\grub\ 最後保存。

至此,DOS系統就安裝完畢了。

安裝 Linux

在這一步,我們使用CentOS 7做為示例。

基本上都是Next…Next的事情,就不贅言了。說說特殊的地方。

  1. 不要安裝引導,選擇自定義分區
  2. 選擇標準分區
  3. 記錄下根路徑的分区(如:sda5)

如下圖:

no-install-grub

std part

sda5

安裝完成後,當然是進不去Linux系統的~~所以,我們就要——

引導Linux

這個時候啟動應該是進入DOS系統,

dos_begin

啟動DOS後:

cd grub
grub.exe

這樣就可以啟動grub了(啟動grub後,切記不要移動鼠標,不然就會死機),啟動後畫面如下:

grub view

選擇commandline,現在我們需要去加載Linux的內核,內核是位於boot目錄下,從我們剛才安裝的畫面可以看出,boot分區是另外獨立一塊空間。

先用cat指令查看硬盤分區(cat後面有空格):

cat (hd0,

然後按下Tab鍵,可以看到有3個xfs分區,第一個通常就是boot分區。

grub_01

cat (hd0,1)/

同樣按下Tab鍵,就可以看到這個分區下的文件,其中vmlinuz-3.10.0-123.el7.x86_64就是Linux的內核,不同版本的Linux應該會有所不同。這就說明了這個就是boot分區

grub_02

在用同樣的方法查看其他分區,找到分區下包含dev文件夾的目錄。

grub_03

然後將其設置為根目录

root (hd0,4)

然後用kernel命令加載Linux內核

kernel (hd0,1)/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/sda5

按Tab可以補全文件名,上面指令中的sda5,就是最早我們在安裝時記錄根目錄的設備名。

接著設置initrd文件:

initrd (hd0,1)/initramfs-3.10.0-123.el7.x86_64.img

然後就可以引導了。

boot

至此,你就成功引導了linux系統~

grub_04

可是!難道每次我們進入系統都有打這麼一長串嗎?當然不是。我們現將liunx關機,然後將grub裏面的menu.lst文件拷貝到DOS盤的根目錄,然後在文件最後面加入:

title CentOS
root (hd0,4)
kernel (hd0,1)/vmlinuz-3.10.0-123.e17.x86_64 ro root=/dev/sda5
initrd (hd0,1)/initramfs-3.10.0-123.el7.x86_64.img
boot

然後在autoexec.bat最後一行加上

call \grub\grub.exe

在啟動DOS時,就可以看到CentOS選項了。以後只要通過這個選項就可以啟動CentOS了。

安裝Windows

安裝Windows最糟糕的地方就是,他居然死都要裝引導,所以如果採用和上面linux的方法,就會把DOS的引導給覆蓋掉。所以……我們依然是藉助虛擬機的幫助,快速將Windows安裝到移動硬盤上。

還記得我們最開始時移除的那個虛擬機自動創建的虛擬硬盤嗎?這個虛擬系統叫Window7可不是沒有道理的~嘿嘿嘿~

現在我們要把他重新添加回來,和添加移動硬盤略有不同,選擇“Use an existing virtual disk”,然後選那個磁盤文件就可以了。

win7_back

然後在CD/DVD選擇一個Windows7的鏡像就可以了。在那個虛擬系統裏面安裝一個Win7系統即可。

注意:如果啟動時仍然從dos啟動,就把移動硬盤移除後再啟動,另外分區時要預留大約10幾G的空間。

安裝完成後,進入系統,將預留的空間格式化,創建一個盤出來。

為了把在虛擬機安裝好的Windows7轉移到移動硬盤上,我們就需要用Ghost,把Windows7 Ghost下來,然後在移動硬盤上還原。但是,當前Windows7是運行中的,所以必須進入到DOS下再對Windows7進行Ghost,那麼我們可以在啟動虛擬機時,按下F2鍵,進入BIOS設定,在boot設定DOS盤先啟動:

bios setting

進入dos後,運行Ghost文件夾裏的ghost11.exe

cd ghost
ghost11.exe

進入ghost,選擇local>Partition>To Image

ghost01.jpg

再選擇對應硬盤,與磁盤,再選擇保存在剛才新建的盤即可。

ghost06

注意要把系統保留分區一併Ghost

ghost07

ghost08

待Ghost完畢,在進入Windows,在移動硬盤新建一個分區原來存放Windows,啟動DOS盤中的Ghost32將Windows恢復到移動磁盤的分區中。

local>Partition>From Image

選擇恢復時,無需恢復系統保留區的文件,只要選擇系統分區即可:

ghost03

但是!這樣恢復後,實際上Windows是沒有任何引導的。

所以,我們需要把系統保留區裏的啟動文件提取出來,使用Ghost裏面的Ghostexp.exe打開備份的Ghost文件。將引導文件提取出來,拷貝到恢復的Windows磁盤裏。

ghost09

然後,我們還需要修改一下裏面的BCD文件,BCD文件記錄的是與Windows啟動相關的信息(當然不會是文本的)。我們要使用bootice來修改:

選擇BCD編輯,選擇其他BCD文件,瀏覽剛剛恢復的Windows盤,選擇其中Boot的BCD文件:

BCD Edit

編輯“啟動磁盤”和“啟動分區”,選中BCD文件所在分區。保存即可。

Setting boot disk

至此,我們的Windows就安裝好了~那麼,接下來就是——

引導Windows

bootmgr是引導Windows的入口,那麼啟動根目錄就要設置為bootmgr所在的分區,可以直接使用

root (hd0,6)

設置根目錄,但其實下面這樣會更合理

find --set-root /bootmgr

找到bootmgr然後把其所在分區設置為根目錄。

然後,將bootmgr裝載進來:

chainloader /bootmgr

然後就可以啦~

那麼在menu.lst裏就是添加:

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

至此,DOS+Linux+Windows移動系統硬盤就搭建完畢啦~*:‧\( ̄▽ ̄)/‧:* 最後,附上我的menu.lst文件

# This is a sample menu.lst file. You should make some changes to it.  
# The old install method of booting via the stage-files has been removed.  
# Please install GRLDR boot strap code to MBR with the bootlace.com  
# utility under DOS/Win9x or Linux.  

color black/cyan yellow/cyan
timeout 15
default /default

title CentOS 7
root (hd0,4)
kernel (hd0,1)/vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/sda5
initrd (hd0,1)/initramfs-3.10.0-123.el7.x86_64.img
boot

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

title DOS 7.1
savedefault --wait=2
quit

title Command Line
savedefault --wait=2
commandline

title Reboot
savedefault --wait=2
reboot

title Halt
savedefault --wait=2
halt