Xen 初學者指南

       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



       
 0、本文約定;
虛擬平臺是指能支持運行Xen的真實安裝的操作系統;
虛擬操作系統:是指在虛擬平臺上安裝和虛擬運行的操作系統;
比如我在Slackware 中安裝了Xen,那Slackware就是虛擬平臺,通過虛擬平臺就可以虛擬其它操作系統了;比如通過Slackware來虛擬Debian、Fedora ... ...

1
、什麼是Xen;
Xen 是一個開放源代碼的para-virtualizing虛擬機(VMM),或“管理程序 ”,是爲x86架構的機器而設計的。Xen 可以在一套物理硬件上安全的執行多個虛擬機;Xen是基於內核的虛擬程序,它和操作平臺結合的極爲密切,所以它佔用的資源最少。
什麼是虛擬機呢?可能大家知道VMWARE吧,是的,Xen就是類似這樣的程序,比如我們可以在Fedora 上虛擬安裝和使用Slackware、Debian、Gentoo ... ... 等發行版。因爲Xen是基於內核的,相對VMWARE 來說,它佔用的系統資源也就是VMWARE的百分之幾左右。Xen是不是更有優勢呢?只有您實踐了才知道。這也是我寫本文的最主要原因;

1.1 Xen
的特性;
虛擬機的性能更接近真實硬件環境)
在真實物理環境的平臺和虛擬平臺間自由切換)
在每個客戶虛擬機支持到 32個虛擬CPU,通過 VCPU熱插拔)
支持PAE指令集的x86/32, x86/64平臺
通過Intel 虛擬支持VT的支持來用虛擬原始操作系統(未經修改的)支持(包括Microsoft Windows)
優秀的硬件支持.支持幾乎所有的Linux設備驅動

1.2 Xen
的應用範圍;
服務器整合:在虛擬機範圍內,在一臺物理主機上安裝多個服務器, 用於演示及故障隔絕;
   無硬件依賴:允許應用程序和操作系統對新硬件的移值測試;
   多操作系統配置:以開發和測試爲目的,同時運行多個操作系統;
   內核開發:在虛擬機的沙盒中,做內核的測試和調試,無需爲了測試而單獨架設一臺獨立的機器;
   集羣運算:和單獨的管理每個物理主機相比較,在VM級管理更加靈活,在負載均衡方面,更易於控制,和隔離;
   爲客戶操作系統提供硬件技術支持:可以開發新的操作系統, 以得益於現存操作系統的廣泛硬件支持,比如Linux;

1.3 Xen
的操作系統支持和硬件支持;

2
、Xen的一點理論基礎;
基於Xen的操作系統,有多個層,最底層和最高特權層是 Xen程序本身。Xen 可以管理多個客戶操作系統,每個操作系統都能在一個安全的虛擬機中實現。在Xen的術語中,Domain由Xen控制,以高效的利用CPU的物理資源。每個客戶操作系統可以管理它自身的應用。這種管理包括每個程序在規定時間內的響應到執行,是通過Xen調度到虛擬機中實現。
當Xen啓動運行後,第一個虛擬的操作系統,就是Xen本身,我們通過xm list,會發現有一個Domain 0的虛擬機。Domain 0 是其它虛擬主機的管理者和控制者,Domain 0 可以構建其它的更多的Domain ,並管理虛擬設備。它還能執行管理任務,比如虛擬機的體眠、喚醒和遷移其它虛擬機。
一個被稱爲xend的服務器進程通過domain 0來管理系統,Xend 負責管理衆多的虛擬主機,並且提供進入這些系統的控制檯。命令經一個命令行的工具通過一個HTTP的接口被傳送到xend。

3
、Xen的安裝;
在寫本文時,Xen的當前最新版本是xen-3.0.1,它基於的內核版本是2.6.12.6的。您可以根據自己的操作系統的情況來選擇一種安裝方式,適合您的就是最好的;

3.1
安裝Xen的準備工作;
擁有 GRUB引導的Linux做爲安裝平臺,還要編譯工具,比如gcc、binutils 及make和automake等;開發庫有zlib和python-dev等;
具體明細請參閱: 《Xen v3.0 用戶手冊》
由於Xen用Python 開發的,所以Python 當然也是必不可少的。如果您是新手,我建議您用自己所用的操作系統軟件包管理工具來安裝這些軟件包。

3.2
在Redhat/Fedora 操作平臺上的安裝;
在Fedora/Redhat平臺上安裝比較簡單,您可以通過yum 來在線安裝Xen和支持Xen的內核;因爲Fedora/Redhat已經提供對Xen的支持了;Fedora/Redhat 提供的Xen內核支持比較高;不過就目前我的測試來看好象經常會機器重啓,存在的問題可能是桌面環境造成的,比如GNOME桌面,打開就有重啓的現象,也可能是Fedora/Redhat提供的Xen內有BUG;
安裝Xen及支持Xen的請參考:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
對於Fedora 4.0及Redhat和Fedora 5.0類似;現在Yum的源上都有Xen和支持Xen的內核包;

3.3
通過Xen的二進制包來安裝(幾乎適用所有的Linux發行版);
通過Xen的二進制軟件包來安裝,這應該是通用的,幾乎適合所有的Linux操作系統。由於二進制所是已經編譯好的,我已經在Slackware 平臺上用這種方法來安裝,還是成功的。另外etony兄也在Debian上安裝成功;
下載好後,就解壓安裝,我們還是以支持x86_32構架機器的xen-3.0.1-install-x86_32.tgz爲例:
[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh
判斷是不是安裝好了,請查看/boot目錄,會發現有很多文件名帶有xen字樣的文件,另外在/lib/moudules中也會發現有支持xen的內核模塊;另外再看一看是否有/etc/xen這個目錄。我想應該是有的。

3.4
通過Xen的源碼包編譯安裝(僅供參考);
通過Xen的二進制包來安裝,可能有時內核不太適應我們的需要,這時我們要通過Xen的源碼包來安裝。通過自己編譯來安裝Xen及支持Xen的內核;Xen的源碼包,您可以到 http://www.xensource.com/downloads去下載。文件名帶有 xen-3.0.1-src字樣的,比如 xen-3.0.1-src.tgz。

3.41
編譯原理;
通過Xen的源碼包編譯,其實也沒有什麼神祕的。在Xen的源碼包中提供了一些內核補丁和內核配置文件等。當我們執行編譯命令時,首先編譯的是Xen程序本身,然後是編譯內核 。在編譯內核時,程序會自動判斷是否有內核源碼 ,xen-3.0.1支持的內核是2.6.12.6,如果在xen的解壓目錄下沒有,他就會自動內核的官方站 http://www.kernel.org 下載 linux-2.6.12.tar.bz2。然後就是自動解壓併爲此內核打補丁。然後系統會根據指令要求,然後採用相應的內核配置文件,或配置內核進行編譯。

3.42
編譯過程簡說;
第一步:解壓軟件包,查看Xen源碼包所帶的文件;
[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls
COPYING Config.mk README docs install.sh patches xen
ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools
我們解壓xen-3.0.1-src.tgz 後,進入解壓目錄,會看到以上的文件或文件夾。patches是內核的補丁包,linux-2.6-xen-sparse是支持Xen的內核目錄樹,值得注意的是內核的配置文件就在這個目錄中;
[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64
看到上面所列出的內核配置文件了吧,我們可能會發現文件名帶有xen0字樣的和xenU字樣的兩類文件。在這兩類內核中,我們大多會修改的內核配置文件是運行xen的操作系統的內核配置文件,另一個是用於虛擬操作系統的內核配置文件;
xen0字樣的就是我們一般是用於我們運行xen的操作系統的內核,而xenU字樣的就是爲虛擬操作系統所提供的內核。另外還有x86_32和x86_64之分,這表示CPU的架構。
比如我們用的是x86架構32位的CPU,我們在編譯內核的時候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。
舉個例子:比如我的機器架構是x86_32位的,我安裝xen的操作系統是Slackware,我想在Slackware 虛擬Debian 、Gentoo、Fedora等操作系統。這時編譯虛擬平臺Slackware所用的內核的配置文件就是 xen0_defconfig_x86_32 ,而被虛擬平臺(Debian 、Gentoo、Fedora等操作系統)所用的內核就是 xenU_defconfig_x86_32 。
弄明白內核配置文件有何用?我們能明白xen在編譯過程中用了哪些內核配置文件,目的是我們在編譯過程中可以根據自己的需要來修改它,以編譯出適合我們需要的內核。
比如我們想讓Slackware 支持xen,並且還要支持NTFS文件系統;所以我們就要修改 xen0_defconfig_x86_32這個文件。找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
如果您想讓被虛擬的操作系統(Debian 、Gentoo、Fedora等)也支持NTFS文件系統,所以要在 xenU_defconfig_x86_32找出如下一行;
# CONFIG_NTFS_FS is not set
改爲
CONFIG_NTFS_FS=m
第二步:配置內核;
這一步有兩種方法,一個是直接修改內核配置文件,另一個是內核配置界面來配置;
方法一:通過修改內核配置文件;
Xen所帶的內核配置文件位於解壓目錄中的linux-2.6-xen-sparse/arch/xen/configs 。我們前面已經提到了相關配置文件的用途。請仔細看前一步的說明;
方法二:通過內核配置界面來配置;
[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig
第三步:編譯和安裝Xen;
[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

3.43
創建initrd文件;
有的系統需要initrd-XXXX.img或initrd.gz文件才能引導起來,如果您的系統用了支持xen的支持引導不起來,就要創建一個initrd-XXXX.img或initrd.gz的文件;請參考: 《Xen v3.0 用戶手冊》

3.44
關於xen0和xenU內核說明;
一般的情況下會在/boot目錄中有兩個與xen相關的內核,有的文件名帶有vmlinuz-XXXX-xen0字樣的,有的帶有vmlinuz-XXXX-xenU字樣的;比如:
[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
其實就是兩個與xen相關的內核,其它的都是這兩個內核文件的鏈接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用來引導虛擬平臺的,比如我們在Slackware上安裝Xen,那Slackware就是虛擬平臺;所以如果要讓Slackware的xen能運行起來,必須用xen相關的內核 ,也就是vmlinuz-2.6.12.6-xen0這個內核。而XenU字樣這個內核,是用來引導虛擬操作系統用的,我們在以後會提到它。

4
、引導XenLinux的GRUB配置;
一旦我們在Linux操作系統安裝好Xen後,這樣的系統應該被稱爲XenLinux。如何才能引導擁有Xen的Linux呢?這時我們要用到GRUB系統引導管理器。我們修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位於/boot/grub目錄中;

4.1
判斷系統所在的分區;
[root@localhost ~]# df -h
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 6.9G 4.9G 59% /

4.2
查看/boot目錄中xen相關的配置文件;
[root@localhost ~]# ls /boot
注意:我們前面已經說過了,xen提供了兩個內核,一個是虛擬平臺用的,也就是文件名帶有xen0字樣的;另一個帶有xenU字樣的,這是用於引導和支持虛擬操作系統用的。
什麼虛擬平臺,比如我們想用Slackware 的Xen虛擬Fedora、Gentoo .... 。那麼Slackware就是虛擬平臺,而Fedora、Gentoo... .. 是被虛擬的操作系統。Slackware是一個真實安裝在您的機器上的操作系統,它提供的是一個運行xen的環境。爲了讓Slackware能支持xen ,所以必須用於支持Xen的內核,也就是在/boot中有xen0字樣的文件。
如果您安裝了Xen,會在/boot中有兩個文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,

4.3
禁掉 TLS Libraries ;
[root@localhost ~]#mv /lib/tls /lib/tls.disabled
禁掉的理由,請查看: 《Xen v3.0 用戶手冊》

4.4
引導XenLinux的GRUB內容;
title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0
如果有inintrd-2.xxxx-xen.img或initrd.gz之類的文件才能引導起來系統,還要加一行;要以/boot中的initrd相關的文件爲準;
modules /boot/initrd.gz
注意:與傳統GRUB的定義有點不同,就是kernel 是用來定義Xen的,而Linux的內核及initrd映像是通過module 指令定義的;要仔細看好;

5
、Xen的配置和管理工具;
5.1 Xen的相關文件存放位置;
xen安裝後,文件放在什麼地方了呢?主要放在以下幾個目錄;
5.11 內核及xen自身存放於 /boot
安裝有xen的操作系統下的/boot目錄中,存放xen本身及支持xen的內核文件。比如文件名帶有xen0和xenU相關的文件;
5.12 內核模塊存放於 /lib/modules
內核模塊包括虛擬平臺支持xen的內核xen0的模塊,及支持虛擬操作系統所用的xenU的模塊,一般的情況下是在 /lib/modules下有兩個xen相關的目錄存放。一個是文件夾名帶有xen0字樣的,另一個是xenU字樣的;
5.13 xen的配置文件及守護程序的存放位置;
一般的情況下,Xen的配置文件存放於/etc/xen目錄。 比如 xend-config.sxp是用於配置網絡的,不過我們不必更改,用其默認的就能完成我們的需要。xmexample1 xmexample2是兩個示例性的配置文件。我們在配置引導被虛擬的操作系統時,這兩個文件可供參考;
Xen的服務器xend和xendomains啓動腳本,一般是位於/etc/init.d/目錄中,也就是/etc/init.d/xend ;/etc/init.d/xend負責啓動xend服務器,而/etc/init.d/xendomains負責第一個虛擬的系統及其它的Domains,也就是Domain 0 。
5.14 可執行命令存放於/usr/sbin
[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop
[root@localhost ~]#ls /usr/sbin/xm

5.2 Xen
服務器的啓動;
xend服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
啓動xendomains 服務器的啓動/停止/重啓/狀態查詢,請用下面的命令;一般的情況下,xend服務器啓動了,xendomains也會自動啓動。所以這個只是掌握一下就行了;
[root@localhost ~]# /etc/init.d/xend start 啓動xend,如果 xend沒有運行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在運行)
[root@localhost ~]# /etc/init.d/xend restart 重啓正在運行的 xend,如果xend沒有運行,則啓動
[root@localhost ~]# /etc/init.d/xend status 查看xend狀態
[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

5.3 Xen
管理工具xm;
我們前面提到Xen的可執行命令中,我們可能看到了一些以xen開頭的命令,您不妨嘗試一個一個的嘗試一下他們是做什麼用的;比如xend是服務器的開啓運行命令 ... ....
其中xm命令,就是管理Xen的最基本的工具;您可以通過xm --help 來獲得幫助;

    5.31 列出所有正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 450 1 r----- 5377.0
fc5 4 256 1 -b---- 0.1
列出所有正在運行的虛擬系統(也可以稱爲虛擬機);我們可以看到,一個名爲Domain-0的系統正在運行。Domain-0就是Xen本身,也可以稱爲虛擬平臺內存大小,而Domain-0負責提供其它虛擬操作系統的硬件環境,其它的系統都是基於Domain-0開始的,我們看到他的ID爲0就應該知道它的權限是至高無尚的。所佔用的內存是450M,不過這個是可以指定的。 虛擬的CPU個數是1個,運行狀態處於r,也就是run,正在運行中;運行時間是5377秒;
還有一個虛擬系統fc5,他的id是4,佔用內存256M,虛擬CPU個數是1個 ... ...

5.32
通過配置文件來引導被虛擬的操作系統;
[root@localhost ~]# /usr/sbin/xm create -c 虛擬操作系統的啓動配置文件
比如我們要啓動被虛擬的操作系統Fedora Core 5.0 ,我們要寫一個啓動Fedora的配置文件,比如是fc5vm.cfg。然後就可以通過下面的命令來引導Fedora了;
[root@localhost ~]# /usr/sbin/xm create -c fc5vm.cfg

5.33
從終端或控制檯登錄正在運行的虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm console 正在運行的虛擬操作系統的Name或ID;
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 512 1 r----- 5561.9
fc5 4 256 1 -b---- 0.2
[root@localhost ~]# /usr/sbin/xm console fc5

5.34
存儲正在運行的虛擬操作系統的狀態及喚醒虛擬操作系統;
[root@localhost ~]# /usr/sbin/xm save
[root@localhost ~]# /usr/sbin/xm restore
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm restore fc5run.save
[root@localhost ~]# /usr/sbin/xm console fc5

5.35
停止正在運行的虛擬操作系統/激活停止的虛擬操作系統
[root@localhost ~]# /usr/sbin/xm pause
[root@localhost ~]# /usr/sbin/xm unpause
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm pause 2
[root@localhost ~]# /usr/sbin/xm unpause 2

5.36
調整虛擬平臺/虛擬操作系統的佔用內存
我們可以調整正在運行中的虛擬平臺(Domain-0)所佔內存大小及虛擬操作系統所佔用的內存大小;
[root@localhost ~]# /usr/sbin/xm mem-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm mem-set 2 128

5.37
關閉被虛擬的系統
[root@localhost ~]# /usr/sbin/xm shutdown 虛擬操作系統的Name或DomID
[root@localhost ~]# /usr/sbin/xm destroy 立即停止虛擬的系統 (重要);
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm shutdown fc5

[root@localhost ~]# /usr/sbin/xm shutdown 2

[root@localhost ~]# /usr/sbin/xm destroy 2

5.38
調整虛擬平臺及虛擬操作系統的虛擬CPU個數;
[root@localhost ~]# /usr/sbin/xm vcpu-set
舉例:
[root@localhost ~]# /usr/sbin/xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 458 1 r----- 260.3
fc5 2 256 1 ------ 6.5
[root@localhost ~]# /usr/sbin/xm vcpu-set 2 4

5.39
查看虛擬系統運行的狀態;
[root@localhost ~]# xm top

[root@localhost ~]# xentop

6
、虛擬操作系統的文件存儲系統;
我們虛擬的系統應該有一個存儲的地方,也就是文件系統。被虛擬的系統能安裝和運行在哪些文件系統上呢?能安裝和運行在一個實際的物理分區上,一個映像文件中,或NFS等網絡文件系統中;

6.1
以實際物理硬盤做爲虛擬操作系統文件系統;
以實際物理硬盤分區做爲虛擬操作系統的文件系統,要經過硬盤分區,創建文件系統流程;

6.11
準備物理分區及創建文件系統;

6.12
在物理分區上構建操作系統;
構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:《通過chroot 構建Linux操作系統概要》
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:
您可以直接下載您喜歡的操作系統,解壓後,然後掛載映像文件,然後把映像文件的內容都拷到物理分區中就好了。不過還得做一點小小的修改,比如您下載系統映像文件中的/etc/fstab等文件。要根據您的引導的虛擬操作系統中定義的虛擬映射點來改。

6.13
虛擬操作系統的引導文件中關於文件系統的定義;
如果您的硬盤有一定的空間,就可以把被虛擬的操作系統安裝在硬盤的實際物理分區中,當然您首先得準備一個硬盤分區。然後格式化成Linux的文件系統,比如ext3或reiserfs 等;然後是在這個分區上構建您想要虛擬的操作系統,最後纔是寫虛擬操作系統的引導配置文件,在配置文件中,要用phy:來指定。
比如:
disk = ['phy:hda7,sda1,w']
中文意思就是:
disk=['phy:分區,映射點,w']
這行是什麼意思呢?就是表示被虛擬的操作系統安裝在/dev/hda3,我們要把hda3硬盤分區虛擬映射到/dev/sda1,並且是可讀可寫的;在這裏要值得注意的是虛擬平臺正在使用中的分區不能做爲是映射點。
比如我在Slackware是位於/dev/hda6的虛擬平臺,也就是真實運行的操作系統,我想用它來虛擬位於/dev/hda7分區的Fedora。所以我不能把/dev/hda6做爲hda7的映射點。也就是下面一行是錯誤的:
disk = ['phy:hda7,hda6,w']
如何定義映射點,其實也比較好辦,只要符合Linux設備的規則就可以;比如下面的也可以;
disk = ['phy:hda7,sda2,w']
disk = ['phy:hda7,sda3,w']
disk = ['phy:hda7,sdb1,w']
disk = ['phy:hda7,sdb2,w']
... ...
什麼是映射點呢?也就是說通過phy定義後,被虛擬的操作系統的位於的真實的物理分區,在虛擬平臺中,被映射到另一個分區;可能這樣說有點不太明白。呵。。。。。。
舉個例子吧:比如我們在Slackware虛擬Fedora ,而Fedora 位於/dev/hda7中。我們在引導Fedora的配置文件中定義Fedora所用的物理分區被映射到/dev/sda1;
disk = ['phy:hda7,sda1,w']
root = "/dev/sda1 ro"
當我們把Fedora引導起來的時候,Fedora的文件系統就是用被虛擬後的分區,也就是/dev/sda1。在Fedora中,我們通過df -h 查看到Fedora是位於/dev/sda1。
所以在引導Fedora的配置文件中,還要有一行來指定Fedora的root在哪裏,就在/dev/sda1上;因爲/dev/hda7已經被虛擬到了/dev/sda1。這回明白了吧;

6.2
以映像文件做虛擬操作系統的文件系統;
以映像文件做爲虛擬操作系統的文件系統,這種方法是比較常用。也是比較方便和易於操作的,也就是說被虛擬的操作系統是放在了一個文件中。

6.21
創建映像文件;
[root@localhost ~]# dd if=/dev/zero of=fedora50.img bs=2k seek=2048k count=1
讀入了 1+0 個塊
輸出了 1+0 個塊
[root@localhost ~]# ls -lh fedora50.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 01:27 fedora50.img
我們可以用dd來創建映像文件,上面的例子是創建了大小爲4.1G的體積的,名爲fedora50.img的映像文件;您可以調整上面命令參數的大小來創建您想要的體積大小的映像文件。
6.22 格式化映像爲Linux文件系統;
Linux文件系統,比如ext3或reiserfs,看自己喜歡吧;您可以用mkfs.ext3或mkfs.reiserfs命令來創建文件系統,請參考:
[root@localhost ~]# /sbin/mkfs.ext3 fedora50,img
mke2fs 1.38 (30-Jun-2005)
fedora50,img is not a block special device.
Proceed anyway? (y,n) y
注:在這裏輸入y就時行格式化了,然後遇到提示之處,都是用回車。
這樣fedora50.img就是ext3文件系統了,你可以用mount -o loop 來掛載使用它,在它上面存儲文件等。
[root@localhost ~]# mkdir /mnt/fedora50
[root@localhost ~]# mount -o loop fedora50.img /mnt/fedora50
[root@localhost ~]# df -h
root@localhost:/opt# df -lh
Filesystem
容量 已用 可用 已用% 掛載點
/dev/hda6 12G 8.5G 3.3G 73% /
/root/fedora50,img 4.0G 129M 3.7G 4% /mnt/fedora
上面的一系列命令執行下去後,說明fedora50.img已經掛載到了/mnt/fedora目錄中,我們可以向/mnt/fedora中存放文件。這樣就寫到了fedora50.img映像文件中。寫完後,我們可以卸載fedora50.img;
[root@localhost ~]# umount /mnt/fedora

6.23
在映像文件上構建操作系統;
在映像文件上構建操作系統,目前在一個Linux操作系統中構建另一個操作系統,主要是通過chroot工具和軟件包提取工具來構建。基礎的東西還是需要一點的,請參考:
目前在開源社區中,已經有人把一些常用的發行版的基礎系統做好了。我們能拿過來直接用。呵。。。。。只要有基礎系統,我們就能chroot進入,我們就能用相應發行版軟件包管理器來構建操作系統了。
操作系統之基礎系統資源:

6.24
虛擬操作系統的引導文件中關於文件系統的定義;
disk = ['file:/opt/vmos/vmos.img,sda1,w', 'file:/opt/vmos/vmos.swap,sda2,w']
root = "/dev/sda1 ro"
我們還是以實例解說,把裝有vmos.img的映像映射到/dev/sda1 分區,vmos.img就是虛擬操作系統root存放地。vmos.swap是被虛擬文件系統的交換分區,這個交換分區也是一個文件,被映射到了/dev/sda2 。然後通過root= 行來指定虛擬操作系統所處的分區,這個位置就是被虛擬後的分區。
定義時要注意自己的這些文件存放在哪了?上面的例子表示vmos.img和vmos.swap是存放在/opt/vmos目錄中。要看好了。。

7
、實例應用:用Slackware+Xen虛擬Fedora 5.0
7.1 Fedora 安裝運行於一個物理分區中;
7.11 下載Fedora 5.0的基礎系統;
7.12 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.13
規劃硬盤的物理分區並創建文件系統;
您可以在您的硬盤上創建一個物理分區,如果有空閒的物理分區可用也行。然後創建一下文件系統。分區工具用fdisk 工具就行。
比如我們想把Fedora 放在/dev/hda5上,我們可以用mkfs.ext3來格式化/dev/hda5。
[root@localhost ~]# /sbin/mkfs.ext3 /dev/hda5

7.14
構建Fedora 5 的基礎系統;
因爲我們已經下載了,Fedora Core 5的基礎系統的映像文件,也做了解壓。會看到 fedora.fc5.img這個映像文件; 我們把這個映像掛載,然後把它的內容複製到我們剛纔創始的文件系統的分區中,也就是/dev/hda5;
[root@localhost ~]# mkdir /mnt/tmp
[root@localhost ~]# mkdir /mnt/fedora
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/tmp
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
複製fedora.fc5.img中的內容,到/dev/hda5中;
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora
[root@localhost ~]# umount /mnt/tmp
然後是chroot 到/mnt/fedora目錄中,實際就是操作Fedora 5系統,我們要創建Fedora 5的root密碼;
[root@localhost ~]# chroot /mnt/fedora/
root@localhost:/#
root@localhost:/# passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
root@localhost:/# exit
然後我們卸載/dev/hda5分區;
[root@localhost ~]# umount /dev/hda5

7.15
創建Fedora 5 引導文件;
我們在解壓 fedora.fc5.20060401.img.tgz 時看到一個文件fedora.fc5.xen.cfg ,這個就是Fedora 5的引導文件,人家洋人都爲我們寫好了。我們只是改一改就能用了;
我們要回到fedora.fc5.xen.cfg的存放目錄/opt/fedora5vm中;複製fedora.fc5.xen.cfg名爲fc5vm.cfg的文件。然後我們把fc5vm.cfg作爲被虛擬的Fedora 5的引導文件;
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# cp fedora.fc5.xen.cfg fc5vm.cfg
我們要對fc5vm.cfg做一下修改;
在fc5vm.cfg中,我們會看到如下的內容:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fedora.fc5"
nics = 1
dhcp = "dhcp"
disk = ['file:/xen/fedora/fedora.fc5.img,sda1,w', 'file:/xen/fedora/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
   dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk這行是用來定義Fedora所處的物理分區映射點,及物理交換分區及映射點的;因爲物理分區是通過phy:來指定的。所以我們得改一改。因爲我們已經把Fedora放在了/dev/hda5了。另外交換分區在哪呢?可以通過swapon -s來查看物理交換分區,要在虛擬平臺中查看;比如我得到的是/dev/hda8是交換分區。所以disk這行就應該這樣寫:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
不過真實物理分區的映射點,比如/dev/hda5映射到了/dev/sda1,交換分區/dev/hda8映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。慢慢理解;物理分區的映射點是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的root所處的物理分區的映射點改變後,Fedora的root=的值也得跟着改變。另外還要改Fedora系統中的/etc/fstab文件;
root一行,來指定Fedora的所有的虛擬物理分區(就是映射點)。映射到哪裏了呢?Fedora 安裝到了/dev/hda5,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"
再舉一例:
比如Fedora 被安裝在了/dev/hda5分區,物理交換分區爲/dev/hda8。通過DHCP獲得IP。我想映射/dev/hda5到/dev/hda5,並且想映射/dev/hda8到/dev/hda8。我們應該如何修改一些配置文件呢?
Fedora的引導文件內容應該是:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['phy:hda5,hda5,w','phy:hda8,hda8,w']
root = "/dev/hda5 ro"
然後我們應該再把裝有Fedora的/dev/hda5分區掛載,然後修改Fedora系統的/etc/fstab。注意:不是修改虛擬平臺的/etc/fstab。不要弄混了!!!!
應該先掛載Fedora 5所處的分區:
[root@localhost ~]# mount /dev/hda5 /mnt/fedora/
然後修改Fedora 5的/etc/fstab文件,也就是/mnt/fedora/etc/fstab文件:找到如下兩行:
/dev/sda1 / ext3 defaults 1 1
/dev/sda2 none swap sw 0 0
改爲:
/dev/hda5 / ext3 defaults 1 1
/dev/hda8 none swap sw 0 0
接着再umount /mnt/fedora
[root@localhost ~]# umount /mnt/fedora

7.16
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.17
虛擬操作系統網卡不能激活的處理方法;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount /dev/hda5 /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora

7.2 Fedora
安裝運行於一個映像文件中;
7.21 下載Fedora 5.0的基礎系統;
7.22 解壓和提取相應文件;
我們把下載下來的Fedora 5 基礎系統,存放到/opt/fedora5vm目錄中;然後解壓;
[root@localhost ~]# mkdir /opt/fedora5vm
[root@localhost ~]# mv fedora.fc5.20060401.img.tgz /opt/fedora5vm
[root@localhost ~]# cd /opt/fedora5vm
[root@localhost fedora5vm]# tar zxvf fedora.fc5.20060401.img.tgz
[root@localhost fedora5vm]# ls
fedora.fc5.20060401.img.tgz fedora.fc5.img fedora.fc5.xen.cfg fedora.swap

7.23
修改引導運行Fedora的配置文件;
我們從fedora.fc5.20060401.img.tgz 解壓出來一個fedora.fc5.xen.cfg ,這個就是用來引導Fedora 5的配置文件。我們改一改以適合我們的需要。我們把這個文件複製爲fc5vm.cfg
[root@localhost ~]# cp /opt/fedora5vm/fedora.fc5.xen.cfg /opt/fedora5vm/fc5vm.cfg
fc5vm.cfg 內容如下:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
註解:
首先我們看kernel 這行,這行是定義虛擬操作系統內核的,我們要用到我們安裝xen是所安裝的內核。要在虛擬平臺/boot目錄中找。比如我用Slackware虛擬 Fedora 。那虛擬平臺就是Slackware。我應試在Slackware的/boot中找文件名中包含vmlinuz和xenU字樣的文件。比如我找以的是:
[root@localhost ~]# ls -lh /boot/vmlinuz*xenU*
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 1.1M 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU
我們看到有類似的三個文件,實際上只有一個,也就是 vmlinuz-2.6.12.6-xenU,其它的都是他的鏈接文件。所以我們在kernel行中指定內核時,可以用這三個中的任何一個;比如我們用 vmlinuz-2.6-xenU;
memory是指定內存大小的,我們設置被虛擬的Fedora 5的虛擬內存大小是 128M;
name 是定義虛擬操作系統的名字的,可以通過xm list中顯示出來,我們也改簡單點,改爲fc5
    nics=1 不變
    dhcp 這行,是用來指定獲取Fedora 5系統的IP是通過DHCP獲取的,不過您也可以指定IP。可以不要這行;
vif = ['mac=aa:00:00:00:00:11'] 用來指定Fedora 5的網卡的物理地址;可以自己定義。
   ip = "192.168.1.144" 用來指定虛擬網卡的IP
   netmask="255.255.255.0" 用來指定掩碼
disk來定義Fedora 5.0 所用的文件系統,因爲我們這次用的是映像文件。所以要用file:來指定,Fedora 5用的交換分區,也是一個映像文件;所以有:
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
指定fedora.fc5.img映像文件虛擬映射到/dev/sda1;交換分區文件fedora.swap映射到了/dev/sda2。映射過後,Fedora的root文件系統就用映射後的/dev/sda1。虛擬映射設備是可以在Linux系統設備定義的許可範圍內進行。自己嘗試着換一換映射點。如果Fedora的虛擬映射設備變了,我們得改變Fedora中的/etc/fstab。
root一行,來指定Fedora的root位於哪個映射後的設備。映射到哪裏了呢?Fedora 安裝到了/dev/sda1,映射後虛擬到了/dev/sda1。所以Fedora系統引導時就尋找/dev/sda1做爲文件系統。
所以root這行可寫爲:
root = "/dev/sda1 ro"
所以我們可以這樣寫Fedora 5的引導配置文件;
第一種:如果是用DHCP來獲取IP:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
dhcp = "dhcp"
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
第二種:如果是指定IP的話:
kernel = "/boot/vmlinuz-2.6-xenU"
memory = 128
name = "fc5"
nics = 1
vif = ['mac=aa:00:00:00:00:11']
disk = ['file:/opt/fedora5vm/fedora.fc5.img,sda1,w', 'file:/opt/fedora5vm/fedora.swap,sda2,w']
root = "/dev/sda1 ro"
ip = "192.168.1.144"
netmask="255.255.255.0"

7.24
引導Fedora 5 ;
引導運行Fedora 5.0就好辦了,就是用xm 工具來引導;首先要確認你的Fedora 5的配置文件放在哪裏。比如我們在這個例子中是放在了/opt/fedora5vm中。並且文件名爲fc5vm.cfg。所以我就可以這樣來引導Fedora 5。
[root@localhost ~]# /usr/sbin/xm create -c /opt/fedora5vm/fc5vm.cfg

7.25
網卡不能激活的處理;
modprobe: FATAL: Could not load /lib/modules/2.6.12.6-xenU/modules.dep:
No such file or directory
如果出現類似上面的現象,請複製虛擬平臺的中的/lib/modues/下的2.6.12.6-xenU 到Fedora系統中;
方法是先掛載Fedora 所處的物理分區,然後用cp -rp 來複制;
首先要關掉Fedora,然後再複製;
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 462 1 r----- 2192.9
fc5 2 128 1 -b---- 6.4
以上面虛擬操作系統的ID爲準,比如fc5的ID是 2,就要運行如下命令;
[root@localhost ~]# xm destroy 2
然後mount 掛載Fedora所處的物理分區/dev/hda5;
[root@localhost ~]# mount -o loop /opt/fedora5vm/fedora.fc5.img /mnt/fedora
[root@localhost ~]# mkdir /mnt/fedora/lib/modules
注:在Fedora中的/lib目錄中創建modules。如果有了就不創建;
[root@localhost ~]# cp -rp /lib/modules/2.6.12.6-xenU/ /mnt/fedora/lib/modules/
[root@localhost ~]# chmod -R 755 /mnt/fedora/lib/modules/
[root@localhost ~]# umount /mnt/fedora
然後再來引導Fedora 5,進入系統後用ifconfig來查看網卡的IP之類的,如果沒有激活,請用下面的命令來加載網卡模塊;在要Fedora中執行;
[root@fc5_pristine ~]# modprobe xennet
[root@fc5_pristine ~]# dhclient
如果您用DHCP獲取IP,請執行;

7.26 Fedora
映像文件太小的解決辦法;
我們會發現我們下載的Fedora基礎系統的映像文件體積太小。體積小空間就小的了。Fedora 5.0如果只安裝基礎系統,倒佔用不了多少空間,如果再安裝一個桌面環境可能會佔用大一點的地方。比如安裝GNOME或KDE。
我們可以自己創建一個映像文件,創建好文件系統。然後從我們下載下來的Fedora映像文件中的所有文件,也就是Fedora的基礎系統,複製到我們新創建的映像中。前面已經說過創建映像文件的辦法了。這個應該好辦吧。
[root@localhost ~]# dd if=/dev/zero of=fc5.img bs=2k seek=2048k count=1
[root@localhost ~]# ls -lh fc5.img
-rw-r--r-- 1 root root 4.1G 2006-04-13 11:22 fc5.img
[root@localhost ~]# /sbin/mkfs.ext3 fc5.img
mke2fs 1.38 (30-Jun-2005)
fc5.img is not a block special device.
Proceed anyway? (y,n) y

[root@localhost ~]# mkdir /mnt/tmp 注:在/mnt/中創建tmp目錄
[root@localhost ~]# mkdir /mnt/fedora 注:在/mnt中創建fedora目錄
[root@localhost ~]# mount -o loop fc5.img /mnt/fedora/ 注:掛載我們新創建的fc5.img文件到 /mnt/fedora
[root@localhost ~]# mount -o loop fedora.fc5.img /mnt/tmp/ 注:掛載我們下載下來的映像文件到/mnt/tmp
[root@localhost ~]# cp -rp /mnt/tmp/* /mnt/fedora/ 注:複製Fedora基礎系統到新的映像文件;
[root@localhost ~]# umount /mnt/tmp 注:卸載 fedora.fc5.img ;
[root@localhost ~]# umount /mnt/fedora 注:卸載fc5.img
然後就是改一改引導Fedora 5的配置文件,注意改一下disk:那行;要到fc5.img指定進去。要仔細看一下fc5所處的目錄;這個應該好辦,不多說了;

8
、強制終止正在運行的虛擬操作系統;(重要)
在xm這個管理工具中,我們把xm destroy 單列出來,就是因爲這個工具是極爲重要的;有時被虛擬的系統一直退不出去,但由於啓動過程中遇到問題,又不能終止。這時我們要用到這個工具強制被虛擬的系統退出。
[root@localhost ~]# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 586 1 r----- 2236.5
fc5 1 128 1 -b---- 13.7
[root@localhost ~]# xm destroy 1

[root@localhost ~]# xm destroy fc5
這時您再用xm list查看,肯定fc5這個Domain已經退出。
xm destroy 這個指令還是極爲有用的,所以我們單列出來。希望新手弟兄注意一下。

9
、關於基礎系統安裝後,虛擬操作系統的軟件補充安裝;
基礎系統安裝好以後,下一步就是其它軟件的安裝。在各個系統都有軟件包管理工具;在主流發行版中,都有相應的軟件包管理工具,比如Fedora有rpm 和yum 工具;Debian有 apt工具。
或者通過chroot來安裝一些比較重要的軟件包。總之方法太多了;
總之,後續軟件的補充安裝並不是什麼問題;

10
、關於虛擬操作系統的桌面訪問及遠程訪問;
被虛擬的操作系統,我們要把它看成一臺獨立運行的計算機。計算機與計算機之間通過什麼訪問來?ssh 或vnc。所以我們要在被虛擬的操作系統上安裝vncserver 和sshd;
如果您虛擬的是Fedora ,我們可以在Fedora中執行yum install vnc來安裝vncserver ;
#yum install vnc
如果您虛擬的是 Debian ,您可以用apt-get install vncserver 來安裝vncserver ;
#apt-get install vncserver
當然客戶端也要安裝vncview才行,您要自己在客戶端上安裝vncview;
關於vnc遠程桌面的訪問,您可以參考這篇:《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2
另外sshd服務器,也要安裝openssh 的軟件包;這個也省略不說了,比較簡單,再說目前大多基礎系統已經提供這個軟件包了。並且在被虛擬的系統在啓動時,sshd也自動運行了;連接sshd服務器的命令是;
#ssh 用戶名@ip
比如

11
、常見問題處理;
11.1 不能找到root分區;
表現如下症狀;
VFS: Cannot open root device "sda8" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
引導虛擬操作系統的配置文件有問題,主要查看disk:那行和root那行是否用的是一個虛擬映射點。
比如是由於引導Fedora 的配置文件中disk行和root行如下:
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda8 ro"
我們發現/dev/hda5被虛擬映射到/dev/sda1了。也就是說,被虛擬的操作系統引導運行,它的root應該位於/dev/sda1。而在這裏定義的卻是/dev/sda8。所以應該改爲
disk = ['phy:hda5,sda1,w','phy:hda8,sda2,w']
root = "/dev/sda1 ro"

11.2
出現/tmp/.ICE-unix 類似的錯誤;
chown: changing ownership of `/tmp/.ICE-unix': Read-only file system
再比較/tmp/xxxx之類的不能寫入,只讀之類的,請用xm destrony 先關掉被虛擬的操作系統。然後把被虛擬的系統的分區或映像文件掛載,刪除/tmp目錄中的臨時文件。注意.file是隱藏的。您可以通過ls -la來查看。然後再來刪除;
另外如果一直出現這個錯誤,說明文件系統有問題了,這在ext3的文件系統中是經常發生的。您可以用/sbin/fsck.ext3 工具來修復文件系統。當然您的文件系統不能處於掛載狀態。應該先umout 才能進行;
比如修復一個分區,應該類似如下的命令;
[root@localhost ~]# /sbin/fsck.ext3 /dev/hda5
如果中間遇到是否修復時,按提示的就是y或yes吧;
如果被虛擬的文件系統位於一個映像文件,也是用這種辦法,比如:
[root@localhost ~]# /sbin/fsck.ext3 fc5.img
11.3 Device 0 (vif) could not be connected
Warning: The nics option is deprecated. Please use an empty vif entry instead:
vif = [ '' ]
Error: Device 0 (vif) could not be connected. Hotplug scripts not working.
如果出現上面這種錯誤,應該看一下配置文件中有沒有 vif=['']的定義;
12、關於本文;
13、後記;
還要挖一挖Xen的文檔?好象沒有太大的必要了~~~,看情況吧;
14、參考文檔;
15、相關文檔;
《xen v3.0 用戶手冊》
《Fedora Core 5.0 用 Xen 虛擬Slackware 10.2



發佈了5193 篇原創文章 · 獲贊 9 · 訪問量 104萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章