利用 Xen 設計虛擬機器

来源:百度文库 编辑:神马文学网 时间:2024/04/30 08:43:10
http://linux.vbird.org/linux_enterprise/xen.php
利用 Xen 設計虚拟机器
切換解析度为 800x600
最近更新日期:2008/09/09
我們常常講,最好將不同的服务器架設在不同的主机硬件上面,也就是說,每部主机所負責的任務越簡單越好, 如此一來不但可以減少主机 debug 的時程,也能夠簡化安裝与設計主机的架構。但是, 每個服務一部主机對于小企業或者是個體戶來說,光是放置主机的空間、電源、以及后續的管理問題, 就会導致一堆困擾的產生。這個時候,虚拟机器就非常有用啦。
所謂的『虚拟机器』就是在一部实體主机上面虚拟出多部实體主机的環境,且每部实體主机都是獨立的, 除了原本的那部原主机外,其他的主机都可以獨立开、關机,由于個人电脑的能力在近年來突飛猛進, 速度与效能都非常棒,所以用一部实體主机來進行虚拟机器的架設,並適當的分配不同的服務在上頭, 將有助于能源的節約、管理的簡化以及服務追蹤的簡化哩!
1.前言
1.1什麼是虚拟机器
1.2有哪些常見的虚拟机器软件
2.初探 Xen
2.1Xen 的虚拟類型与特色
2.2Xen 的運作環境解釋
2.3確定你的硬件是否支持 Xen 的運作
2.4所需要的 Xen 套件与核心,xen 的套件結構
2.5第一個泛用实例
2.5.0硬件支持性
2.5.1根目錄所需磁盘槽
2.5.2复製或安裝根目錄
2.5.3設定虚拟磁盘映象檔以及終端机介面
2.5.4編輯 xen 虚拟資料的設定檔
2.5.5利用 xm 指令啟動与管理 domain-1
2.5.6常見錯誤分析
3.其他半虚拟化的安裝方式
3.1製作安裝服务器
3.2利用 virt-install 指令安裝乾淨的 CentOS
3.3CentOS5 所提供的一個实例
4.Xen 的進階認識(這個章節還沒有動工,構思中)
4.1Xen 的网络介面
4.2Xen 网络安全
4.3全虚拟化:一個安裝 Windows 系統的实例(hvm 模式)
4.4教學实例:30個 domainU 的案例
5.針對本文的建議:http://phorum.vbird.org/viewtopic.php?p=128769
前言
這個章節主要是在介紹 Xen 這個虚拟机器,那,什麼是虚拟机器?他有什麼用途? 目前有哪些常見的虚拟机器软件 (Virtual Machine) ?底下我們先來說一說。
什麼是虚拟机器
虚拟机器 (Virtual Machine) 与Apache 的虚拟主机 (Virtual host) (註1) 不一样, 虚拟机器的目的是希望能夠在一部实體主机上面『同時運作多個操作系统』的一項功能。 为什麼我們需要在一部主机上面同時運作多個操作系统呢?可能原因有幾個:
·  讓一部強效型主机負責多種業務時:
由于电脑工業技術的发達,近年來的個人电脑不但越來越便宜,而且功能還越來越強大! 就在前幾個禮拜 (2007/09/xx) ,鳥哥也才收到兩部『四核心的、配備 2GB 主内存』的個人电脑! 這在台灣政府的中信標案裡面也已經有提供了,可見個人电脑实在是便宜又好用。
那麼好用的一部电脑如果拿來當网络服务器,你会覺得很浪費!怎麼說呢? 以鳥哥的鳥站 (http://linux.vbird.org/) 來說,一部 AMD AthlonXP 2000+ (1.6GHz 的 CPU 速度) 就跑得非常的順暢, 運作至今應該也沒有发生突发性大流量導致服務中斷的情況,觀察這部主机的平均運作情況, 使用 sar 這個指令來察看一下,唔!每日平均 CPU 負載都在 10% 以下而已。 所以說,這部四核心的电脑拿來當鳥站的主机,根本就是浪費了他的才能。
如果能夠將多種服務集中在這部主机上面來跑,豈不甚好!才不好哩! 如果你看過基礎篇 (註2) 与服务器篇 (註3) 的介紹后, 肯定会認为主机的服務越單純越好,這样在服務软件除錯以及主机環境的單純化上面比較好。 所以說,一部好的主机如果僅用于一個特定的用途,实在很浪費。但如果每個服務都需要一部主机, 又覺得很討厭,因为包括主机的硬件維護、電費、软件安裝、网络設定等等,都很麻煩,尤其又貴!
因为上述的問題,所以目前有很多專案都在开发『在一部实體主机上面模拟出另一部机器』的功能, 也就是說:『我們希望能夠在一部主机上面 "同時" 跑多個操作系统』的意思。如果能達到這样的功能,实際的硬件可以省略掉很多問題, 同時又可以充分的應用实體主机的資源,实在很不錯啊!
·  同時豁弄多種不同的操作系统:
時間拉回到四、五年前,當時的主机能力僅是還可以,還不算很夠力,而且價格不斐。 但是當時多種操作系统都很吸引人,包括 Windows/Linux/Mac/DOS... ,大家都希望能夠嘗試一下這些操作系统, 然而又不想花錢去購買一部新的主机來玩,這個時候多重开机 (註4) 就成了很重要的一環, 因为他可以讓我們在开机的過程當中選擇所想要執行的操作系统來操作說。
不過多重开机有個討厭的缺點,那就是『我每次开机只能夠單玩一種操作系统』, 所以如果你想要在多個操作系统之間切換時,光是开、關机就会讓你火氣大起來。 這個時候就有些公司开始开发能夠在一個操作系统上面『模拟出另外一個可執行的操作系统』環境, 所以此時就能夠在同時間操作兩種操作系统了。當時最流行的是 VMWare 這一套软件啦!
雖然早期就已經有數種虚拟机器的软件可以玩,不過當時畢竟是使用软件來模拟的, 硬件並不直接支持這種虚拟机器的環境,所以效能上面非常的糟糕!不過拜 Intel/AMD 大力开发強效型 CPU 之功, 目前的主机硬件大部分都有支持虚拟机器的能力,如此一來我們就能夠使用快速的虚拟机器的環境囉!
有哪些常見的虚拟机器软件
那麼目前有哪些常見的虚拟机器软件呢?他們又各有何特色?底下就來說一說:
·  老牌子的 VMWare (http://www.vmware.com/)
早期的玩家大概都有玩過這一套虚拟机器的软件,這套软件早期僅在 Windows 上面執行, 最大的優點就是可以讓使用者在 Windows 環境下同時模拟出一套 Linux 的環境,同時執行兩個操作系统。 鳥哥之前使用這套软件的目的是用來捉 Linux 的安裝畫面!在這個功能上面 VMWare 实在很不錯。
不過早期的 VMWare 效能不太好,加上當時的主机效能也不佳,而且 VMWare 模拟的硬件不会与原本的主机相同, 因此鳥哥很不建議大家使用 VMWare 來學習 Linux 。然而隨著時代的進步,目前 VMWare 已經发展的相當不錯, 同時也提供 Open source 的版本給 Unix-Like 平台的 OS 使用,算是很不錯的。他也是目前虚拟机器市場的龍頭老大!
·  已漸趨成熟的 Xen (http://www.xensource.com/)
Xen 是以 GNU 的 GPL 授權发佈的自由软件,目的在于提供效能佳、可支持不同操作系统的同時運作、 且讓同時運作的操作系统彼此互相獨立的系統環境。Xen 是基于 X86 硬件所开发出來的虚拟机器監督器 (Virtual Machine Hypervisor) ,鳥哥覺得他最大的優點就是效能佳!鳥哥曾在一部 Celoron 366 MHz, 内存 192MB 的筆記型电脑上面模拟出一個 Xen 机器給上課的同學們豁弄,同時連線 50 個同學到該部模拟的 Xen 机器上還不会覺得有延遲的問題,效能真的是很不錯。我們在下一節会詳細的介紹 Xen 這個好東西。
·  后起之秀 KVM (Kernel based Virtual Machine,http://kvm.qumranet.com/kvmwiki)
讓 Linux 发明者 Linus Torvarlds 喜好並且將之加入核心功能的虚拟机器就是這個 KVM 的技術! KVM 已經于 Linux 2.6.20 版的核心中加入此項功能,KVM 不但提供完整的 Intel/AMD CPU 的虚拟技術支持, 而且提供完整的虚拟環境。雖然目前這個技術還不算很成熟,不過未來應該也可以发展的很不錯呢! 因为 Linux 核心本身就有支持啊! ^_^!更多的 KVM 可以參考:http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine
·  酷!炫!有勁的 VirtualBox (http://www.virtualbox.org/)
還有一套自由软件的虚拟机器可以用,那就是同样架構在 x86 上面的 VirtualBox 這套软件啦! 這套软件提供完整的虚拟環境,且可支持目前市面上的主流操作系统。 鳥哥曾經看過網中人前輩在他的筆記型电脑上面玩過這套東西,非常的炫麗,而且提供圖形化介面, 效能方面看起來也相當的優秀。不過,好像整合度方面的問題,偶而模拟的作業環境会當掉, 但是不会影響到原操作系统就是了。想要在 Linux 桌上型电脑上玩玩虚拟環境的朋友,鳥哥覺得這套東西最適合您!
其实每套虚拟机器的软件都有其存在的價值,因为他們的功能与目的都不一样。舉例來說,鳥哥認为 VirtualBox 很適合于想在 Linux 桌上型电脑上面玩 Windows 的朋友,雖然他不夠穩定。至于 Xen 則很適合在一部高效能主机上面同時運作多個同版本的 Linux 系統,因为穩定度相當高,且性能優秀, 可讓使用者輕鬆的在一部机器上面運作多個獨立的操作系统來分別處理不同的网络服務呢!
Tips:
這一章底下的資料牽涉到很多硬件的觀念以及 Linux 操作系统最底層核心的架構說明, 如果您不想要了解這些基礎概念,可以直接看 CentOS 5.x 的实例說明即可。
初探 Xen
Xen 的效能为什麼能夠這麼好? Xen 在使用上面有什麼样的限制?我的一部主机最多可以支持幾個 Xen 的模拟環境? Xen 的模拟環境有幾種類型? 這些疑問我們都得要先知道一下才好! 當然,最好能夠有個簡單的小例子來處理 Xen 的模拟環境囉。
Xen 的虚拟類型与特色
Xen 這套自由软件在虚拟机器的模拟類型方面主要分为半虚拟化 (Para-virtualization) 及全虚拟化 (Full virtualization) 兩種,其中半虚拟化主要是透過修改 Linux 核心來達成的虚拟技術。 半虚拟化技術所產生的虚拟机器需要与原本的操作系统相同較佳。使用半虚拟化的環境所具備的特色有: (註5)
虚拟机器的運作效率与实體机器的效能相當;
最多可支持到具有 32 顆以上 CPU 的主机環境;
支持 x86/32, x86/32 含 PAE 技術, 及 x86/64 的硬件平台環境;
良好的硬件驅動程序支持,幾乎支持所有的 Linux 裝置之驅動程序;
Xen 的半虚拟化技術主要是用在相同版本的 Linux 上面,也就是說,如果你想要使用半虚拟化的方式啟動多個虚拟机器, 那麼那些虚拟机器全部都必須是相同的操作系统,甚至要求相同版本与相同核心的 Linux distribution 喔。
如果你想要安裝不同版本的 Linux 或者是其他的 OS (例如 Windows XP) 時,就得要使用全虚拟化技術了。 但是全虚拟化技術是有其限制的,當你的硬件滿足下列需求時,全虚拟化技術才能夠動作:
你的硬件支持 Intel 的 VT 技術 (Virtualization Technology, Intel-VT);
你的硬件支持 AMD 的 SVM 技術 (Secure Virtual Machine, AMD-SVM or, AMD-V)。
此外,上面提到的 PAE 指的是 Intel 的实體位址延伸技術 (Physical Addressing Extensions, PAE), 這項技術可讓原本僅支持到 4GB 实體内存的 32 位硬件平台,可支持到最大 64GB 的内存喔! 而且, Xen 幾乎可以在所有的 P-II 以上等級的硬件平台上面跑半虚拟化任務,如果不跑全虚拟化的話,其实效能確实是 OK 的啦!
近來由于虚拟机器软件的流行,加上 x86 电脑效能与 CPU 運算核心單元的增加,兩大 x86 CPU 製造商 Intel/AMD 都发表了新的整合到 CPU 的虚拟技術,分別是 Intel 的 Vanderpool 虚拟技術以及 AMD 的 Pacifica 技術。 這些技術有的也支持 Xen ,這讓 Xen 的效能增進不少呢! ^_^
Xen 的運作環境解釋
在基礎學習篇裡面我們曾經談過硬件、核心与應用程序的關係, 所有的應用程序都是在核心層之上來完成的 (註6)。 然后透過核心功能去呼叫与使用硬件元件的命令。好了, 現在來仔細想一想,既然我有多個虚拟机器,每個虚拟机器的環境各別有自己的操作系统核心, 也就是有多個操作系统同時存在。如果所有的操作系统都能夠完整的控制硬件的話, 那麼硬件到底該接受誰的指令來運作?那個系統的指令会先被執行?這是很重要的問題, 因为如果這邊搞不定,那麼你的硬件系統就只有當机一途。
为了解決這個問題,Xen 也分成多個層級 (layer) 來執行。他將 Linux 的核心修改過后, 再使用這個修改過后的核心开机,而开机后先載入 Xen 的監督器 (Hypervisor) , 並且啟動第一個在上頭的操作系统,我們稱他为 domain-0。 (在 Xen 上面所謂的一個 domain 就是一個虚拟机器囉!)
Domain-0 之所以要先被載入是因为 Domain-0 含有其他虚拟机器啟動所必須的控制指令, 並且 domain-0 也是控制虚拟裝置的重要主控系統。 在 domain-0 上頭最重要的就是一個 xend 的常駐程序,其他的 domain 都是由這個 xend 來管理的。 至于命名方面,除了 domain-0 之外的其他虚拟机器就依序被稱为 domain-1, domain-2 等等, 我們通稱为 domain-U 囉。這些咚咚的相關性有點像這样:
圖 2-1、Xen Hypersvisor 的功能示意圖(註7)
由上圖我們知道 domain-0 真的是很重要的,因为他直接控制 Xen 的監督器 (Hypervisor),而且掌握了实際的 Linux 驅動程序 (drivers)。而其他的虚拟机器 (domain-U) 則是透過 Xen 監督器來与实際的硬件以及 domain-0 達成溝通。而为了讓 domain-0 能夠与 Xen 結合,我們必須要修改 domain-0 的核心才能夠順利運作。並且需要使用 domain-0 的核心來开机才可以。 domain-0 是所有虚拟机器的來源,所以他可以盡量簡單一點,其他的個別服務則可以放置到不同的 domain 當中了。
那個 xend 也是很重要的咚咚,他可以管理 domain-0 与其他 domain 之間的啟動与溝通, 可以提供一個終端机 (console) 介面來讓 domain-0 登入其他的 domain ,所以我們也必須要啟動這玩意兒才行。
早期 Xen 尚未被各 distribution 整合到各自的版本中時,使用者必須要由 Xen 的官方網站下載原始碼, 然后自行重新編譯核心以及編譯 Xen 软件才行。說实在的,玩個 Xen 這麼麻煩,倒不如不要玩!^_^。 然而在 RHEL 5 (CentOS 5) 以后, Xen 已經包含在原始釋出的套件中了,所以我們直接用 yum 就能夠安裝妥當! 所以要搞定一部 Xen 的 domain-0 已經不再是不可能的任務囉!^_^
對于 Xen 的基本原理有一些認識之后,接下來就讓我們开始在 CentOS 5 上面進行一個小小的实驗吧!
確定你的硬件是否支持 Xen 的運作
雖然說目前的硬件都很新了,不過有的朋友使用的是舊的主机來安裝 Linux ,所以我們必須要留意你的硬件是否支持 xen 的運作。而我們知道 Xen 支持半虚拟化与全虚拟化兩種模式,兩種模式的需求为:
·  半虚拟化 (Para-virtualization) 硬件需求:
只要是 64 位的 x86 主机 (x86_64) 都能夠支持半虚拟化的環境。如果是 32 位的主机 (x86) 時, 該主机必須要支持的实體位址延伸技術 (PAE) 才能夠使用 xen 喔!那如何確認呢?很簡單,檢查 CPU 的參數即可:
[root@linux ~]# cat /proc/cpuinfo | grep flags flags  : fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
嘿嘿!這一部主机是鳥哥的 P-III 800 主机,看吧!確实有支持 PAE 喔!所以當然可以玩 Xen 囉。
·  全虚拟化 (Fully-virtualization) 硬件需求:
如果你需要全虚拟化的技術支持時,此時需要硬件有支持虚拟化技術才行。 目前在 x86 的主机當中, Intel 提供 VT 技術, AMD 則提供 SVM 技術。 這兩種技術在 CPU 的旗標分別是: Intel (vmx) 与 AMD (svm) 。 鳥哥在 Core Duo 主机上面的測試可以发現:
在 Intel Core 2 Duo 的 CPU 主机上面測試 CPU 旗標: [root@linux ~]# cat /proc/cpuinfo | grep flags flags   : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts           acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni           monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm # 瞧!是有那個 vmx 的支持啦!
至于 AMD 的主机旗標則是:(下表感謝donyingle兄的提供!)
在 AMD Athlon(tm) 64 X2 的 CPU 主机上面測試 CPU 旗標: [root@linux ~]# cat /proc/cpuinfo | grep flags flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov           pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt           rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic           cr8legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps # 瞧!是有那個 svm 的支持啦!
如果確定你的 CPU 有支持上述的條件后,嘿嘿!那我們就可以开始底下的遊戲啦!如果沒有支持呢? 那很抱歉,底下的資料看看就好!
所需要的 Xen 套件与核心
注意: 在开始安裝之前,請先參考前一小節以確定你的硬件已經支持 Xen 的半虚拟化功能了!
約略談了一下 Xen 的原理、特色之后,在开始玩弄 Xen 之前,我們得了解運作 Xen 所需要的各項套件,並且順利安裝后,才能夠使用的啊! ^_^。如同前一小節提到的, 要使用 Xen 半虚拟化 (Para-virtualization) 必須要修改核心才能夠順利的運作。 在以前的版本你需要重新編譯核心,不過,在新的版本,例如 CentOS 5.x 底下,就已經將 Xen 的核心幫你編譯好了!你可以直接安裝即可。所以,你需要安裝的套件主要有:
kernel-xen:修改的 Linux 核心,使可以跑 Xen 的環境;
xen:主要的 xen 套件,包括設定檔、啟動腳本、所需的基本函数库等;
xen-libs:Xen 所需要的函数库等;
python-virtinst:提供終端机安裝的软件;
virt-manager:为一個圖形使用者介面软件,可在圖形介面管理 xen 喔!
在 CentOS 5.x 的環境下,你可以使用 yum 直接來安裝這幾個套件。安裝完畢后請務必使用新的核心开机! 以鳥哥的例子來說,我安裝了數個核心,包括 kernel-2.6.18-8.1.14.el5 及 kernel-xen-2.6.18-8.14.el5 , 所以在 grub 的設定檔當中会像這样:
[root@linux ~]# vi /boot/grub/menu.lst default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-8.1.14.el5xen)         root (hd0,0)         kernel /boot/xen.gz-2.6.18-8.1.14.el5         module /boot/vmlinuz-2.6.18-8.1.14.el5xen ro root=/dev/hda1 rhgb quiet         module /boot/initrd-2.6.18-8.1.14.el5xen.img title CentOS (2.6.18-8.1.14.el5)         root (hd0,0)         kernel /boot/vmlinuz-2.6.18-8.1.14.el5 ro root=/dev/hda1 rhgb quiet         initrd /boot/initrd-2.6.18-8.1.14.el5.img
你必須要注意到,鳥哥使用的开机選單为第0個,亦即是 2.6.18-8.1.14.el5xen 那一個! 然后重新啟動這部 Linux 主机喔!啟動完成后,應該再次的確認一下是否为 xen 的核心才行!
[root@linux ~]# uname -r 2.6.18-8.1.14.el5xen # 仔細看,鳥哥的核心为新的 xen 的核心喔!   [root@linux ~]# chkconfig --list | grep xen xend        0:off  1:off  2:on   3:on  4:on  5:on  6:off xendomains  0:off  1:off  2:off  3:on  4:on  5:on  6:off # Runlevel 3/5 的 xen 相關服務是有啟動的才行!   [root@linux ~]# pstree -p | grep xen         |            |-xenbus(10)         |            `-xenwatch(9)         |-xenconsoled(2348)---{xenconsoled}(2349)         |-xenstored(2340) # 這样看來,應該確实是有啟動的样子喔!继續最后一個確認!   [root@linux ~]# xm list Name                  ID Mem(MiB) VCPUs State   Time(s) Domain-0               0      462     1 r-----     49.2 # xm 为 Xen 的重要指令,list 为列出已經在跑的 xen 系統,預設有 domain-0 存在!
透過上面的測試,我們会知道 xen 確实已經順利的啟動,而且也啟動前面談到的那個重要的 domain-0 囉! 接下來我們再來聊一聊那 xen 的設定檔在哪裡?
·  xen 的套件結構
我們前面談到過, Xen 在 domain-0 是由一個 xend 的服務所管理的,他可以用來啟動、關閉与連結到其他的 domain-U 當中。此外, Xen 亦提供許多的指令來讓系統管理員管理他們的 domain-U 啊!這些重要的啟動執行檔为:
/usr/sbin/xend:就是 xend 的啟動腳本,使用 python 程序語言寫成的;
/usr/sbin/xm:重要的管理 xen 的指令,可輸入 xm help 查詢用法。
至于与 xen 有關的設定檔,包括一些模拟元件的啟動腳本都在 /etc/xen 底下,在這個目錄下的許多資料为:
/etc/xen/xend-config.sxp:這個重要!是 xend 的設定檔!內容包括 domain-0 的類型、网络的連結方式、 domain-0 的内存与CPU等資源配置、是否使用 vnc 作为 domain-U 的連線方式等等。 不過,鳥哥覺得,這個檔案不太需要更動,使用預設值就很夠用了。
/etc/xen/:裡面含有數個 domain-U 的設定檔範本,包括:xmexample1, xmexample.hvm。 其中,那個 xmexample.hvm 可作为完整模拟的參考範本喔!
/etc/xen/auto:如果你想要在系統开机時就自動啟動某個 domain-U 的話,可以將該設定檔指定連結到這個目錄中。 舉例來說,如果你要在开机后立即使用 /etc/xen/xmexample.hvm 設定檔來啟動某個 domain-U , 那可以這样做:
[root@linux ~]# cd /etc/xen/auto [root@linux auto]# ln -s ../xmexample.hvm . # 這只是個範例,你可不要跟著做!因为 xmexample.hvm 還需要修改才能運作!
/etc/xen/scripts:這目錄有趣了!包括虚拟設備的啟動、虚拟网络的啟動、 虚拟橋接器的啟動等等,都是透過這目錄底下的所有檔案來達成的!
在你安裝完畢,並且使用新核心啟動后,接下來讓我們开始來處理一個小案例吧!
第一個泛用实例
就如同圖 2-1 的样子,在主机上的所有 Linux OS 都需要自己能夠开机, 而开机流程通常是這样的:(註8)
step 1: 按下電源,主机开始讀取 BIOS 資料;
step 2: 取得开机的裝置順序,並由 MBR 取得开机選單与开机管理程序;
step 3: 由开机管理程序載入 Linux kernel 及虚拟磁盘 (initrd);
step 4: Kernel 偵測硬件載入適當的驅動程序,並掛載根目錄以讀取核心模組;
step 5: 开始由 /sbin/init 程序設定主机的環境。
由上述的動作,我們可以知道 Linux 开机的重點在于 1. 核心 2. 虚拟磁盘 (initrd) 及 3. 根目錄 (/) 了。 雖然核心与虚拟磁盘我們的 CentOS 5 已經提供了,但是預設的虚拟磁盘好像並未主動的加入 Xen 的某些驅動程序, 因此我們得需要針對虚拟磁盘進行設定才好。此外,每個 Xen domain 的根目錄也很傷腦筋的!因为根目錄需要很多資料,而且還需要掛載類似 /sys, /proc, /dev, /selinux 等特殊的檔案系統哩! 那該如何處理根目錄呢?底下就讓我們來處理處理:
·  硬件支持性
就如同前面幾個小節談到的,如果我們的硬件並不支持 xen 所必須要的功能,那麼你是無法建立好你的 domain-U 的! 在這個泛用案例當中我們的重點是測試半虚拟化,因此你只要具有 PAE 的支持即可。 鳥哥以較低階的 P-III 800 來進行測試,硬件檢查的結果是這样的:
[root@linux ~]# cat /proc/cpuinfo | grep flags flags  : fpu tsc msr pae mce cx8 mtrr mca cmov pat pse36 mmx fxsr sse up
你可以发現確实存在那個 pae 的關鍵字,因此我們這個系統是可以玩 Xen 的半虚拟化技術的! 所以讓我們继續進行工作吧!
·  根目錄所需磁盘槽
根目錄所需磁盘槽的來源可以有兩個,一個是实體硬碟,一個是利用 dd 建立一個大檔案來使用。 鳥哥比較傾向利用 dd 來處理你的根目錄喔!你可以這样做:
範例:建立一個 5GB 的大檔案 [root@linux ~]# mkdir -p /disk2/xen # 因为鳥哥的 /disk2 为一顆額外的硬碟,所以容量比較大啦!   [root@linux ~]# cd /disk2/xen [root@linux xen]# dd if=/dev/zero of=xen.img bs=1M count=5000 5000+0 records in 5000+0 records out 5242880000 bytes (5.2 GB) copied,178.482 秒,29.4 MB/s # 這個時候会开始創造一個 5GB 左右的檔案,由于硬碟速度快慢的關係, # 這個動作可能会消耗數分鐘到數十分鐘不等。   [root@linux xen]# ll /disk2/xen -rw-r--r-- 1 root root 5242880000 Oct 10 00:30 xen.img
檔案是建立起來了,不過如果你的 Linux 有啟動 SELinux 的話,還需要一些類型的改變才可以! 其实動作也不難,這样做就對了!
[root@linux xen]# chcon -t xen_image_t -R /disk2/xen [root@linux xen]# ll -aZ /disk2 drwxr-xr-x  root root user_u:object_r:xen_image_t      . drwxr-xr-x  root root system_u:object_r:file_t         .. -rw-r--r--  root root user_u:object_r:xen_image_t      xen.img # 如果你有啟動 SELinux 才需要這麼做,否則就略過。 # 反正你要記得 Xen 的檔案必須要是 xen_image_t 的安全內容類型。
檔案建立起來后,就需要進行格式化囉~格式化的方法为:
範例:將刚刚建立的大檔案格式化为 ext3 的檔案格式 [root@linux xen]# mke2fs -j /disk2/xen/xen.img mke2fs 1.39 (29-May-2006) /disk2/xen/xen.img is not a block special device. Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) ....底下省略....
由于這是檔案不是磁盘分割槽,所以会有上述的警告訊息,你按下『y』就對啦!
·  复製或安裝根目錄
由于 domain-U 与 domain-0 其实是一样的系統,因为是半虚拟化嘛!所以,最簡單的根目錄製作方法, 就是將原本的 domain-0 的根目錄复製到新的分割槽內就對了! 以鳥哥的例子來說,你可以簡單的這样做:
[root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt # 先將刚刚製作出來的資料給他掛載起來,這是特殊掛載法喔!   [root@linux ~]# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt # 這幾個目錄的資料是一定需要复製的!粉重要!。   [root@linux ~]# mkdir /mnt/{proc,sys,home,tmp,selinux} # 這幾個目錄与虚拟檔案系統有關,包括程序、核心資料等目錄,所以要先建立   [root@linux ~]# vi /mnt/etc/fstab /dev/sda1  /         ext3    defaults        1 1 devpts     /dev/pts  devpts  gid=5,mode=620  0 0 tmpfs      /dev/shm  tmpfs   defaults        0 0 proc       /proc     proc    defaults        0 0 sysfs      /sys      sysfs   defaults        0 0 # 我這裡假設我的根目錄所在磁盘槽为 SATA 硬碟的第一個分割槽, # 所以是 /dev/sda1 。此外,其他的檔案系統如 proc, sysfs 都必須要寫入! # 至于原本在 domain-0 的其他裝置,就給他拿掉吧!   [root@linux ~]# vi /mnt/etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=xen.test.hostname # 這裡設定一下你的主机名稱啦!   [root@linux ~]# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none IPADDR=192.168.0.123 NETMASK=255.255.255.0 ONBOOT=yes # 建議將 IP 也設好。但是要注意那個 HWADDR 最好能夠拿掉不設定!   [root@linux ~]# umount /mnt # 記得將掛載的資料給他卸載掉
基本上,根目錄的設定到這裡就算結束了!不過,你会发現由于 domain-U 的資料都是由 domain-0 來的, 而不同的主机其实設定不会相同,所以使用上述的作法你会发現有幾個小問題:
你必須要手動處理一些小設定,包括主机名稱, /etc/fstab, IP 參數等等;
即使手動處理過上述的資料,還是很可能会無法成功的啟動 domain-U ;
由于 domain-0 可能会安裝比較多的套件,這些資料又在 domain-U 當中用不著,徒然造成硬碟容量的浪費。
所以,雖然這個方法最簡單,不過通常鳥哥不是很建議您使用啦! ^_^
·  設定虚拟磁盘映象檔以及終端机介面
由于預設的 CentOS 虚拟磁盘 (Initial Ram Disk) 並不包含一些 Xen 的相關驅動程序, 因此搞了老半天也是無法驅動 Xen 的 domain-U ,給他氣死! 所以,我們得先就 initrd 來進行一些額外的設定才行。 這個地方非常的重要!因为鳥哥卡在這裡好幾天~最后才发現原來是 initrd 的問題啊~
[root@linux ~]# mount -o loop /disk2/xen/xen.img /mnt [root@linux ~]# cd /boot [root@linux boot]#  mkinitrd -v -f --fstab /mnt/etc/fstab --with xenblk \ > --with xennet --preload xenblk --preload xennet \ > initrd-2.6.18-8.1.14.el5xen.vbird.img `uname -r` [root@linux boot]# umount /mnt # 詳細的各項參數請 man mkinitrd ,上述的範例僅是利用 /etc/fstab 的裝置來設定, # 並且加上一些 xen 相關的驅動程序而已。這個過程非常的重要! # 最終会製作出一個 initrd-2.6.18-8.1.14.el5xen.vbird.img 檔案
除了這個虚拟磁盘之外,为了要方便我們登入 domain-U 的環境,我們需要產生一個終端机介面才行。 因为每個 domain-U 会使用到終端介面,然而我們知道 tty1 ~ tty7 預設給 domain-0 使用掉了。 为此,我們必須得要製作出一個虚拟的終端介面,那就是 xvc0 這個終端介面囉。如何產生呢? 簡單的流程是這样:
[root@linux ~]# vi /etc/inittab # 大約在第 51 行的地方加入底下特殊字體的部分: 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav # 意思是使用 agetty 建立 xvc0   [root@linux ~]# init q # init q 這個指令可以讓 /etc/inittab  的設定立刻生效而不需要重新开机!   [root@linux ~]# ln -s /dev/console /dev/xvc0 # 如果 xvc0 沒有主動建立的話,我們需要手動來建立連結才可以喔!
做完這一步之后,接下來就是可怕的設定檔囉~
·  編輯 xen 虚拟資料的設定檔
接下來就是重頭戲啦!因为我們必須要指定 domain-U 的相關虚拟設定值,包括使用幾顆 CPU 、使用多少内存容量, 以及所使用的核心与根目錄的所在等等。如前所述,這些設定檔主要都在 /etc/xen 底下, 尤其裡面的 xmexample1, xmexample2 等檔案就是很好的說明文件檔,很有參考價值。 鳥哥先說一下我的設定是這样的:
[root@linux ~]# vi /etc/xen/centos5 # 這個檔案的檔名可以隨便你取,不過設定檔最好是在 /etc/xen 這個目錄下才好! name    = "centos5" kernel  = "/boot/vmlinuz-2.6.18-8.1.14.el5xen" ramdisk = "/boot/initrd-2.6.18-8.1.14.el5xen.vbird.img" memory  = "128" vcpus   = 1 vif     = [ '' ] disk    = [ 'tap:aio:/disk2/xen/xen.img,sda1,w' ] root    = "/dev/sda1 ro " # name:        只是一個顯示的名稱,一般建議与檔名相同即可; # kernel:      在 domain-0 上面的檔案,用來進行 domain-U 的开机!非常重要! # ramdisk:     就是 initrd 那個檔案囉~刚刚我們才做出來的檔名 # memory:      分配給這個 domain-U 的内存有多少?如果沒有圖形,96 MB 也可以! # vcpus:       使用多少顆 CPU 的意思; # vif:         是否需要网络卡,如果需要网络卡,至少要有設定!但內容可用預設! # disk:        用來作为根目錄的是那個磁盘,這個最重要啦!語法为: #       tap:aio:/完整/路徑/檔名,設計为domain-U的磁盘代號,可否寫入 #              以我們這個例子來說,我將之前建立的大檔案模拟成为 domain-U 的 #              /dev/sda1 ,並且該 partition 为可寫入 (w)。
特別特別留意的是,上面的設定檔當中的 kernel, ramdisk 以及 disk 都是以原本的主机 (domain-0) 的角度來思考的, 也就是說,实際上我們是以 domain-0 的核心檔案來進行 domain-U 的开机,因此你会发現在 domain-U 當中並不存在 /boot 這個目錄喔!因为实際上用來开机的是 domain-0 的檔案嘛!
至于另一個重點就是那個 disk 參數。我們可以使用模拟的方式也可以使用实際的 partition 來給予設定。 如果是『用檔案來模拟成为 partition』時,使用兩個逗號 (,) 隔开成为三個欄位,分別为:
tap:aio:/完整路徑/檔案的名稱,裝置代號名稱,寫入与否
[tap:aio:]:为較新的檔案處理模式,舊的方式为使用:[file:]
[裝置代號名稱]:就是模拟的裝置,請与 domain-U 內的 fstab 對應起來喔!
[w]:就是設定可否寫入,若唯讀則为[r]
如果使用实體 partition 來模拟的話,那麼开頭的部分会以『phy:』來取代。舉例來說,如果我們以 /dev/hda5 來作为 domain-U 的 /dev/sda1 的話,那就会變成:
disk = [ 'phy:/dev/hda5,sda1,w' ]
如果一切都搞定之后,接下來讓我們來啟動 Xen 的 domain-U 吧!
·  利用 xm 指令啟動与管理 domain-1
在 domain-0 可以使用 xm 這個指令來啟動、關閉、刪除某個 domain-U , xm 的指令用法是這样的:
[root@linux ~]# xm [動作] [設定檔名] [-c] 參數: [動作]:要某個設定檔內的 domain-U 作何動作之意,常見的動作有:    create   :啟動這個 domain-U 的意思,例如啟動 centos5 這個設定檔時,使用:               xm create centos5    destroy  :立即由内存中,將這個 domain-U 給刪除,常用于 domain-U 出問題時    list     :將目前已經啟動的 domain 都列出來之意;    console  :若有已建立的 domain-U 時,可用 console 來取得 domain-U 的終端介面    shutdown :關閉某個已啟動的 domain。如果想要關閉全部的 domain-U ,可用               xm shutdown -a [設定檔名]:亦即在 /etc/xen/ 目錄下的檔名囉; -c :同時建立到該設定檔的終端介面 (console)
如果想要啟動我們刚刚建立的 centos5 這個設定檔內的 domain 時,你可以使用『xm create -c centos5 』即可。 那個 -c 的作用是可以讓你直接取得 domain-U 的終端机介面。鳥哥在 pietty 上面連線到 domain-0 , 然后啟動 centos5 這個 domain 的情況如下所示:
圖 2-2、啟動 xen domain-U 的示意圖
在圖 2-2 當中,輸入指令后 domain-U 的开机流程就会依序的顯示在你的終端机上, 感覺上就好像坐在电脑前面看 Linux 主机开机一样!实在是很不賴!最后如果开机順利成功的話, 結果会像下圖所示這样:
圖 2-3、啟動 xen domain-U 的示意圖
在圖 2-3 當中,最上方圈起來的开机訊息是錯誤訊息。由于我們是复製 domain-0 的所有資料, 因此連同原本寫在 /etc/rc.d/rc.local 檔案內的執行過程也会被執行。但是 domain-U 的狀況与 domain-0 並非完全相同,所以就会如上所述出現一些錯誤訊息啦!這也是我們需要額外處理的部分喔。
當你以 root 的身份登入后 (這個真的是終端机,並非是 ssh 的畫面喔!),会发現多了一個 xvc0 的終端介面, 這個介面得先在 /etc/inittab 裡面設定好才行!如果一切都 OK 了!恭喜您,你已經登入 domain-U 囉! 接下來請你自行根據你的需要來設定好你的 domain-U 吧!讓這兩個 domain 並行呢!
好了,現在我如何登出 centos5 這個 domain-U 呢?你可以這样做的:
直接在 domain-U 的環境中按下 [ctrl]-] 這個組合鍵來回到 domain-0 的環境;
直接關閉 pietty 等連線的软件;
利用其他 bash 來結束 (kill) 掉使用 xm 所建立的連線程序
有趣的是,即使你使用上述的方法來離开 domain-U 時, 也不会影響到 domain-U 的继續運作!而且 root 也不会登出,等到你下次再以『 xm console centos5 』時, 会继續取得 root 的動作继續處理刚刚未完成的工作呢!很神奇吧~
現在,請跳回 domain-0 的地方,或者是利用另外一條 pietty 的連線連入 domain-0 ,我們使用 xm list 來察看一下各個 domain 的狀況吧!
[root@linux ~]# xm list Name             ID Mem(MiB) VCPUs State   Time(s) Domain-0          0      366     1 r-----    735.2 centos5          42      127     1 ------     52.4 # 你会发現多了一個 domain 出現!名稱为 centos5 啦! # 你也会发現有個 State 吧!那個 State 的意義是這样的: # r :該 domain 正在使用 CPU 資源在運作中; # b :這個 domain 目前被懸置(blockded),很可能由于這個 domain 在等待較長時間 #     的輸入輸出 (I/O) 之故。 # p :該 domain 處于暫停的狀態,通常由于管理員使用 xm pause 之故。 #     當 domain 在此狀態時, Xen 的監督器將不会處理該 domain 的動作; # s :這個 domain 正在關机當中 # c :這個 domain 已經 crash 了,但是卻沒有自動的關掉。通常是因为沒有設定 #     on_crash 的相關動作所致。 # d :該 domain 正在死亡中...因为該 domain 無法正確的 shutdown/crashed 之故。
很簡單吧!這样就完成你的 Xen domain 囉~开始將你所想要的网络服務分門別類的放到不同的 domain-U 中吧! 加油!
例題:關于如何登入 domain-U
我在啟動 domain-U 的時候,使用指令为『 xm create domain-U 』導致我使用 xm list 可以看到新的 domain-U 在運作,但我還是在 domain-0 。請問此時我該如何登入 domain-U 呢?
答:
有兩種方式,如果想要取得 domain-U 的終端机模式,請使用:
xm console domain-U
如果你知道 domain-U 的 IP,並且 domain-U 有啟動類似 ssh/telnet 的服務時,可使用网络服務登入。舉例來說 domain-U 的 IP 为 192.168.100.100,且有啟動 ssh ,則你可以使用:
ssh username@192.168.100.100
例題:關于如何關閉 domain-U
我使用 xm list 時,发現 domain-U 已經啟動了,我該如何關閉這個 domain 呢?
答:
如果你在 domain-0 上頭的話,可以使用:
xm shutdown domain-U
來關閉這個 domain-U ,如果極端一點,你想要關閉所有的 domain-U (除了 domain-0 之外),則可以下達:
xm shutdown -a
那如果你是在 domain-U 裡面呢?想關閉該 domain 就直接給他:
shutdowm -h now
即可,就好像一般正常程序關机一样喔!那如果萬一 domain-U 無法順利關机,則你可以在 domain-0 上面直接下達刪除的指令:
xm destroy domain-U
例題:關于重复登入的問題
我利用 xm create -c domain-U 的方式取得終端机來登入 domain-U 了,結果另外一個使用者使用『xm console domain-U』也來登入該 domain,此時会发生什麼問題?該如何解決?
答:
由于預設情況下,一個 domain-U 僅有一個終端机,因此第二個登入者將不会詢問帳號密碼,而是直接以第一個登入者的身份取得該終端介面,亦即兩者將具有相同的終端介面与所有資源。但如此一來会導致控制權的爭奪效應,最終結果兩者都無法控制該終端介面。此時建議兩者均離开該終端介面,然后讓單一使用者以 xm console 登入,另一使用者則使用類似 ssh 的方式网络登入即可。
·  常見錯誤分析
Xen 的啟動其实是頗不容易的,常常会有一些錯誤情況发生。底下我們來看看一些常見的錯誤情況, 讓您了解到,您無法啟動 Xen 的可能原因为何?
·  沒有啟動 Xen 的 xend daemon
[root@linux ~]# xm create -c centos5 Using config file "./centos5". Error: Unable to connect to xend: Connection refused. Is xend running?
如上所述,肯定你沒有啟動 xend 這個 daemon 的啦!直接啟動他即可:『/etc/init.d/xend start』
·  使用到錯誤的核心或者 domain-0 未以新 xen 核心开机
[root@linux ~]# xm create -c centos5 Using config file "./centos5". Error: (22, 'Invalid argument')
然后請到登錄檔內看看,亦即是 /var/log/xen/xend.log 檔內,如果出現如下的錯誤:
[root@linux ~]# cat /var/log/xen/xend.log [2007-10-17 13:18:48 xend.XendDomainInfo 31254] ERROR (XendDomainInfo:203) Domain construction failed
很有可能就是你的核心檔案用錯。此時請檢查一下你的設定檔,看看『kernel』的項目是否設定正確? 我們務必要使用 xen 相關的核心來开机才行啊!
·  SELinux 或者是檔案權限的問題
[root@linux ~]# xm create -c centos5 Using config file "/etc/xen/centos5". Error: Kernel image does not exist: /boot/vmlinuz-2.6.18-8.1.14.el5xen
但我看過 /boot/vmlinuz-2.6.18-8.1.14.el5xen 確实是存在的,可能原因为何?一般來說,這種問題應該是 SELinux 的影響所致。確定方法可以用『setenforce 0』然后再重新『xm create -c centos5』測試看看, 如果確定可以登入,那表示您的 /boot/vmlinuz-2.6.18-8.1.14.el5xen SELinux 安全格式內容不對。 正確的核心开机類型應該是:
[root@linux ~]# ll -Z /boot -rw-r--r--  root root system_u:object_r:boot_t         config-2.6.18-8.1.14.el5xen -rw-------  root root user_u:object_r:boot_t           initrd-2.6.18-8.1.14.el5xen.vbird.img -rw-r--r--  root root system_u:object_r:boot_t         symvers-2.6.18-8.1.14.el5xen.gz -rw-r--r--  root root system_u:object_r:system_map_t   System.map-2.6.18-8.1.14.el5xen -rw-r--r--  root root system_u:object_r:boot_t         vmlinuz-2.6.18-8.1.14.el5xen
請自行使用 chcon 指令來處理 SELinux 的錯誤吧!
·  Kernel panic 的問題
如果出現如下的可怕畫面時:
....前面省略.... Loading ext3.ko module Creating root device. Mounting root filesystem. mount: could not find filesystem '/dev/root' Setting up other filesystems. Setting up new root fs setuproot: moving /dev failed: No such file or directory no fstab.sys, mounting internal defaults setuproot: error mounting /proc: No such file or directory setuproot: error mounting /sys: No such file or directory Switching to new root and running init. unmounting old /dev unmounting old /proc unmounting old /sys switchroot: mount failed: No such file or directory Kernel panic - not syncing: Attempted to kill init!
出現這個『Kernel panic』的問題非常的多且复雜,其实主要的原因就是無法掛載根目錄。 因为你核心檔案已經進行偵測,並且虚拟磁盘檔案 (initrd) 也已經載入囉! 那什麼情況下会無法掛載根目錄呢?你應該要這样查閱:
·  1. 用來作为根目錄的檔案 SELinux 類型不對:
首先,請先到 /var/log/messages 裡面察看一下,如果出現如下畫面:
Oct 17 12:04:17 xen-test kernel: audit(1192593857.395:259): avc:  denied  { search } for  pid=29687 comm="tapdisk" name="/" dev=hdc1 ino=2 scontext=system_u:system_r:xend_t:s0 tcontext=system_u:object_r:default_t:s0 tclass=dir # 上面是同一行,意思是說,該檔案讀取被拒絕了,因为程序的格式为: # scontext=system_u:system_r:xend_t:s0 ,但是你的檔案格式为特殊字體部分,亦即: # tcontext=system_u:object_r:default_t:s0 # 所以這個檔案的讀取就被『deny』了!
這表示你用來作为根目錄的檔案 SELinux 類型不對,正確的檔案類型是這样的:
-rw-r--r--  root root user_u:object_r:xen_image_t      xen.img
所以你可以使用類似底下的方式來處理:
[root@linux ~]# chcon -t xen_image_t -R /disk2
似乎連同最頂層的 /disk2 都需要修改 SELinux 安全內容才行!所以你可以加 -R 來讓子目錄生效!
·  2. initrd 虚拟磁盘沒有載入正確的模組
另一個可能原因就是虚拟磁盘並沒有載入 domain-U 需要的模組,所以你必須要仔細看上面的輸出訊息有沒有這個項目:
Creating block device nodes. Loading xenblk.ko module XENBUS: Timeout connecting to device: device/vbd/2049 (state 3) Loading xennet.ko module netfront: Initialising virtual ethernet driver. netfront: device eth0 has flipping receive path. Loading uhci-hcd.ko module
這表示已經載入了 xen 的相關模組,如果你的畫面沒有這個訊息時,請參考前一小節關于虚拟磁盘的說明。並且更新你的 domain-U 設定檔吧!
·  3. 設定檔內容寫錯
很多時候我們都会打錯字~实在很麻煩~所以如果上述兩點你都確認過了,接下來請檢查一下你的打字有沒有問題。 假設我的 xen 檔案是放置到 /disk2/xen/xen.img 裡頭,那麼兩個地方要注意:
[root@linux ~]# vi /etc/xen/centos5 name    = "centos5" kernel  = "/boot/vmlinuz-2.6.18-8.1.14.el5xen" ramdisk = "/boot/initrd-2.6.18-8.1.14.el5xen.vbird.img" memory  = "128" vcpus   = 1 vif     = [ '' ] disk    = [ 'tap:aio:/disk2/xen/xen.img,sda1,w' ] root    = "/dev/sda1 ro"
模拟的裝置 (disk 項目內) 以及根目錄的所在裝置 (root 的項目) 需要配合成功,否則就会失敗了! 當然啦,模拟的裝置也必須要跟实際的檔案相同才行喔!
·  domain-U 本身的問題
如果开机已經到達下面的狀況時:
unmounting old /sys INIT: version 2.86 booting                 Welcome to  CentOS release 5 (Final)                 Press 'I' to enter interactive startup. 正在設定時鐘  (localtime): 三 10月 17 13:24:28 CST 2007 [  確定  ] 正在啟動 udev: [  確定  ] ....中間省略.... 正在檢查檔案系統 Checking all file systems. [/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/hda1 fsck.ext3: No such file or directory while trying to open /dev/hda1 /dev/hda1: The superblock could not be read or does not describe a correct ext2 filesystem.  If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock:     e2fsck -b 8193   [失敗]   *** 檢查檔案系統時发生錯誤。 *** 系統將帶您進入 shell 模式; 然后重新开机 *** 當您離开 shell 時。 Give root password for maintenance (or type Control-D to continue):
注意到上面特殊字體的部分,既然已經出現了 INIT 的字样,這表示 domain-U 已經通過了核心偵測、 根目錄掛載等動作,且已經順利的在執行 /sbin/init 這個指令了,因此我們可以確信所有的 Xen 設定都是正確的, 可能发生的錯誤就在 /disk2/xen/xen.img 這個檔案內的配置了。你可能需要依據开机流程一個一個的去處理相關的錯誤喔! 最可能发生的就是在 domain-U 的 /etc/fstab 囉~
其他半虚拟化的安裝方式
由前一小節的泛用实例我們可以了解,如果 domain-U 的根目錄來源为复製自 domain-0 的話, 那麼我們必須要手動修改很多設定檔,非常的麻煩~ 既然如此,有沒有可能我們可以自行將安裝程序放入根目錄的建置呢?也就是說, 那個 /disk2/xen/xen.img 的內容其实就是經過安裝程序而來的,而不是經由复製的。 如此一來不就所有問題都解決了,而且新安裝的系統還是很乾淨的系統呢! 確实如此!目前 CentOS 5 提供一個好用的软件,那就是 virt-install, 你可以使用 virt-install -h 來察看可以使用的指令哩。
但是在开始底下的实例之前,你必須要知道幾點限制才行:
最簡單的安裝方式为复製 domain-0 的根目錄來給 domain-U 使用(就是前面的範例);
半虚拟化的安裝方式『並不支持使用光碟或 DVD 的安裝模式』;
半虚拟化僅可透過 http, ftp, nfs 等方式來安裝乾淨的 Linux 系統;
看到上頭的限制您應該会嚇一跳吧!怎麼不能用原版光碟安裝喔?沒錯~是這样! 使用原版光碟或者是原版光碟的 iso 檔案安裝時,僅有全虚拟化環境可以達到而已。 那你應該会問,我如何製作或者是取得安裝用的服务器呢?其实我們可以利用各大專院校的 FTP 網站即可啊! 不需要自行設定安裝服务器的。不過,如果你的環境並非學術网络的話,最好還是自行設定一下安裝服务器比較妥當。 为了每位不同所在處的朋友,所以底下我們先快速的講一講如何製作一部安裝服务器,然后再處理其他工作吧! ^_^
製作安裝服务器 (Installation Server)
如前所述,半虚拟化的 Xen 僅支持 NFS, HTTP, FTP 等网络方式安裝,並不支持原版光碟安裝的模式, 因此我們得要找到可提供安裝的主机才行。如果您在台灣的學術网络中, 那麼可以選擇國家高速网络中心或者是義守大學的 FTP 網站做为來源,舉例來說,如下網址就是一個案例:
http://ftp.isu.edu.tw/pub/Linux/CentOS/5.0/os/i386/
萬一你是一家企業呢?那最好使用內部的主机架設成为安裝服务器來安裝你的 domain-U 比較妥當。 以下鳥哥以 NFS 的方式來簡單說明一下建置 CentOS5 的安裝服务器囉。
選擇容量大于 5GB 以上的磁盘分割槽:
由于完整的 CentOS5 原版光碟含有好多的套件,至少也需要 3500MB 以上的容量來容納 DVD 碟內的所有資料。 但是鳥哥的主机當初沒有額外規劃擴充性的問題,因此就得要加掛硬碟啦! 鳥哥是將我的 CentOS5 原版光碟放置到俺的 /disk1/yum/centos5 目錄下的, 這個目錄为另外一個獨立的 partition ,關于 partition 的處理方法請自行參考基礎篇的說明,這裡不贅述了。
复製所有需要的套件:
先掛載 CentOS5 的光碟或 DVD 碟,然后直接复製即可:
[root@linux ~]# mount /dev/cdrom /mnt [root@linux ~]# mkdir -p /disk1/yum/centos5 [root@linux ~]# cp -a /mnt/* /disk1/yum/centos5 [root@linux ~]# umount /mnt
如果你是使用光碟的話,那麼上述的動作就得要進行六次,因为 CentOS5 共有六片光碟。 而且每片光碟內会有一些重复的檔案,因此系統会警告你『是否要覆蓋?』此時按下『y』去覆蓋即可。
建立安裝所需要的檔案關連性資料
一般來說,使用 yum 的系統在他 RPM 檔案所在的目錄下都会有一個名为 repodata 的目錄, 該目錄記錄著檔案的相關性以及一些基本的安裝資訊。但因为我們將資料复製到自己的主机上, 因此一些基本資料可能就不会吻合,所以我們需要重新製作出這個目錄才行。 製作這個目錄必須要安裝 createrepo 套件,預設的情況下是不会安裝該套件的, 因此我們可以這样做:
[root@linux ~]# yum install createrepo # 就是安裝某個套件而已,這個套件就是用在製作 repodata 目錄的。   [root@linux ~]# cd /disk1/yum/centos5 [root@linux centos5]# cp repodata/comps.xml /tmp # 先將某些安裝資訊給他复製出來,準備利用。   [root@linux centos5]# rm -r repodata # 原本的資料不需要了,將他刪除掉再說。   [root@linux centos5]# createrepo -g /tmp/comps.xml . # 重新建立好 repodata 目錄囉!
啟動与設定 NFS 檔案系統
接下來就是設定 NFS 啦!为什麼要選擇 NFS 呢?因为他夠簡單!哈哈!
[root@linux ~]# vi /etc/exports /disk1/yum/centos5      *(ro) # 先設定好 NFS 所要分享的目錄所在   [root@linux ~]# chcon -t public_content_t -R /disk1/yum/centos5/ # 確定一下你的這個目錄是可以透過 SELinux 來管理分享的!   [root@linux ~]# /etc/init.d/portmap start [root@linux ~]# /etc/init.d/nfs start [root@linux ~]# /etc/init.d/nfslock start # 將服務給他啟動吧!   [root@linux ~]# showmount -e localhost Export list for localhost: /disk1/yum/centos5 *
如果可以看到最終的結果,那就表示你的 NFS 製作妥當了!
最終可以知道我們是:
安裝協定使用 NFS
主机名稱为你這部主机的 IP, 注意,不要使用 127.0.0.1 來安裝!
NFS 的路徑为 /disk1/yum/centos5
好了,开始來安裝乾淨的 Linux 系統在 domain-U 上面吧!
利用 virt-install 指令安裝乾淨的 CentOS
有了 NFS 安裝服务器后,再來我們使用 virt-install 來安裝囉~ 安裝的方式非常的簡單,你可以這样做即可:
1. 先建立我們所需要的大檔案來作为 domain-U 的磁盘: [root@linux ~]# dd if=/dev/zero of=/disk2/xen/centos5.virt.img \ > bs=1M count=4096 [root@linux ~]# chcon -t xen_image_t /disk2/xen/centos5.virt.img # 我建立了一個 4GB 大小的檔案來作为安裝之用!這個容量應該是夠用的! ^_^ # 比較需要注意的是,如果你有啟動 SELinux 時,請注意修改檔案的安全內容。   2. 开始使用 virt-install 來安裝吧! [root@linux ~]# virt-install -n centos5_virt -r 256  \ > -f /disk2/xen/centos5.virt.img --nographics \ > -l nfs:192.168.1.254:/disk1/yum/centos5 # -n :后面接你的 domain-U 的名稱,這個名稱的設定檔会被主動建立在 /etc/xen 底下 # -r :后面接你要給這個 domain-U 的内存,目前至少需要 256MB 才能夠執行 # -f :后面接的就是那個要給 domain-U 的大檔案囉! # --nographics :不使用圖形介面來安裝的意思; # -l :后面接安裝服务器的來源。安裝服务器的寫法为: #   NFS 時:   nfs:主机的IP:可以安裝的目錄 #   WWW 時:   http://主机的IP/实際的/完整目錄 #   FTP 時:   ftp://主机的IP/实際的完整目錄
如果一切順利的話,現在就能夠進入安裝畫面了!不過請注意,您的 domain-0 需要开放防火牆讓人家使用 NFS 喔! 否則你是無法順利安裝的啦! ^_^
接下來的畫面鳥哥是以 pietty 連上 domain-0 之后進行畫面擷取的,因为 Xen 的終端机介面顯示本來就怪怪的, 加上鳥哥所使用的畫面較小,所以您会发現怎麼字體都会跑掉~真是不好意思~ 總之,跟一般文字介面的安裝方式是一模一样啦!讓我們开始來看看圖示吧!
·  1. 語系的選擇:
如下圖所示,由于終端机模式僅有英文顯示字元,因此我們直接選擇『English』吧。 請注意使用 [Tab] 按鍵在各個元件之間跳動喔!
圖 3-1、先選擇語系資料
·  2. 關于 domain-U 安裝時的 IP 設定:
一般 IP 設定有 DHCP 与手動設定,如果你的主机所在環境具有 DHCP 服务器,且你的安裝服务器有針對內部網域开放防火牆時, 那为了方便,你可以直接使用 DHCP 協定即可,如下圖所示:(一般來說,鳥哥都会建議先取消 IPv6 的支持)
圖 3-2、設定 IP 取得为 DHCP 或者是手動直接給予 (Manual)
萬一你的主机所在環境沒有提供 DHCP 的服務時,那你的 IP 就得要手動給予了。在上圖當中請選擇『 Manual configuration 』項目,則会出現如下圖所示的情況,請填入區域网络的 IP 參數吧。 在本例中鳥哥的 domain-U IP 設定为 192.168.1.31/255.255.255.0 囉~
圖 3-2-1、手動設定 IP 的示意圖
·  3. 歡迎畫面与分割槽警告訊息:
接下來僅是說明歡迎的畫面,還有,因为我們使用的檔案会被視为『一顆硬碟』而不是一個 partition , 所以会有警告訊息說明要注意的地方而已。請留意,在預設的情況下, 模拟的硬碟代號为 /dev/xvda 喔!
圖 3-3、只是歡迎畫面!
圖 3-4、只是一個警告訊息,直接 OK 過去!
·  4. 开始進行磁盘分割的動作:
進入安裝模式后,這個地方最重要!我們刚刚建立了一個 4GB 的檔案作为硬碟之用,而這顆模拟硬碟的磁盘为 /dev/xvda, 我們知道在安裝的時候最重要的兩個 partition 为 / 与 swap ,所以就得要進行底下的分割咯! 如下所示,首先我們必須要建立一個客戶自訂的分割情況 (Create custom layout), 請使用 [Tab] 按鍵選擇如同下圖的說明:
圖 3-5、決定分割的模式,請使用 Custom layout
接下來進入到下圖之后,我們必須要建立根目錄 (/) 与虚拟内存 (swap),在這裡我設定根目錄为 3200MB, 至于 swap 則設定 256MB。建立的方法依序如下:
圖 3-6、進入分割畫面的情況
圖 3-7、依照圖中的說明,分別選擇各項參數
圖 3-8、另外一個 Swap 的設定方法
若前兩個畫面設定妥當后,最后你会看到如下的圖示,檢查看看是否一個根目錄与一個 swap 呢? 若沒問題的話,就按下 [OK] 吧!
圖 3-9、最終的分割表狀態
圖 3-10、只是警告虚拟内存比实體内存少,不用理会他!
·  5. boot loader 以及开机選項
設定到此,我們可以开始來決定开机管理程序的相關動作了。首先,當然一定需要 boot loader 啊! 所以如同下圖,我們要使用 Grub 囉!
圖 3-11、使用 grub 作为开机選單
在預設的情況中,domain-U 所使用的終端介面 (console) 为利用 xvc0 這個裝置來處理的, 這個部分預設会出現,所以不必理会他!
圖 3-12、domain-U 所使用的終端介面裝置
圖 3-13、是否需要开机選單密碼?不需要吧?
圖 3-14、選單只有一個,所以就不用改了。
圖 3-15、當然是安裝在 /dev/xvda 的 MBR 中!
·  6. 网络設定參數:
再來就是网络參數的設定部分,鳥哥建議您可以先隨便設定,未來要使用這個 domain-U 時, 再詳細的設定即可。在這裡鳥哥都使用預設值來指定而已。
圖 3-16、使用預設的 DHCP 与 IPv4 即可
圖 3-17、主机名稱也先不要設定,使用 DHCP 預設值
·  7. 時區与 root 密碼:
因为我們使用台灣時區,所以這裡要仔細的選擇喔!
圖 3-18、時區請務必選擇台灣啊!
圖 3-19、root 密碼要設定,不要隨便啊!
·  8. 套件安裝的選擇以及实際开始安裝:
由于我們希望的 domain-U 是用來進行服务器架設的,所以這裡鳥哥選擇 Server 而已, 如下圖所示。整體安裝起來差不多是 1.x GB 的容量而已喔!
圖 3-20、僅選擇 Server 的安裝設定
圖 3-21、僅是分析套件的相依性畫面而已,請等待!
圖 3-22、這個是通知訊息,告知你的選擇將会被記錄到該處
圖 3-23、看到否,开始安裝的整個過程
圖 3-24、安裝完畢,請重新开机吧!
圖 3-25、重新开机完畢后,出現等待登入的畫面示意
整個過程非常的簡單,就如同你在安裝一部文字介面的 Linux 主机一般。 從开始安裝到結束的整個過程中,花費比較多時間在設定項目,完整安裝差不多 10 分鐘就搞定了。 這還是因为鳥哥使用舊型主机來安裝的,鳥哥曾以新 P4 主机來安裝過這一整個流程, 开始安裝到結束不到 3 分鐘,实在是非常的快速啊!
接下來你可以查閱一下 /etc/xen/centos5_virt 顯示的內容, 該檔案是由 virt-install 主動幫我們建立的,我的資料如下所示:
[root@linux ~]# cat /etc/xen/centos5_virt # Automatically generated xen config file name = "centos5_virt" memory = "256" disk = [ 'tap:aio:/disk2/xen/centos5.virt.img,xvda,w', ] # 仔細瞧,发現 xvda 了嗎?就是這裡決定的啦!   vif = [ 'mac=00:16:3e:2f:4a:ef, bridge=xenbr0', ] # 可以直接指定模拟網卡的实體卡號以及使用的橋接器   uuid = "9a968f71-c36b-d48a-5a03-304bb41a639f" # 甚至可以直接定義裝置的 uuid 號碼呢!   bootloader="/usr/bin/pygrub" # 沒有核心了!而是利用 domain-U 自己的核心來开机的! # 要使用 domain-U 的核心來开机,就得用這個設定項目才行!   vcpus=1 on_reboot   = 'restart' on_crash    = 'restart'
接下來請开始使用 xm create -c centos5_virt 來啟動這個乾淨無暇的 domain-U 囉!
CentOS5 所提供的一個实例
雖然 virt-install 已經有夠好用了,不過在某些情況下還是無法執行的。首先, virt-install 要求 domain-U 在安裝時一定要給予 256MB 的内存,如果你的内存少于 256MB 時,肯定無法執行 virt-install ~ 再者在 SELinux 啟動的情況下,可能還会有無法執行 virt-install 的情況发生。 還好, CentOS5 提供了一個可以驅動安裝程序的核心給我們來進行安裝過程! 接下來我們將以 CentOS5 官網所提供的 kernel file 來進行安裝的实作喔!
其实整個過程挺簡單的,最重要的就是必須要使用 CentOS5 官網所提供的核心与虚拟磁盘映像檔, 有這兩個東西就能夠處理安裝的程序了。底下我們就一步一步來處理這個設定吧!
·  0. 建立网络連線所需的 DHCP 服务器
在預設的情況下 Xen 使用的网络環境为利用橋接方式 (bridge) 來連結实際的网络環境。 但在這種模式底下 domain-U 在安裝時,取得 IP 的方式主要为利用 dhcp 協定, 使用手動的方式來設定 IP 卻是不可行的方案!除非要轉成利用 NAT 的模式來處理。 假設我們都先不更改 Xen 的預設環境,那麼我們就得要針對 Xen 的网络模式來建立一部 dhcp 服务器了。
詳細的 dhcp 服务器建置方法請參考服务器架設篇的介紹, 鳥哥在這裡僅利用一些時間很快的將整個流程處理一下吧! 需要注意的是,如果你的網域內已經有一個 public 的 dhcp 了,那麼您在建置這個給 domain-U 用的 DHCP 時, 特別留意不要影響到其他的 dhcp 主机喔!鳥哥這裡假設我的 domain-U 的 MAC 为 00:16:3E:00:00:11 , 所以有針對這個 MAC 來處理喔!
1. 先檢查你的 domain-0 是否有安裝 dhcp 呢? [root@linux ~]# rpm -qa | grep dhcp dhcp-3.0.5-5.el5 # 如果沒有出現上述的套件時,請自行使用 yum install dhcp 吧!   2. 修改 DHCP 的設定檔 [root@linux ~]# vi /etc/dhcpd.conf ddns-update-style none; subnet 192.168.1.0 netmask 255.255.255.0 {      option routers                  192.168.1.254;      option subnet-mask              255.255.255.0;      option domain-name              "xen.test";      option domain-name-servers      168.95.1.1;      range 192.168.1.20 192.168.1.25;      default-lease-time 21600;      max-lease-time 43200;      host dic1 {           hardware ethernet 00:16:3E:00:00:11;           fixed-address 192.168.1.31;      } } # 鳥哥就是利用那個 hardware ethernet 來控制某個網卡來源的要求的啦!   3. 啟動与觀察 [root@linux ~]# /etc/init.d/dhcpd start [root@linux ~]# netstat -tlunp Proto Recv-Q Send-Q Local Address  Foreign Address State  PID/Program name udp        0      0 0.0.0.0:67     0.0.0.0:*              22285/dhcpd # 重點在那個 port 67 囉~   4. 防火牆的處理! [root@linux ~]# iptables -I INPUT -p udp --dport 67 -j ACCEPT [root@linux ~]# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 重點在开放用戶端對于主机的連線囉!這個要設定好!
如此一來 DHCP 主机就設定好了,簡單吧!再來开始其他的處理吧!
·  1. 建立 domain-U 所需要的虚拟磁盘
同样的,利用 dd 這個指令來建立他吧!鳥哥依舊將我的映像檔放置到 /disk2/xen 底下去。
[root@linux ~]# dd if=/dev/zero of=/disk2/xen/centos5.office.img  \ > bs=1M count=3072 oflag=direct [root@linux ~]# chcon -t xen_image_t /disk2/xen/centos5.office.img [root@linux ~]# ll -Z /disk2/xen/centos5.office.img -rw-r--r--  root root user_u:object_r:xen_image_t    centos5.office.img
除了要建立這個大檔案之外,不要忘記那個可愛又可怕的 SELinux 類型也需要同時變更! 這點大家都很容易忘記!包括鳥哥在內~ @_@
·  2. 設定終端机介面
這個動作在前面的小節中已經講過了,這裡特別再列出來,因为如果你沒有作這個動作, 很可能在 domain-U 的地方会讓您無法使用 console 的方式登入 domain-U ,屆時您可能需要使用類似 ssh 的网络連線方式才能夠登入 domain-U 哩! 而且,如果沒有作這個動作,你的 domain-0 則会一直在 /var/log/messages 出現一些錯誤~实在討厭~ 实作的方法很簡單:
[root@linux ~]# vi /etc/inittab # 大約在第 51 行的地方加入底下特殊字體的部分: 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav # 意思是使用 agetty 建立 xvc0   [root@linux ~]# init q # init q 這個指令可以讓 /etc/inittab  的設定立刻生效而不需要重新开机!   [root@linux ~]# ln -s /dev/console /dev/xvc0
·  3. 下載 CentOS5 用來安裝 Xen 的核心与映像檔
CentOS5 官網提供的可安裝 Xen 核心在底下的連結,分为 i386 与 x86_64 版本:
i386:http://mirror.centos.org/centos/5/os/i386/images/xen/
x86_64:http://mirror.centos.org/centos/5/os/x86_64/images/xen/
鳥哥使用的是 i386 的版本。下載与處理的方式可以這样做:
[root@linux ~]# cd /boot [root@linux boot]# wget  \ > http://mirror.centos.org/centos/5/os/i386/images/xen/vmlinuz [root@linux boot]# wget  \ > http://mirror.centos.org/centos/5/os/i386/images/xen/initrd.img # 先下載這兩個檔案下來,为了方便記憶,所以鳥哥習慣將檔名修改一下:   [root@linux boot]# mv vmlinuz centos5_xen_vmlinuz [root@linux boot]# mv initrd.img centos5_xen_initrd.img [root@linux boot]# restorecon /boot/* # 最后一個動作 (restorecon) 在處理 SELinux 的問題啦!
所以我們已經取得 CentOS5 官網所提供的核心与映像檔了!準備處理設定檔囉~
·  4. 撰寫『安裝用』設定檔
接下來我們得先就可安裝的核心來進行設定檔的編寫。我這裡比較有趣的地方在于幾個部分:
我具有 NFS 安裝服务器,該服务器 IP 为 192.168.1.254,路徑为 /disk1/yum/centos5
domain-U 在安裝時的 MAC 假設为 00:16:3e:00:00:11,且透過 DHCP 取得 IP;
使用 kickstart 方式來安裝,而 kickstart 的設定檔放置到安裝服务器的 /disk1/yum/centos5/ks.xen.centos5.txt 內
什麼是 kick start 呢?我們刚刚在前一小節使用 virt-install 安裝時,不是有很多的選擇畫面嗎? 所謂的 kick start 就是將所有的選擇項目都寫入某一個設定檔,如此一來,就可以免除手動去挑選的困擾了。 因此,我們会有兩個檔案需要建立。首先,我們建立 Xen 的設定檔,檔案如下:
[root@linux ~]# vi /etc/xen/centos5_xen_install kernel  = "/boot/centos5_xen_vmlinuz" ramdisk = "/boot/centos5_xen_initrd.img" extra   = "text ks=nfs:192.168.1.254:/disk1/yum/centos5/ks.xen.centos5.txt" name    = "centos5_xen_install" memory  = "128" disk    = [ 'file:/disk2/xen/centos5.office.img,xvda,w', ] vif     = [ 'mac=00:16:3e:00:00:11, bridge=xenbr0', ] vcpus   = 1 on_reboot = 'destroy' on_crash  = 'destroy' # 上面比較特別的只有那個 extra 而已,那個是核心的額外參數說明!
我們還得建立 kick start 的設定檔內容。其实你的 CentOS 本來就有 kickstart 的設定檔了, 詳情請參考你自己的 /root/anaconda-ks.cfg 檔案,您就曉得囉!更詳細的 kickstart 請先參考如下網頁:
http://freesf.tnc.edu.tw/docs/rh/rhl-cg-zh_TW-9/ch-kickstart2.html
鳥哥這裡僅作個簡單的設定而已:
[root@linux ~]# vi /disk1/yum/centos5/ks.xen.centos5.txt # 1. 与安裝有關的設定,尤其是 NFS 的設定最要緊! install nfs --server=192.168.1.254 --dir=/disk1/yum/centos5   # 2. 語系的支持以及鍵盤對應表 lang en_US.UTF-8 langsupport --default en_US.UTF-8 zh_TW.BIG5 zh_TW.UTF-8 zh_HK.UTF-8 \ zh_CN.GB18030 en_US.UTF-8 keyboard us   # 3. 网络設定,記住,要与 NFS 安裝服务器同網域才行! network --device eth0 --bootproto dhcp   # 4. 密碼与防火牆還有 SELinux 与時區的相關設定 rootpw --iscrypted $1$NGE.r9ik$D9iqc2bfdpi1DYvqC2CwP. firewall --enabled --port= authconfig --enableshadow --enablemd5 selinux --enforcing timezone Asia/Taipei   # 5. 开机管理程序,注意那個 driveorder 項目,我們的硬碟是虚拟的喔! bootloader --location=mbr --driveorder=xvda --append="console=xvc0" reboot   # 6. 磁盘分割表的操作以及安裝的套件資料 clearpart --all --initlabel --drives=xvda part /boot --fstype ext3 --size=100 --ondisk=xvda part / --fstype ext3 --size=2048 --ondisk=xvda --asprimary part swap --size=512 --ondisk=xvda %packages @core # 如果你曾經安裝過 Linux ,那麼上面的選項對你來說,應該不難了解。 # 比較特殊的是 rootpw 那個項目,鳥哥是由 /etc/shadow 复製加密的密碼來的, # 如此則 root 的密碼也設定妥當,而且是加密過的資料。 # 在本案例中的 root 密碼为 123456789 喔!   [root@linux ~]# chcon -t public_content_t \ > /disk1/yum/centos5/ks.xen.centos5.txt
如此則將兩個設定資料給他設定好了。接下來就是進行安裝的流程喔~
·  5. 实際安裝過程
实際安裝真是太簡單了!直接啟動 Xen 即可啊!請下達:『xm create -c centos5_xen_install』吧! 然后在出現一小段時間的 IP 偵測、硬件偵測、套件資料分析等畫面后,就会主動的進入实際安裝套件的畫面! 接下來我們啥事都不需要擔心,所有的安裝過程 kickstart 系統都会幫我們搞定的。 实際上,你要做的就只是...喝茶看報紙吧!不過如果你的 domain-0 系統非常的高效能, 老实說,喝茶的時間实在是不夠用~ @_@,因为可能 3 分鐘就安裝完畢了~ ^_^
kickstart 就是這麼好用!你可以將這一組設定放在你的安裝服务器上面,未來想要安裝一模一样的環境時, 直接在安裝的過程載入這個檔案即可,我們不需要還手動挑選有的沒有的啦! ^_^
·  6. 修改成为可以正常开机的設定檔
在上述第四個步驟時,我們所建立的 /etc/xen/centos5_xen_install 是專門用來安裝用的設定檔。 既然已經安裝妥當了,這個檔案就不能继續的使用,否則每次都会重复的進入安裝的畫面, 会一直不斷的重新安裝....
所以接下來我們得要修改一下設定檔才行。設定檔可以改成底下的模样喔:
[root@linux ~]# vi centos5_xen_run name    = "centos5_xen_run" memory  = "128" disk    = [ 'file:/disk2/xen/centos5.office.img,xvda,w', ] vif     = [ 'mac=00:16:3e:00:00:11, bridge=xenbr0', ] vcpus   = 1 on_reboot = 'restart' on_crash  = 'restart' bootloader = "/usr/bin/pygrub" # 其实就是加入那個 pygrub 的執行檔而已。該檔案的作用就是 # 作为一個开机載入器來載入 domain-U 开机所需使用的核心与虚拟磁盘。
接下來如果想要使用刚刚完成的 domain-U 來登入時,請使用:『 xm create -c centos5_xen_run 』來啟動吧! 啟動的畫面如下所示,你会发現,怎麼透過終端机可以跟在螢幕前面一個模样!還能看到 grub 哩! 真是有夠棒的!
圖 3-26、啟動 domain-U 的畫面
選擇好你所需要的开机選項后,嘿嘿!就能夠在 pietty 之類的環境完整的操作你的 domain-U 了! 說实在的,用在教學上,实在是很棒的一個好主意!
參考資料
註1:Apache 是一種 WWW 服务器软件,虚拟主机 (virtual host) 的概念可以參考底下連結:
http://linux.vbird.org/linux_server/0360apache.php#www_adv_virtual
註2:鳥哥的著作之一,Linux 基礎篇,网络文件請參考:
http://linux.vbird.org/linux_basic
註3:鳥哥的著作之一,Linux 服务器架設篇,网络文件請參考:
http://linux.vbird.org/linux_server
註4:多重开机,一部主机內有多種操作系统,可在开机的時候選擇想要執行的 OS。請參考:
http://linux.vbird.org/linux_basic/0156installfc4.php#moreOS
註5:請參考 Xen 的 Users' Manual version 3.0:
http://www.cl.cam.ac.uk/research/srg/netos/xen/readmes/user/user.html
鳥哥這裡的備份:http://linux.vbird.org/linux_security/xen/user.pdf 也有簡體中文版:http://www.linuxsir.org/main/?q=node/188
註6:關于硬件、核心与應用程序的相關性請參考:
http://linux.vbird.org/linux_basic/0110whatislinux.php#whatislinux_os
http://linux.vbird.org/linux_basic/0320bash.php#bash_what
註7:關于圖示的說明可以參考彥明兄的一篇文章:
http://linux.vbird.org/somepaper/20070214-xen_on_sles_10.pdf
註8:關于更多的开机流程与相關資訊,可以參考底下網頁:
http://linux.vbird.org/linux_basic/0510osloader.php

其他參考資料:
axa 網友在酷學園的一篇 Xen 說明,雖然是針對 Gentoo 版本,不過很值得一看:
http://phorum.study-area.net/printview.php?t=35725
The Xen virtual machine monitor:http://www.cl.cam.ac.uk/research/srg/netos/xen/index.html
Xen Clustering with CentOS 5:http://meshier.com/2007/06/13/xen-clustering-with-centos-5/
Xen 的网络模拟情況:http://wiki.xensource.com/xenwiki/XenNetworking
CentOS 5 的 Xen 範例:http://wiki.centos.org/HowTos/Xen/InstallingCentOSDomU
YHTSAI的部落格:http://www.yhtsai.idv.tw/blogs/index.php?blog=4
Fedora Xen Quick Start:http://fedoraproject.org/wiki/FedoraXenQuickstartFC6
安裝 Windows 在 Linux 下:http://linux.vbird.org/linux_security/xen/xen_install_windows.pdf
Xen 的其他詳細解說:http://www.lslnet.com/linux/f/docs/linux-5520.htm
一些關于网络的設定方式:http://linux.chinaunix.net/bbs/redirect.php?tid=910815&goto=lastpost
http://www.debian-administration.org/articles/360
http://phorum.study-area.org/index.php/topic,52293.msg266975.html