《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- .00G

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

[root@localhost ~]# dd if=/root/windows_mbr of=/dev/vg0/windows_vm
+ records in
+ records out
bytes ( 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 : linear /dev/vg0/windows_vm
[root@localhost ~]# ll /dev/mapper/
total
crw------- root root , May : control
brw-rw---- root disk , Jun : vg0-windows_vm
brw-rw---- root disk , Jun : 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 : bytes
Image volume size : bytes ( MB)
Image device size : bytes
Space in use : MB (46.6%)
Offset to image data : (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 : bytes
Current volume size: bytes ( MB)
Current device size: bytes ( MB)
New volume size : bytes ( 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
crw------- root root , May : control
brw-rw---- root disk , Jun : vg0-windows_vm
[root@localhost ~]#

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

kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
memory =
name = "windows_vm"
vif = [ 'bridge=eth0' ]
disk = [ 'phy:/dev/vg0/windows_vm,hda,w' ]
vcpus =
on_reboot = 'restart'
on_crash = 'restart'
boot = 'c'
sdl =
vnc =
vnclisten = '0.0.0.0'
vncdisplay =
stdvga =
serial = 'pty'
usbdevice = 'tablet'
localtime =

11、启动该虚拟机:

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

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

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

Xen虚拟机磁盘镜像模板制作(二)—Windows Server 2008(2012)的更多相关文章

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

    这段时间一直在研究如何制作一个适合Xen虚拟化的Windows Server 2008(2012)磁盘镜像,中间虽然遇到了一些阻挠,不过最终还是顺利解决,成功制作出了Xen Windows Serve ...

  2. Xen虚拟机磁盘镜像模板制作(四)—CentOS 7

    在<Xen虚拟机磁盘镜像模板制作(三)—CentOS 7>一文中,我们已经成功制作出了 CentOS7 磁盘镜像.下面我们说明下如何通过它来生成目标虚拟机,同时测试下之前制作好的虚拟机磁盘 ...

  3. Xen虚拟机磁盘镜像模板制作(三)—CentOS 7

    这里整理下制作Xen CentOS 7磁盘镜像模版的流程: 1.创建一个将要用来安装CentOS 7系统的LV,命令如下: [root@localhost ~]# lvcreate -L 5G -n ...

  4. 阿里云服务器Windows Server 2008/2012部署Office Web Server 2013

    以前成功将Office Web Server 2013部署在了本地服务器上,此次是将Office Web Server 2013部署在阿里云服务器Windows Server 2008和2012上,中 ...

  5. 【定时任务|开机启动】Windows Server 2008/2012 计划任务配置(任务计划程序)每分钟执行BAT

    打开计划任务快捷方式(在 “管理工具”内): C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Tas ...

  6. Windows Server 2008/2012 计划任务配置执行bat

    首先Windows Server 2008不同于其他服务器操作系统和Windows Server 2003有着很大的区别,计划任务的名称是“任务计划程序”不在控制面板里,而是在“管理工具”里.由于服务 ...

  7. 配置Windows Server 2008/2012/2016允许2个用户同时远程桌面

    Windows Server 系列服务器默认情况下只能支持一个用户远程,如果第二个人远程上去之后会直接把前面一个登录用户踢掉.在日常工作中如果有多个人需要同时远程过去工作,会很不方面. 网上很多教程讲 ...

  8. windows server 2008/2012 无法安装AD域解决方法记录

    安装活动目录之前需要一些准备工作和前提条件的. 有管理员的权限 至少有一个足够大的NTFS文件系统的分区或动态卷 需要DNS服务配合,因此需要安装DNS服务 最好使用dcpromo命令来进行安装 最终 ...

  9. windows server 2008/2012安装PostgreSQL过程及问题总结

    今天第一次接触在Windows Server2008/2012 下安装PostgreSQL,遇到的问题总结如下: 1.首先,在安装的时候,我更改安装目录改为自定义的E盘,安装时报错:libintl.d ...

随机推荐

  1. 使用SMSManager短信管理器发送短信

    import android.os.Bundle;import android.app.Activity;import android.app.PendingIntent;import android ...

  2. Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.

    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...

  3. 使用 JDBC 调用函数 & 存储过程

    /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connection connectio ...

  4. 踏着前人的脚印学Hadoop——RPC源码

    A simple RPC mechanism.A protocol  is a Java interface.  All parameters and return types must be one ...

  5. Android 监听ContentProvider的数据改变

    今天介绍一下怎么监听ContentProvider的数据改变,主要的方法是:getContext().getContentResolver().notifyChange(uri,null),这行代码是 ...

  6. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)

    如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比 ...

  7. <转>用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...

  8. 《hanoi(汉诺塔)问题》求解

    //Hanoi(汉诺)塔问题.这是一个古典的数学问题,用递归方法求解.问题如下: /* 古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上. 有一个老和 ...

  9. (转)HTML5开发学习(3):本地存储之Web Sql Database

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...

  10. In p = new Fred(), does the Fred memory “leak” if the Fred constructor throws an exception?

    No. If an exception occurs during the Fred constructor of p = new Fred(), the C++ language guarantee ...