2011年12月17日 星期六

將 BartPE 安裝在 USB 碟

要將BartPE 安裝在 USB 磁碟中的原因有以下:

  • 製作自已專屬的 Windows PE ,中間有許多測試偵錯階段,總不能每試驗一次就燒錄一張光碟…那樣子勞民傷財的事dnowba做不來。
  • 就算到了發佈階段燒錄成了一張專屬的 Live CD ,在修復客戶的電腦時,我還是會希望有其他的救援機制,例如遇到了客戶電腦沒有光碟機的時候,如果也有一個LIVE UFD…那就萬無一失了。
  • 當然 dnowba 用 USB 製作 BartPE 的最終目標,是實現一個真正 LIVE 的系統,LIVE 不只是救援、本身還是一個可隨時添加/修改的「活」的系統。

隨著目前主機板對 USB 開機的支援度提高,以及 USB 磁碟價格愈來愈平易近人,既然勢不可擋…那就張開雙臂來好好的擁抱它吧…

如果要自製成 USB 式的開機系統,我們必須先了解 主機板和系統(Windows XP)間溝通的流程和方式,以下是Windows啟動簡單流程

了解Windows啟動簡單流程(一般硬碟式的開機)

  • 預引導階段(Pre-Boot):從按下電腦電源開始到XP啟動的這段時間稱之。
    • 首先運行Power On Self Test(POST),檢測系統內存及其他硬體設備。
    • 如果系統的BIOS(Basic Input / OutPut System;基礎輸入/輸出系統)是即插即用的,那就會先檢驗並完成配置。
    • 硬碟HD 中的MBR(Master Boot Record,主系統引導記錄)
    • 將系統控 制權交給引導記錄,加載並運行可開機(BOOTABLE)的資料
    • 找到設為 Active 分割區上的 Boot Loader (ntldr)加載Windows XP的NTLDR文件
  • 引導階段:Windows XP Professional引導階段包含4個小的階段
    • 經過初始引導加載器階段(Initial Boot Loader),NTLDR將電腦中微處理器從Real mode轉成32位元保護模式
    • NTLDR啟動內建的mini-file system drivers,使NTLDR可以識別每一個用NTFS或者FAT文件系統格式化的分區
    • NTLDR加載Windows XP 系統,如果是要啟動 Windows 就執行 ntdetect.com 蒐集相關資訊給 ntldr。
    • 操作系統選擇階段,如果電腦安裝了不止一個操作系統(多重系統),而且正確設置了boot.ini,NTLDR讀取他後就會顯示操作系統的選單供選擇。此後進入進入由 boot.ini 上所指定的 Windows 目錄載入系統核心(KERNEL)
  • 加載內核階段:NTLDR加載稱為Windows XP內核的ntokrnl.exe
    • 系統加載了Windows XP內核但是沒有將它初始化,所以接著NTLDR加載硬件抽象層(HAL,hal.dll)
    • 系統繼續加載HKEY_LOCAL_MACHINE\system key
    • NTLDR讀取select key 來決定哪一個Control Set (控制集)將被加載,控制集中包含設備的驅動程序以及需要加載的服務。
    • NTLDR加載HKEY_LOCAL_MACHINE\system\service\...下start鍵值為0的最底層設備驅動
    • 當作為Control Set的鏡像的Current Control Set被加載時,ntldr傳遞控制給內核,初始化內核階段就開始了。
  • 初始化內核階段:彩色的Windows XP的logo以及進度條顯示在屏幕中央
    • 內核使用在硬體檢測時收集到的數據來創建HKEY_LOCAL_MACHINE\HARDWARE key。
    • 內核通過引用HKEY_LOCAL_MACHINE\system\Current的默認值複製Control Set來創建了Clone Control Set。
    • 這些複製的Control Set是唯讀的,HKEY_LOCAL_MACHINE\system\CurrentControlSet\service\...下start鍵值被改為1,而實際進入內核的就是這些值為1的硬體驅動。
    • Session Manager啟動了Windows XP高級子系統以及服務,Session Manager啟動控制所有輸入、輸出設備以及訪問顯示器屏幕的Win32子系統以及Winlogon進程,初始化內核完畢。
  • 登陸 Winlogon.exe啟動Local Security Authority:
    • l歡迎屏幕或者登陸對話框
    • 服務按照start的值以及DependOnGroup和DepandOnService的值來加載
    • 系統還可能在後台繼續初始化剛才沒有完成的驅動程序

在上述過程中特別提到就是DNOWBA是以「一般硬碟式的開機」為介紹,大致上流程就像上面所講,其中差異最的、也是最關鍵的部分,就是硬碟/光碟/USB 被加載並運行可開機的文件,中間的介質是不同的;以下我再詳細說明硬碟/光碟作為可開機系統的不同。

硬碟/光碟作為可開機系統的不同

硬碟開機:

  • 讀取 MBR (即一般所謂 0 軌)並依 MBR 資料...讀取 啟動分割區 的 開機磁區(即 分割區 中最前面的磁區)
  • 從開機磁區中找到開機程序並加載,只要找到了開機區,裡頭放的TABLE紀錄資料就可以找到系統對應的文件。
    XP就是去讀取 NTLDR (NTLDR就是NT LOADER,Windows NT的引導程序。) 比較一下,DOS時代是去找IO.SYS、MSDOS.SYS…等;VISTA以後就是去找bootmgr ,NTLDR或是bootmgr都是系統根目錄的隱藏文件,WIN7更把bootmgr這個開機引導程式藏在100MB的開機磁區裡

光碟開機:(題外話,老是有人把BOOTABLE和AUTORUN搞混)

  • 載入光碟的開機區段,可以是引導檔(引導程式)
    光碟沒有MBR,所以這個引導檔的功能就像 硬碟中MBR磁區一樣,紀錄的是引導程式的位置,安裝光碟就是用引導檔的方式。
    (例如GRUB4DOS 的 grldr 和 EZB 的 loader.bin)
  • 加載開機程序:透過上面的引導檔,找到對應的開機文件
    以「XP 安裝光碟」來說就是 SETUPLDR.BIN;GRUB4DOS 開機選單就是 grub.exe;EZBOOT 是去載入 EZB 檔
    有趣的地方是,XP硬碟開機和安裝光碟所載入的開機程序是不同的…(想想看,安裝前後的硬體配置是不同的,那麼開機程序當然在安裝完後是可以簡化的,所以用二個不同的開機程序),NTLDR 和 SETUPLDR 這二個文件有高人反編譯過了,它們各自都含有二個執行檔。
    • NTLDR 就是STARTUP+OSLOADER.EXE
    • SETUPLDR.BIN 就是STARTUP+SETUPLDR.EXE
    • SETUPLDR.EXE、OSLOADER.EXE都是引導文件的一部分 ( 所以不能直作引導文件 )

USB 碟開機:

  • USB碟其實可以分成USB-Flash(隨身碟) 或 USB+HD (USB轉接硬碟)二部分,USB+HD 就是一般的硬碟,所以當然可以把硬碟弄出一個MBR來,比較沒問題。這邊說的USB開機就是USB-Flash(UFD)…
  • 載入UFD的開機區段,這裡可以有二種方式,一是採用如硬碟的方式,用硬碟格式化方式用出一個MBR來;不然就是採用如光碟的方式,作一個引導檔來。

了解了以上的不同以後,再談如何實作將 BartPE 安裝在 USB 碟或硬碟中

將BartPE 放在USB碟中:如果你是要放到USB+HD 裡的話,那麼用格式化的方式,生成一個MBR檔案最沒有問題,因為轉接硬碟本來就是硬碟的構造,只不過電源供應、資料輸出入的線在外面而已;但如果是UFD的話,那麼製作上就比較有難度了。大舉上方式有二:

  • 一是採用如硬碟的方式,用硬碟格式化方式用出一個MBR來:
    • UFD碟開機,還牽涉主機板相容問題,2GB以下用FAT16相容度當然高 (FAT16 > FAT32 > FAT 32(LBA) > NTFS)
    • 另外,HP有自製一個相容度號稱優於一般格式化的,HP USB Disk Storage format Tool (HPUSBFW ),DNOWBA 目前是使用這個,實戰經驗還不夠,無法告訴你是不是真的,言而總之,如果在製作可開機的 UFD ,這台可以那台又不行的話,肯定是出在格式化上 (主機認不得這個開機磁區)
  • 二是採用如光碟的方式,作一個引導檔來:
    • 就硬體演化來說,UFD 早於 USB+HD,因此,使用DOS引導碼來引導io.sys,待裝置USB驅動並啟動DOS後,再繼續引導類似GRUB等程式較為通用。
    • 這個引導程序,其實說穿了就是利用XP安裝光碟裡的SETUPLDR.BIN ,以前我不懂開機流程、XP安裝光碟和xp系統中的差異性時,我會質疑為什麼不用常聽到的NTLDR…現在我把相關的內容也向大家闡述了,這時候說這個引導文件是SETUPLDR.BIN應該不難理解了。

第一種方式詳解

如果要用第一種最「直接」的方式,讓USB裡的BartPE直接開機,要進行的步驟如下

  • 格式化你的UFD.
    UFD之開機引導不像 CD ROM有統一協定(El Torito),它和主機之BIOS、USB 控制器、電源介面(ACPI)及UFD本身之晶片組態都有關係,並需支援且相容,因此,要引導其開機並不容易。Windows都將UFD視為卸除式設備,不允許分割磁區。再則如何讓系統將卸除式磁碟UFD識別為基本磁碟也是問題…。格式化的工具有 HPUSBFW (下圖,點我下載)以及 usboot(下下圖,點我下載),使用方式很簡單,不贅述。
    image

    image
  • 把 BartPE 中的 i386 , Programs 兩個目錄,複製到 USB 硬碟的根目錄中
  • 將 i386 目錄重新命名為 minint ,此部份乃為了遷就 Windows 的 loader (setupldr.bin),這是比較特別的地方,Windows 安裝光碟上的 boot loader (setupldr.bin) 則只會讀取 \minint,這點和一般的 ntldr 不同
  • 把 \minint\setupldr.bin 複製到 USB 硬碟的根目錄,並重新命名為 ntldr。
  • 把 \minint\ntdetect.com 複製到 USB 硬碟的根目錄。
  • 將 BartPE 中的 bootfont.bin 複製到 USB 硬碟的根目錄。 這個檔案跟開機時能不能顯示中文字有關, 沒有並不會影響開機
  • 修改其它軟體的設定

目錄的樣子如下圖
image

好的…上面的步驟很煩人…官方有提供方法詳細請看官方文件
http://www.911cd.net/forums/index.php?showtopic=10806

不過我自已還是覺得官方的也很麻煩(要準備一個2003 SP1、然後又要從cmd裡下指令),所以再繼續找也有好心人士包成一包讓我們可以愉快使用…
這邊介紹我比較常用的:RMPrepUSBs 點我下載 

image

image

第二種方式詳解

上面我推薦使用的是第二種方式,用 PE BUILD 製作出來的 BartPE 若是生成光碟,那麼就是用引導檔案的方式,要轉化到UFD上相對輕鬆,不用再有磁碟分割MBR和格式化的動作。下面二張圖,左圖在製作好的BartPE 根目錄上,bootsect.bin 就是引導檔,而I386目錄中的SETUPLDR.BIN…就是引導程序。image image

我只要透過第三方軟體 GRUB4DOS ,就可以做一個「引導檔」找到「XP的引導程序」(其實就是把 BartPE 光碟內容轉成映像檔,然後用引導檔的方式來完成。)

 

(我要休息…怎麼文章愈寫愈長啊,有空再說)

7 則留言:

  1. 謝謝你... 很詳細哦 ...
    我要慢慢研究 !!!

    回覆刪除
    回覆
    1. 不過我發現有個程式 WinSetup, 可以好輕鬆幫你做BartPE Bootable USB drive.

      刪除
  2. 感謝 豬腦爸 的詳細解釋, 獲益良多 !
    另外, WinSetup 超好用, 可以將 XP 及 Win7 的安裝程式 和 BartPE 全都塞到一支 USB 手指中, 真的超好用 呵 !!!

    回覆刪除
    回覆
    1. 恩,謝謝你提供 WinSetup 的資訊,我查了一下,還真的如你所說,「看起來」還挺方便的…話說我的電腦快4年沒有重灌了= =…所以救援、備援這類的文章也很久沒去爬了…有機會的話我再試試 WinSetup 吧(希望是沒機會啦^^?)

      刪除
  3. 我發現你提供的 RMPrepUSBs 都蠻好用, 功能有點像 WinSetup.
    另外 usboot 又簡單小巧, 非常不錯, 以前我只懂用 HPUsbDisk.

    謝謝你的提供, 尤其你已提供 下載 Link, 只要輕輕一點就手到拿來,
    非常方便 ... 真的非常 謝謝你.

    回覆刪除

Related Posts Plugin for WordPress, Blogger...
// Dnow Function