Xen虚拟机磁盘镜像模板制作(二)—Windows Server 2008(2012)

《Xen虚拟机磁盘镜像模板制作(一)—Windows Server 2008(2012)》一文中,我们已经成功制作出了Windows Server磁盘镜像。下面我们说明下如何通过它来生成目标虚拟机,同时测试下之前制作好的虚拟机磁盘镜像模版是否有问题。具体流程如下文所述:

1、创建目标虚拟机的系统盘:

[root@localhost ~]# lvcreate -L 15G -n windows_vm vg0
  Logical volume "windows_vm" created

2、查看成功创建的虚拟机系统盘:

[root@localhost ~]# lvs
  LV         VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  windows_vm vg0  -wi-a- 15.00G

3、将之前导出的磁盘MBR主引导扇区 windows_mbr 重新dd到虚拟机系统盘里:

[root@localhost ~]# dd if=/root/windows_mbr of=/dev/vg0/windows_vm
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.009189 seconds, 55.7 kB/s

4、修改系统盘分区大小(以扇区数为单位):

[root@localhost ~]# echo "000001CA:00F0DF01" | xxd -r - /dev/vg0/windows_vm 
[root@localhost ~]# 

因为前面我们创建的虚拟机系统盘大小是15G,因此这里我们需要将磁盘分区1所占用的扇区数大小设置为00F0DF01(具体计算方式后续再整理),而000001CA则表示保存磁盘分区1占用扇区数的开始字节位置,具体说明请参考《磁盘MBR主引导扇区》

5、建立系统盘的磁盘分区映射,将系统盘的所有分区映射到/dev/mapper下:

[root@localhost ~]# kpartx -av /dev/vg0/windows_vm 
add map windows_vm1 : 0 31453184 linear /dev/vg0/windows_vm 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,  2 Jun 26 13:29 vg0-windows_vm
brw-rw---- 1 root disk 253,  0 Jun 26 13:38 windows_vm1
[root@localhost ~]# 

红色的部分即为虚拟机磁盘的根分区。

6、解压并恢复之前制作好的Windows Server磁盘镜像模板 windows_img 到虚拟机磁盘的根分区上:

[root@localhost ~]# gunzip -c /root/windows_img | ntfsclone --restore-image --overwrite /dev/mapper/windows_vm1 -
ntfsclone v2012.1.15 (libntfs-3g)
Ntfsclone image version: 10.1
Cluster size           : 4096 bytes
Image volume size      : 16104026112 bytes (16105 MB)
Image device size      : 16104030208 bytes
Space in use           : 7510 MB (46.6%)   
Offset to image data   : 56 (0x38) bytes
Restoring NTFS from image ...
Warning : no alternate boot sector in image
Syncing ...
[root@localhost ~]# 

7、扩展系统盘文件系统大小适应磁盘根分区的大小:

[root@localhost ~]# ntfsresize -f -f /dev/mapper/windows_vm1 
ntfsresize v2012.1.15 (libntfs-3g)
Device name        : /dev/mapper/windows_vm1
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 16104026624 bytes (16105 MB)
Current device size: 16104030208 bytes (16105 MB)
New volume size    : 16104026624 bytes (16105 MB)
Nothing to do: NTFS volume size is already OK.
[root@localhost ~]# 

这里是因为系统盘文件系统大小刚好也是15G,刚好匹配于根分区大小,所以显示了Nothing to do,无关紧要。

8、进行到这一步,假如你需要往虚拟机系统中植入一些文件或者修改某些文件,可以将虚拟机根分区mount到某个目录下,如下所示:

[root@localhost ~]# mount -t ntfs-3g /dev/mapper/windows_vm1 /mnt/
[root@localhost ~]# umount /mnt/
[root@localhost ~]# 

不需要往虚拟机系统中植入一些文件或者修改某些文件,直接跳过这步。

9、删除磁盘分区映射:

[root@localhost ~]# kpartx -d /dev/vg0/windows_vm 
[root@localhost ~]# ll /dev/mapper/
total 0
crw------- 1 root root  10, 62 May  5 17:18 control
brw-rw---- 1 root disk 253,  2 Jun 26 13:29 vg0-windows_vm
[root@localhost ~]# 

10、至此,虚拟机系统盘已经准备好,下面就是需要准备虚拟机配置文件:

kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
memory = 2048
name = "windows_vm"
vif = [ 'bridge=eth0' ]
disk = [ 'phy:/dev/vg0/windows_vm,hda,w' ]
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

11、启动该虚拟机:

[root@localhost ~]# xm create /root/windows_vm.cfg 
Using config file "/root/windows_vm.cfg".
Started domain windows_vm (id=573)
[root@localhost ~]# xm li
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  1856     8     r-----  92557.1
windows_vm                                 573  2048     1     r-----      1.7
[root@localhost ~]#

12、通过vnc登陆该虚拟机:

 至此,通过前面制作的Windows Server磁盘镜像模板成功生成了一个全新的虚拟机。

原文地址:https://www.cnblogs.com/CasonChan/p/4602035.html