Boot in RAM:直接從記憶體開機

因為虛擬機器有不少限制,即使是載入RAM Disk執行也不太爽快。如果我們能夠開機時就把系統碟載入記憶體、然後用它來進入作業系統,不就可以脫離這些限制了嗎?沒錯!除了無法隨時掛載或卸除外,跟一般從硬碟開機原生執行的作業系統沒兩樣,也是最名副其實的RAM OS。

記憶體請先備足

乾淨的Windows XP SP3安裝完成後約佔2GB硬碟空間,Windows Vista/7/8則是約8GB,再加上一些緩衝空間就是要放進記憶體裡的系統碟大小。至於是多大就見仁見智了,總之記憶體的容量愈小、要做的設定就愈多,建議有能力就單條直上8GB、並且把插槽擠滿最無後顧之憂。

那麼,至少要多大呢?除了作業系統本身外,總得留一些給其它應用程式及置換檔存放的空間。而且RAM OS本身執行時也需要記憶體,假設電腦的總記憶體容量是16GB,理想的作法是將RAM Disk劃成12GB,留4GB當作純記憶體用。

若要節省空間可以嘗試處理WinSxS資料夾,或許還能減上3、4GB的體積。更極端的作法是使用Junction或Soft Link把一些資料夾指向到實體硬碟上(比如Program Files),不過這麼做就失去了設置RAM OS的原始意義了。

WinSxS

在Windows Vista(含)之後的Windows目錄底下,有個名為「WinSxS」的資料夾,它是目錄中體積最大的資料夾。因為這個資料夾裡的檔案都是非常重要的、維持系統正常運作的必要元件,所以不能夠直接刪除它。

不少教學可能會這麼寫:執行磁碟清理命令,就能夠縮減該目錄的體積,尤其是在剛升級完大型系統套件之後,比如Service Pack之類,或是系統從安裝後已經有好一段時間未清理,這個目錄也會愈變愈大。

這種說法是正確的,但對於剛安裝好的系統來說,幾乎無用,因為WinSxS裡可供清理的檔案多是一些用來回復系統的參考檔,像是安裝SP1之後反悔時,這些參考檔便能順利讓系統移除SP1。

如果本來的作業系統是Windows 7,再加裝SP1,那麼這個方法可能有效;反之,使用已經整合了SP1的Windows 7光碟來安裝的系統是無法有好處的。

很奇怪吧!以上敘述有邏輯上的瑕疵。Windows 7加裝SP1後可以藉由瘦身來縮減系統目錄體積,為何Windows 7 SP1就不行?兩者還不是一樣的系統嗎?哪有Windows 7裝了SP1後、體積還比Windows 7 SP1小的道理?

原來,WinSxS目錄底下的檔案,有大部分都是「Hard Link」,也就是實際上不佔空間的硬連結。雖然實際上不佔空間,但檔案總管還是會計算它們的體積,所以最準的容量估算方式是看硬碟的剩餘容量、而不是Windows目錄的佔用容量。

把整個作業系統放進記憶體裡,RAM OS 讓讀寫效能快10倍

載入器與驅動是關鍵

要怎麼在進入作業系統前就創建出RAM Disk、把系統碟放進去、以及讓作業系統存取是RAM OS的設定關鍵。其實Windows的開機載入器(Bootloader,不過這裡的角色更類似Boot Manager)本身就帶有RAM Disk的掛載功能,加上Windows內建RAM Disk驅動程式,只要在開機組態裡加上幾行指令就能用來執行WinPE之類的迷你作業系統。

然而,Windows內建的RAM Disk有1.5GB容量限制,對完整的作業系統來說跟本不夠用。雖然網路上可以找到破解版的核心元件來突破此屏障,不過在使用時仍有不少但書,對於RAM OS的開機管理機能也太過陽春。

因此,請先忘記Windows原生的解決方案。我們來看一下RAM OS的核心元件是如何分工的,同時也了解RAM OS是如何開機並執行:

開機載入器

開機時,它要負責創建RAM Disk,並且將系統碟的映象檔放進去,簡單的說就是把映象檔掛載到記憶體裡。然後再去啟動RAM Disk裡的作業系統,或是把啟動權交由RAM Disk裡的作業系統內建的載入器處理。

RAM Disk驅動

開機流程交給作業系統後,作業系統也要認得RAM Disk、並銜接完成開機任務啊。所以這裡的RAM Disk驅動是指Boot-class等級的元件,跟一般在桌面上執行的RAM Disk軟體是兩回事。

VHD映象檔

要載入的系統碟最好包裝成VHD,理由跟虛擬機器相同,因為它是受支援程度最廣泛的系統映象檔,不管是要存取它或引導它開機都很容易。

GRUB4DOS引導開機

開機管理程式有很多種,重點是要支援「把VHD映象檔載入至記憶體」,GRUB4DOS是最好的選擇。因為它原生就可以掛載VHD映象檔,安裝上也最為簡易。

GRUB4DOS有不少分支版本,建議使用「Chenall」,它更新最為頻繁、而且有針對RAM OS最佳化。至於最原始的正宗版本已經停止釋出更新很久了,記憶體管理機能落後,對於RAM OS應用來說當然不友善。

如果讀者習慣使用其它的載入器,也能試試,不過考量到載入器所建立的RAM Disk還要能跟作業系統的RAM Disk驅動相對應,使用GRUB4DOS還是比較穩當。

虛擬機的系統碟存取架構

開機時,GRUB4DOS將映象檔載入記憶體形成RAM Disk,然後將流程交給映象檔裡的作業系統。作業系統在低階的初始化時就要載入Firadisk來註冊這塊RAM Disk,不然在接手管理記憶體時RAM Disk會流失。

圖中的括弧是在開機流程中,每個步驟所需管理或耗用的記憶體總量。Firadisk所使用的這塊記憶體到最後當然還是由Windows所管理,在必要時仍有可能置換它。

把整個作業系統放進記憶體裡,RAM OS 讓讀寫效能快10倍

Firadisk銜接虛擬硬碟

GRUB4DOS把開機流程交給RAM Disk裡的Windows之後,Windows會接手記憶體的管理,所以在載入底層系統元件時就先啟用驅動來銜接GRUB4DOS建立的RAM Disk。不然的話,在進入更頂層的開機程序時,Windows會不認識這塊RAM Disk、無法存取RAM Disk、找不到系統碟在哪裡而無法繼續載入自己,開機流程會被迫中斷。

擔當此重任的色角是Firadisk,它讓Windows可以順利接手RAM Disk,並且把RAM Disk當作紮紮實實的本機硬碟來使用。

把整個作業系統放進記憶體裡,RAM OS 讓讀寫效能快10倍

▲安裝完Firadisk後,裝置管理員裡會多出一個Firadisk元件。如果沒有出現這個元件、或是該元件上有問號或驚嘆號,就是安裝不完整,將無法順利進入RAM OS。

用Windows建立VHD

好了,需要具備的基本概念及工具都已經湊齊,接下來就是上機實作時間。一開始我們要先建立乾淨的VHD檔,在建立VHD時得注意幾點:

一、請固定尺寸

VHD可分為動態尺寸與固定尺寸兩種模式,前者會依使用量動態擴展尺寸,後者則是一開始就固定映象檔的尺寸,GRUB4DOS不支援前者。

二、請注意尺寸

VHD有多大,創建的RAM Disk就有多大。還好即使是固定尺寸的VHD,日後還是能透過工具調整容量,所以一開始設置時不必太緊張。

三、請用Windows原生工具處理

虛擬機器如VMware、VirtualBOX也能建立VHD,但過程不太乾脆,還是用Windows自己提供的工具最實在。

VHD能透過電腦管理工具的磁碟管理介面來建立,下指令用批次檔也有同樣效果:

C:\>Diskpart

Diskpart> create vdisk file="C:\VHDs\VHD_Win7.vhd" maximum=16000 type=fixed

Diskpart> attach vdisk

Diskpart> create partition primary

Diskpart> assign letter=g

Diskpart> format

因為VHD的應用不是本文重點,這裡就不解釋詳細指令涵義,熟習的玩家可自行利用更簡便的工具優化建立或掛載過程。總之上述指令碼建立了一個16GB的VHD檔案,並將其掛載成G槽。

記得裝64位元系統

接下來要把Windows佈署到VHD裡。過程不外乎將Windows安裝檔案拷貝至VHD,再以VHD開機來完成安裝Windows,作法可參考附錄網址。

唯需留意的一樣有幾點。首先,請選用64位元作業系統,因為管理4GB以上記憶體,32位元會很麻煩,也請別想透過PAE之類的技巧來彌補,絕對沒有安裝64位元Windows來的一勞永逸。

再來是作業系統版本,因為Windows Boot Manager只支援啟動Windows Ultimate以上等級的Windows 7/8,在佈署時的版本號要設對才行,請在佈署Windows到VHD時修改此行:

Imagex /apply install.wim 4 g:

「4」代表Windows Ultimate。佈署完後,G槽「4」代表Windows Ultimate。佈署完後,G槽裡就是乾淨的Windows目錄,這時修改一下C槽的開機組態,加入VHD的開機選項,用它開機,就能完成VHD內Windows的安裝程序。

(後面還有更多步驟教學詳解)

使用 Facebook 留言

魯蛇實驗室
2人給推

2.  魯蛇實驗室 (發表於 2013年5月07日 10:53)
因為還要回寫入硬碟當然會很慢,最簡單的解決方案還是用SSD,效果差不多而且又方便。
Allen Huang
3.  Allen Huang (發表於 2013年5月07日 11:44)
「...Windows內建的RAM Disk有1.5TB容量限制,對完整的作業系統來說跟本不夠用...」
摁... 1.5TB??
SeeingSky
2人給推

4.  SeeingSky (發表於 2013年5月07日 16:13)
早知道早些時候SSD跟RAM便宜的時候買些來用
現在價格...回不去了 囧rz
魯蛇實驗室
1人給推

5.  魯蛇實驗室 (發表於 2013年5月07日 16:43)
※ 引述《SeeingSky》的留言:
> 早知道早些時候SSD跟RAM便宜的時候買些來用
> 現在價格...回不去了 囧rz
長期來看,記憶體價格還是會越來越便宜的(希望啦)
SeeingSky
6.  SeeingSky (發表於 2013年5月07日 16:55)
現在幫別人組電腦都會被問說怎麼記憶體越來越貴...
還問我說是不是有偷收錢= =|||
Neil
7.  Neil (發表於 2013年5月07日 22:28)
「應用程式透過作業系統創造的虛擬位址來存取實體與虛擬記憶體(Pagefile/Swapfile.sys)」

請問一下,那虛擬位址(Virtual Address)是存在哪裡?實體記憶體?虛擬記憶體(硬碟、pagefile)?還是cache?
無痕
8.  無痕 (發表於 2013年7月30日 07:03)
虛擬位址是給軟體的記憶體管理機制位址。
如果要說存在哪我想是存在處理器暫存器。
因為虛擬位址是通往實體位址的橋樑...。
hewatika
9.  hewatika (發表於 2016年12月20日 04:49)
整篇看得很燃!!!

RAM OS 是多少年前的宅夢哪!!!

無奈現在 SSD 這麼便宜,以至於這篇文章也只能看乾爽的...

文末沒有測 IOPS,實在是破壞了這篇文章的整體感~

殘念

發表回應

謹慎發言,尊重彼此。按此展開留言規則