這段時間一直在研究如何制作一個適合Xen虛擬化的Windows Server 2008(2012)磁盤鏡像,中間雖然遇到了一些阻撓,不過最終還是順利解決,成功制作出了Xen Windows Server 2008(2012) 磁盤鏡像模板。這里記錄下整個制作過程:
1、首先要確保服務器的VT已經打開,可以通過如下命令來查看:
[root@localhost ~]# cat /proc/cpuinfo | egrep '(vmx|svm)'
如果有輸出,則說明該服務器的VT已經打開。
2、創建一個將要用來安裝Windows Server 2008(2012)系統的LV,命令如下:
[root@localhost ~]# lvcreate -L 15G -n windows vg0 Logical volume "windows" created
參數說明:
1)-L:指定LV的大小。這里設置為15G,是因為Windows Server 2008(2012)系統本身安裝完后,占用系統盤較大,大約在9--10G;另外官方推薦系統盤大小要在13G以上
2)vg0:這里是我測試創建的vg
3、查看已經成功創建的系統LV:
[root@localhost ~]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert windows vg0 -wi-a- 15.00G [root@localhost ~]# ll /dev/vg0/windows lrwxrwxrwx 1 root root 23 Jun 2 13:12 /dev/vg0/windows -> /dev/mapper/vg0-windows
4、系統LV 創建好后,開始准備Xen虛擬機的配置文件:
kernel = "/usr/lib/xen/boot/hvmloader" builder='hvm' memory = 2048 name = "windows" vif = [ 'bridge=eth0' ] disk = [ 'phy:/dev/vg0/windows,hda,w','file:/root/cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso,hdc:cdrom,r' ] vcpus = 1 on_reboot = 'restart' on_crash = 'restart' boot = 'd' sdl = 0 vnc = 1 vnclisten = '0.0.0.0' vncdisplay = 1 stdvga = 0 serial = 'pty' usbdevice = 'tablet' localtime = 1
注意:
1)這里使用的是全虛擬化方式安裝Windows Server虛擬機,后面會安裝半虛擬化驅動qplpv driver
2)要設置虛擬機從CDROM啟動
5、創建並啟動Windows Server虛擬機,命令如下:
[root@localhost ~]# xm create /root/windows.cfg Using config file "/root/windows.cfg". Started domain windows (id=442)
6、此時Windows Server虛擬機已經啟動,進入到系統安裝界面,下面就是按部就班地安裝系統;我們通過VNC客戶端連接到虛擬機上,如下所示:

7、系統安裝到下面這一步時:

這里我們需要事先手動對整塊磁盤進行分區並格式化,因為如果我們采用了系統默認的分區格式化方式,系統會幫我們創建一個100M的隱藏分區,后期我們在導出系統文件時會比較麻煩。
這里同時按住 Shift + F10,彈出命令提示符界面,執行如下命令進行磁盤分區並格式化:

執行命令后,關閉命令提示符,點擊"刷新",發現此時磁盤分區已經創建好了,而且沒有那100M的隱藏分區,如下圖:

8、后面就是系統安裝過程了:

9、系統安裝完成后,關閉虛擬機,修改Xen虛擬機配置文件:
kernel = "/usr/lib/xen/boot/hvmloader" builder='hvm' memory = 2048 name = "windows" vif = [ 'bridge=eth0' ] disk = [ 'phy:/dev/vg0/windows,hda,w','file:/root/xen-windows-driver.iso,hdc:cdrom,r' ] vcpus = 1 on_reboot = 'restart' on_crash = 'restart' boot = 'c' sdl = 0 vnc = 1 vnclisten = '0.0.0.0' vncdisplay = 1 stdvga = 0 serial = 'pty' usbdevice = 'tablet' localtime = 1
注意:
1)設置系統從硬盤啟動
2)修改CDROM為xen-windows-driver.iso
PS:這里的xen-windows-driver.iso是本人通過 mkisofs 命令制作的,里面僅僅包含了qplpv drvier及agent,你同樣可以制作你自己需要的iso文件
10、下面就是根據需要修改一些Windows Server系統配置的工作,具體如下:
1)關閉防火牆
2)開啟遠程桌面
3)設置新磁盤自動聯機,具體命令如下:

4)安裝半虛擬化驅動qplpv driver

安裝完重啟后,我們發現"設備管理器"里的驅動變為Xen的了

11、至此,系統配置修改已經完成了,下面關閉虛擬機,備份磁盤MBR主引導扇區,命令如下:
[root@localhost ~]# dd if=/dev/vg0/windows of=windows_mbr bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.010009 seconds, 51.2 kB/s
[root@localhost ~]# ll windows_mbr
-rw-r--r-- 1 root root 512 Jun 2 15:49 windows_mbr
12、創建磁盤分區映射,將所有分區映射到/dev/mapper下:
[root@localhost ~]# kpartx -av /dev/vg0/windows add map windows1 : 0 31453184 linear /dev/vg0/windows 2048 [root@localhost ~]# ll /dev/mapper/ total 0 crw------- 1 root root 10, 62 May 5 17:18 control brw-rw---- 1 root disk 253, 5 Jun 2 15:34 vg0-windows brw-rw---- 1 root disk 253, 4 Jun 2 15:54 windows1 [root@localhost ~]#
因為前面我們安裝系統時只創建了一個分區,因此這里就只有一個windows分區,即windows1
13、mount windows分區到mnt下:
[root@localhost ~]# mount -t ntfs-3g /dev/mapper/windows1 /mnt/ [root@localhost ~]# ll /mnt/ total 2097184 drwxrwxrwx 1 root root 4096 Jun 2 14:17 Boot -rwxrwxrwx 1 root root 383786 Nov 21 2010 bootmgr -rwxrwxrwx 1 root root 8192 Jun 2 14:17 BOOTSECT.BAK lrwxrwxrwx 2 root root 60 Jul 14 2009 Documents and Settings -> /mnt//Users -rwxrwxrwx 1 root root 2147082240 Jun 2 15:32 pagefile.sys drwxrwxrwx 1 root root 0 Jul 14 2009 PerfLogs drwxrwxrwx 1 root root 4096 Jun 2 14:20 ProgramData drwxrwxrwx 1 root root 4096 Jun 2 15:31 Program Files drwxrwxrwx 1 root root 4096 Jun 2 15:31 Program Files (x86) drwxrwxrwx 1 root root 0 Jun 2 14:20 Recovery drwxrwxrwx 1 root root 0 Jul 14 2009 $Recycle.Bin drwxrwxrwx 1 root root 4096 Jun 2 14:18 System Volume Information drwxrwxrwx 1 root root 4096 Jun 2 14:41 Users drwxrwxrwx 1 root root 16384 Jun 2 15:29 Windows [root@localhost ~]#
因為windows文件系統是NTFS格式的,所以這里類型要設置為ntfs-3g
14、刪除文件 pagefile.sys:
[root@localhost ~]# rm -f /mnt/pagefile.sys [root@localhost ~]# ll /mnt/ total 424 drwxrwxrwx 1 root root 4096 Jun 2 14:17 Boot -rwxrwxrwx 1 root root 383786 Nov 21 2010 bootmgr -rwxrwxrwx 1 root root 8192 Jun 2 14:17 BOOTSECT.BAK lrwxrwxrwx 2 root root 60 Jul 14 2009 Documents and Settings -> /mnt//Users drwxrwxrwx 1 root root 0 Jul 14 2009 PerfLogs drwxrwxrwx 1 root root 4096 Jun 2 14:20 ProgramData drwxrwxrwx 1 root root 4096 Jun 2 15:31 Program Files drwxrwxrwx 1 root root 4096 Jun 2 15:31 Program Files (x86) drwxrwxrwx 1 root root 0 Jun 2 14:20 Recovery drwxrwxrwx 1 root root 0 Jul 14 2009 $Recycle.Bin drwxrwxrwx 1 root root 4096 Jun 2 14:18 System Volume Information drwxrwxrwx 1 root root 4096 Jun 2 14:41 Users drwxrwxrwx 1 root root 16384 Jun 2 15:29 Windows [root@localhost ~]#
15、unmount windows分區:
[root@localhost ~]# umount /mnt/ [root@localhost ~]# ll /mnt/ total 0 [root@localhost ~]#
16、打包並壓縮windows1分區里的系統文件:
[root@localhost ~]# ntfsclone --save-image --output - /dev/mapper/windows1 | gzip -c > windows_img ntfsclone v1.13.1 (libntfs 9:0:0) NTFS volume version: 3.1 Cluster size : 4096 bytes Current volume size: 16104026112 bytes (16105 MB) Current device size: 16104030208 bytes (16105 MB) Scanning volume ... 100.00 percent completed Accounting clusters ... Space in use : 7274 MB (45.2%) Saving NTFS to image ... 100.00 percent completed Syncing ... [root@localhost ~]# ll windows_img -rw-r--r-- 1 root root 3073945978 Jun 2 16:14 windows_img
17、刪除磁盤分區映射:
[root@localhost ~]# kpartx -d /dev/vg0/windows [root@localhost ~]# ll /dev/mapper/ total 0 crw------- 1 root root 10, 62 May 5 17:18 control brw-rw---- 1 root disk 253, 5 Jun 2 15:34 vg0-windows [root@localhost ~]#
18、至此,我們需要的Xen Windows Server磁盤鏡像模板就制作好了,下面兩個文件就是我們需要的:
[root@localhost ~]# ll windows_* -rw-r--r-- 1 root root 3073945978 Jun 2 16:14 windows_img -rw-r--r-- 1 root root 512 Jun 2 15:49 windows_mbr [root@localhost ~]#
PS:這里雖然是Windows Server 2008示例說明,但2012過程同上。
