為什麼要用VHD而不是直接用真硬碟呢?因為-方便,用VHD的話,只要硬碟空間夠,就可以放進10個20個系統而不必考慮分區的問題,每個系統只不過是一個VHD檔罷了。卸載也非常方便,直接把對應的VHD刪除,然後再刪除對應的bcd引導項就完事。製作另一個新的移動系統更是簡單,把VHD複製到另一個移動硬碟,然後重建引導,就一切OK。
對於不喜歡用VHD的同學,真實硬碟做法也是一樣的。 bcd引導項直接修改成引導移動硬碟/U盤的win7就可以了。
如果安裝到U盤的話,首先U盤要夠大!其次完成後要安裝支援win7的fbwf(一定要裝!否則U盤很快就掛,論壇裡有下載)
———————————————————————————————————————————————
首先要把WIN7安裝到VHD裡,然後用這個VHD啟動電腦並且執行WIN7。這一步很容易,我就略過了,論壇裡有相關貼文。
下面繼續,把這個裝了WIN7的VHD移植到移動硬碟,然後用移動硬碟啟動計算機,並且運行VHD中的WIN7。
製作好的行動版WIN7相容性很好!我用這個行動版WIN7啟動了兩台筆記本,聯想Y450和Dell的D630,完全沒有任何問題;還啟動了我的老台式機,01年的,P4 1.5G,512M內存,USB1.1,bios無usb啟動選項。唯一的麻煩是第一次啟動新電腦時,要重新安裝驅動程式。行動版win7的效能比本地的要略低,一是USB2.0的速度限制,二是VHD的讀寫驅動會稍微拖慢硬碟讀寫速度,但是不會低太多,這個貼的最後,我會發本地win7和行動win7的效能比較圖。
工具準備
- 聯想Y450本本,已安裝Windows 7旗艦版,用來給移動WIN7做引導並且修改win7.vhd的內容(不一定要win7,反正能給移動win7做引導和修改就行,比如WINPE3.0版)
- Win7.vhd,15G, 位於Y450 D:盤
- 移動硬碟,80G分為兩個分區,分區一是其它系統的系統分區,分區二是資料盤。
步驟
1. 啟動Y450進入Win7,開啟win7磁碟管理工具,附加vhd文件,把D:/win7.vhd附加到系統。成功後可以在電腦裡看到一個新分區,我給它分配的盤符是V:,所以V:盤裡就是已經預先安裝好的完整的win7系統檔案。
2. 因為USB驅動的關係,這個VHD上的win7從行動硬碟啟動時會藍屏報錯:007B!所以下面要修改VHD win7的USB驅動程式。
2.1 進入V:windowsinf 資料夾,找到如下文件,依序雙擊打開,找到對應的部分,修改內容如下(紅色字元為增加的內容,注意紅色的;號),然後儲存覆蓋原始檔案:
usb.inf
;[SignatureAttributes]
;usbccgp.sys=SignatureAttributes.DRM
;usbhub.sys=SignatureAttributes.DRM
[StandardHub.AddService]
DisplayName = %StandardHub.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%usbhub.sys
;LoadOrderGroup = Base
LoadOrderGroup = System Bus Extender
[CommonClassParent.AddService]
DisplayName = %GenericParent.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%usbccgp.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
——————————————————————————————————————
usbport.inf
[ControlFlags]
;BasicDriverOk = *
;ExcludeFromSelect = *
;[SignatureAttributes]
;usbehci.sys=SignatureAttributes.DRM
;usbhub.sys=SignatureAttributes.DRM
;usbohci.sys=SignatureAttributes.DRM
;usbport.sys=SignatureAttributes.DRM
;usbuhci.sys=SignatureAttributes.DRM
;[SignatureAttributes.DRM]
;DRMLevel=1300
[EHCI.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBControllerPropPageProvider"
HKR,,Controller,1,01
;HKLM,SystemCurrentControlSetServicesusbehci,BootFlags,0x00010003,4
[EHCI.AddService]
DisplayName = %EHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%usbehci.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
[OHCI.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBControllerPropPageProvider"
HKR,,Controller,1,01
;HKLM,SystemCurrentControlSetServicesusbohci,BootFlags,0x00010003,4
[OHCI.AddService]
DisplayName = %OHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%usbohci.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
[UHCI.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBControllerPropPageProvider"
HKR,,Controller,1,01
;HKLM,SystemCurrentControlSetServicesusbuhci,BootFlags,0x00010003,4
[UHCI.AddService]
DisplayName = %UHCIMP.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%usbuhci.sys
;LoadOrderGroup = Base
LoadOrderGroup = Boot Bus Extender
[ROOTHUB.AddReg.NT]
HKR,,EnumPropPages32,,"usbui.dll,USBHubPropPageProvider"
;HKLM,SystemCurrentControlSetServicesusbhub,BootFlags,0x00010003,4
[ROOTHUB.AddService]
DisplayName = %ROOTHUB.SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
;StartType = 3 ; SERVICE_DEMAND_START
StartType = 0 ; SERVICE_BOOT_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%usbhub.sys
;LoadOrderGroup = Base
LoadOrderGroup = System Bus Extender
————————————————————————————————————
usbstor.inf
[USBSTOR.AddService]
DisplayName = %USBSTOR.SvcDesc%
ServiceType = 1
;StartType = 3
StartType = 0
ErrorControl = 1
ServiceBinary = %12%USBSTOR.SYS
LoadOrderGroup = System Bus Extender
2.2 進入v:WindowsSystem32DriverStoreFileRepository,
找到名為usb.inf_…的資料夾,然後把剛才改好的usb.inf檔案複製到這裡覆蓋原始檔案;
然後繼續找名為usbport.inf_…的資料夾,用改好的usbport.inf檔案覆寫此處的原始檔案;
繼續找名為usbstor.inf_…的資料夾,用改好的usbstor.inf覆蓋此處的原始檔案。
(注意:這個位置的資料夾和檔案所有權屬於TrustedInstaller,直接改是不行的,首先要修改所有權為登入用戶,並且賦予完全權限,才可以修改。修改步驟請自己網路搜尋。)
2.3 文件改好了,接下來要改註冊表V:windows 的註冊表。修改註冊表有很多方法,我下面用的是最簡單的一種
2.3.1 打開寫字板,把如下程式碼複製到寫字板中,儲存為usb1.reg(注意不是usb1.reg.txt!)
REGEDIT4
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesUsbBootWatcherService]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000000
"ImagePath"=hex(2):25,53,79,73,74,65,6d,52,6f,6f,74,25,5c,73,79,73,74,65,6d,33,
32,5c,55,73,62,42,6f,6f,74,57,61,74,63,68,65,72,2e,65,78,65,00
"DisplayName"="Usb Boot Watcher Service"
"ObjectName"="LocalSystem"
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSafeBootMinimalUsbBootWatcherService]
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSafeBootNetworkUsbBootWatcherService]
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicespciide]
"Start"=dword:00000000
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesintelide]
"Start"=dword:00000000
2.3.2 打開寫字板,把如下程式碼複製到寫字板中,儲存為usb2.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesusbccgp]
"Group"="Boot Bus Extender"
"Start"=dword:00000000[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesusbehci]
"Group"="Boot Bus Extender"
"Start"=dword:00000000[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesusbhub]
"Group"="Boot Bus Extender"
"Start"=dword:00000000[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesusbohci]
"Group"="Boot Bus Extender"
"Start"=dword:00000000[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesUSBSTOR]
"Start"=dword:00000000
"Group"="Boot Bus Extender"[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesusbuhci]
"Group"="Boot Bus Extender"
"Start"=dword:00000000
2.4 關機重開機進入V:碟的Win7,即本地的VHD Win7。找到2.3中創建的usb1.reg和usb2.reg文件,分別雙擊運行,文件中的內容即被寫入VHD Win7的註冊表。
2.5 重啟,進入本機Windows7。
3 在步驟2中,USB驅動程式已經改好了,現在win7.vhd中的系統已經可以在行動硬碟中運作了。插上移動硬碟,把D:win7.vhd檔複製到G: (移動硬碟資料盤,事先準備好大於15G的空閒空間)
4 不要急著用行動硬碟啟動計算機,因為-引導還沒建立!下面我們來手動給G:win7.vhd建立開機。
4.1 把本機Windows7的系統碟中boot資料夾與bootmgr檔完整複製到行動硬碟F:(這相當於行動硬碟的C碟)根目錄下
4.2 進入c:windowssystem32 資料夾,把如下三個檔案複製到F:boot 資料夾下:
bootsect.exe —— 用來給行動硬碟MBR寫開機訊息
bcdedit.exe —— 用來建立、修改bcd引導項
bcdboot.exe —— 用來複製bcd引導項
4.3 運行cmd進入命令列,依序運行如下命令:
bcdboot c:windows /sf: —— 把本機Windows7的引導項目複製到F:磁碟(即移動硬碟)
bootsect /nt60 f: /mbr —— 這個指令將把nt60版的引導訊息寫入行動硬碟的mbr!因此一定要小心別搞錯了盤符!
bcdedit /store f:bootbcd /copy {default} /d "Windows 7 VHD USB"
回車後回傳此格式的GUID, {********-****-****-****-************},後續命令中我用{GUID}代替
bcdedit /store f:bootbcd /set {GUID} device vhd=[g:]win7.vhd
bcdedit /store f:bootbcd /set {GUID} osdevice vhd=[g:]win7.vhd
bcdedit /store f:bootbcd /set {GUID} detecthal on —— 開啟detecthal參數,對行動win7的相容性非常重要,作用是啟動時強制偵測hal(即俗稱的電源管理模式,做過系統封裝的都知道這東西的重要性)。 xp就沒有這個功能…
bcdedit /store f:bootbcd /displayorder {GUID} /addlast
bcdedit /store f:bootbcd /timeout 5
這改那,終於都改好了。 OK,現在一切就緒。
5 關機,用行動硬碟啟動Y450吧…
6 也可以用它來啟動Dell D630,嘿嘿…第一次啟動時Windows7會自動安裝驅動程式。
7 還可以用它來啟動01年的老爺機,P4 1.5G,512M內存,USB1.1,bios無usb啟動選項,我插上移動硬碟後,從硬碟項目可以看到移動硬碟,從它啟動後順利進入WIN7 USB VHD系統!當然因為USB1.1的關係,啟動時間5分鐘……運轉速度嘛,能感覺到明顯的停滯感……沒辦法,這老爺機出廠的時候USB2.0還不成氣候呢。還有網路卡,音效卡,顯示卡驅動全都不能辨識……太老啦!
8 也可以用它來啟動明年的主流機,USB3.0+SSD固態硬碟,豈不是比本地硬碟還快? !流口水YY中…
注意:關於Windows 7版本的選擇,第一,一定要旗艦版,因為只有旗艦版才支援VHD!第二,要考慮啟動Windows 7的問題,因為當你在其它機器上啟動這個系統,因為硬體改了,Windows會要求你重新啟動…如果你的是特定的OEM版,很可能啟動不了另一台計算機。