以S R S為例,談一下封裝及封裝工具

2021-09-12 20:34:47 字數 2843 閱讀 6143

乙個不經處理的windows系統直接恢復到另一台機器上,最有可能出現的情況就是藍屏,或者反覆重新啟動那麼,造成藍屏重啟等的原因是什麼呢?事實上,這就是通用轉殖系統所要解決的最基本的技術問題

我們這裡以封裝xp系統為例,2003及2k的方法都是大同小異的

首先我們來了解一下封裝的步驟:

一.安裝作業系統

裝系統打補丁,至於整合驅動及軟體優化或美化等由需要而定

dllcache備份的步驟可選,這裡就不單獨列為一項了dllcache備份的原理不是備份檔案,而是備份檔案名,在系統恢復後從i386的cab包中提取相應檔案deepin xp lite是沒有這些檔案的,300多兆的dllcache並不是必需的

二.刪除更改系統硬體驅動

1.更改hal電源模式的方法其實有很幾種,目前主流的就是使用longhorn的ntldr自動判斷longhorn的ntldr有乙個新引數,即/detecthal(在boot.ini的啟動項中設定),通過這個引數,可以實現自動判斷並選擇計算機型別,而且這種技術由於源出於微軟,所以其結果是百分百準確的基本上,使用longhorn技術來判斷正確的hal就是目前最完美的解決辦法死改不改的s&r&s 9.x版本基本上都使用這種方式

2.更改儲存控制器型別

硬碟控制器包括pata(傳統的硬碟控制器)sataraidscsi等,實際上,死性不改的s&r&s就是sata&raid&scsi的意思在通用轉殖發展的早期,sata硬碟還不是很流行,這個問題還不是很嚴重,因為所有的pata(ide)控制器都相容於標準雙通道ide控制器,所以人們製做轉殖時只需要將源機器的ide控制器修改為標準雙通道即可但很顯然,sata並不相容於標準雙通道,所以當時製做的轉殖系統在sata硬碟上恢復後重啟時會出現藍屏

3.刪除其他硬體驅動

三.封裝

依照作者選用的封裝方式,封裝的步驟也就不盡相同如果選用srs的話,這裡就可以直接封裝了,它會呼叫sysprep完成封裝過程手工替換ntldr的就需要自己細心一點,替換檔案刪除相關登錄檔等

注:s&r&s9.7整合了更改電源及ide模式的功能,所以第二步裡面的1和2也可不做

下面我們研究一下封裝工具都做了些什麼:

一.電源檢測

s&r&s9.x採用了基於mcc硬體抽象層電源識別技術,即替換longhorn版本的ntldr,依靠/detecthal來完成對電源模式的檢測早期是需要使用者手工選擇的,這裡就不說了

二.更改ide模式

通過mshdc.inf檔案來更新ide模式為雙通道

runwait("devcon update "&@windowsdir&"\inf\mshdc.inf e_isa_up","",@sw_hide)

三.驅動整合

很顯然,以我們個人的能力是不可能蒐集到所有的massstorage裝置的驅動的,同時儲存技術在不斷發展,新硬體也層出不窮,這是通用轉殖不可能實現萬能的原因之一

s&r&s9.x採用了dps驅動包,所以大家在n多使用不改的封裝工具的ghost作品裡都可以看到含大多數驅動,支援sata支援64位這話是怎麼來的呢?

this one supports almost all (none are reported missing) massstorage controllers (pata, sata, scsi, raid and al their combinations).

除了儲存裝置的驅動,新型的cpu以及usb鍵盤滑鼠等裝置驅動也要整合到系統裡,例如amd k8 cpu等不過,這些驅動之間有可能存在不相容問題,驅動的不相容會導致同時載入時直接宕機,例如intelide與viaide的不相容問題,這是導致轉殖不能萬能的原因之二,也是最主要的同時也很難解決的問題

至於更改及恢復啟動選單呼叫sysprep進行靜默封裝等非技術步驟,這裡不做討論

了解了封裝工具的工作原理以後,我們會想:

封裝工具是必需的嗎? 答案是:不!

在預封裝問題上,為了讓系統能正確識別massstorage裝置,目前可以採取整合驅動到system32\driver或使用txtsetup引導(深度的v2及**桃的pe都是這樣做的)的辦法

通過手工替換相關檔案,可以做到完美的電源檢測,在深度白金3in1中已經做到了100%準確雖然srs採用的也這個技術,但是在實際應用中,效果仍不是絕對滿意的,出現了部分使用者無法正常關機的情況,也就是電源檢測上出了問題

儘管我們可以通過手工替換ntldr及hal修改登錄檔更改電源及ide模式,最後執行sysprep進行封裝,但是在一些驅動問題上,我還沒有做到面面俱到,在3in1中就已經體現了對一些sata等裝置的識別問題

windows nt不再依賴於bios提供的方式訪問硬碟,而是通過底層的驅動程式,如果沒有載入對應的驅動程式,那麼windows就會找不到硬碟,找不到硬碟當然就不可能將windows啟動起來而dos則是通過bios來訪問硬碟的,所以這也是為什麼dos能夠訪問sataraidscsi硬碟而windows卻不能訪問的主要原因目前,死性不改正在探索在dos下執行的s&r&s軟體,目的就是解決這個問題,其實現原理就是根據目標機器的硬體情況在dos下只載入適合目標機器的對應的驅動,這樣就可以有效避免驅動程式的不相容問題

實際上我們深度已經有了自己的封裝工具,但是我們必須看到這條路的發展方向,我個人認為,封裝工具不是必需的,而輔助工具卻是急需的

修正一下:

二.更改ide模式

通過hal.inf檔案來更新ide模式為雙通道

runwait("devcon update "&@windowsdir&"\inf\hal.inf e_isa_up","",@sw_hide)

更改ide裝置為標準雙通道裝置涉及到很多方面

主要和windows\inf\mshdc.inf有關,不是乙個批處理就能改的

並且上面的**只是把計算機更改為標準pc而已

----------------------------

一鍵轉貼,快速捕捉生活精彩,贏每週好禮!檢視活動首頁》

談一下稀疏陣列

對於乙個初窺資料結構的人來說,稀疏陣列確實可以很好的幫助你鍛鍊思維。但自從第三次科技革命後,人們都一直在做著用空間去換取時間的損事,而以時間換空間的稀疏陣列,倒也跟北大考古專業有些心心相惜。當乙個陣列中大部分元素為0,或者為同乙個值時,可以使用稀疏陣列來儲存該陣列 小規模陣列便是稀疏陣列 像在編寫的...

以簡單的例子談一下C 中的COPY

周五晚上加班的時候做一堆combobox直接的聯動,然後呢,這些cbo的datasource都是同乙個datatable,當時寫 的時候求快也就沒有太注意datatable的繫結,然後就出了一些小問題。出問題前的 var dt new datatable dt.columns.add dt.rows...

小記一下以非string為結束條件的迴圈

經常遇到這種情況 string str while cin str 也就是一直等待輸入 直到遇到乙個非string型別的 但何為非string型別 字母?數字?還是標點符號 nono 都不行 在windows下 輸入ctrl z 然後再按回車就行了 因為ctrl z輸入了 z 等於eof 0 自然就...