首页
社区
课程
招聘
[原创]LINUX平台下,一种在虚拟机中嵌套安装虚拟机的方法
发表于: 2009-4-6 14:58 5892

[原创]LINUX平台下,一种在虚拟机中嵌套安装虚拟机的方法

2009-4-6 14:58
5892

LINUX平台下,一种在虚拟机中嵌套安装虚拟机的方法

根据kanxue@pediy.com在email中的建议,将此文整理后重发一遍......
[作者:Guo Changying (laiwen68@163.com) 于2009年4月6日]

是否能在虚拟机中安装虚拟机,目前的结论几乎都是否定的(例如:http://zhidao.baidu.com/question/64142515.html等等),但是,本人在失败了很多次之后,终于找到了一些成功的模式,在这里与大家分享一种比较高效和实用的KVM+VMWare模式,由于KVM目前只支持AMD平台的虚拟机嵌套,所以建议Intel系统的玩家在2010年前就暂不用看了,呵呵......

嵌套安装虚拟机最需要考虑的是系统的性能问题。所以,要使虚拟机中的虚拟机有实用意义上的运行速度,那么,系统的性能就不能太差:一方面,要选择多核(建议4核)大内存(建议4GB以上)的硬件系统平台,另一方面,也必须要求虚拟机软件本身的效率,特别是第一层的效率,是比较高效的。在Linux平台下,高效的虚拟机软件应首推KVM!下面,我们就拿KVM来试一试(注:网上已经有太多的关于如何安装KVM的帖子,故在此只着重讨论与嵌套安装相关的地方):

1、在LINUX环境下,制作Windows环境所需要的安装程序的iso文件,并复制到/data/isofiles/目录下
(1)sudo mkdir /data/isofiles
 (2) 将建立Windows环境所需要安装的光盘内容制作成iso文件并复制到/data/isofiles目录下,
     例如,生成光盘Windows2003的iso文件:sudo cp /dev/cdrom /data/isofiles/win2003e.iso
 (3) 将建立Windows环境所需要安装的已下载的iso文件复制到/data/isofiles目录下,
     例如,复制下载的VMWare6的iso文件:sudo cp ~/Download/vmware6.iso /data/isofiles/
 (4) 将建立Windows环境所需要安装的已下载的小工具汇聚成一个iso文件并复制到/data/isofiles目录下,
     例如,假设已经下载的工具都位于~/Download/tools/目录下,那么,执行:
      sudo mkisofs -o /data/isofiles/tools.iso ~/Download/tools
 (5) 在复制了windows平台所需要的所有iso文件之后,不要忘记再执行一条命令:
      sudo chmod og+r /data/isofiles/*.iso
     否则,以非root权限启动KVM时,有可能无法加载iso文件;

2、在以下地址下载KVM-83版或82版的源码,到当前的用户目录(注:太早的代码不是不支持嵌套安装,就是BUG太多,83以后的源码本人没有试过)
http://sourceforge.net/project/showfiles.php?group_id=180599&package_id=209008

3、解压并编译安装KVM(注:这一环节可根据具体情况,参考其他资料进行安装,以满足你的特定需求)
tar -xzvf kvm-83.tar.gz 

sudo apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers pkg-config libgnutls-dev

cd kvm-83
./configure --audio-drv-list="alsa oss"
make 
sudo make install
注:上面configure的参数是使虚拟机与LINUX系统和其他运行的虚拟机共享声卡;如果你的机器上的声卡不是ALSA,那么,也可以不带这个参数

4、建立虚拟系统硬盘文件及其他KVM所需要的设置
(注:在这一环节,请大家参考网上已有的其他资料,特别是有关如何设置网络等等,由于这些资料已经很多,并且写起来也太烦长,反而影响了有关嵌套安装方面要注意的地方,故在此省写之)
qemu-img create -f qcow2 win2003.img 40G

5、加载KVM模块
sudo modprobe kvm
sudo modprobe kvm-amd  
注1:KVM目前只支持AMD平台的虚拟机嵌套;
注2:还可参考网上其他资料,将以上两句作成一个shell文件,并放在/etc/init.d/下面,这样就不用每次启动时都要输入这两条命令;

6、启动虚拟机
qemu-system-x86_64                                   \
  -smp 4                                             \
  -m 2048                                            \
  -hda ~/win2003.img                                 \
  -boot d                                            \
  -cdrom /data/isofiles/win2003e.iso                 \
  -soundhw sb16                                       \
  -localtime                                         \
  -vga std                                           \
  -usb                                               \
  -enable-nesting                                    \
  -usbdevice tablet                                  \
  -vnc :1                                           
注1:这一步必须加上-enable-nesting参数以支持虚拟机嵌套,这是KVM虚拟机嵌套中最重要的一环
注2:以上参数要根据你的硬件的具体情况进行调整:如:-smp 4表示分配给虚拟机4个CPU核;-m 2048表示分配给虚拟机2G的内存空间;-boot d表示从光盘启动等等(注:安装完毕之后,可改为从C盘启动:-boot c);

执行以下命令进行监控
vncviewer 127.0.0.1:1
(注:用vncviewer的观察模式比直接用KVM默认的观察模式有更好的鼠标控制效果)

7、为虚拟机安装Windows2003系统
启动虚拟机后,通过vncviewer界面,安装windows2003系统,至于如何安装windows2003系统相信大家都已经很熟悉了,就不用在这里多讲了。

8、在虚拟机中再安装第二层的VMWare虚拟机
  Windows安装完毕并重新启动后,将输入焦点转到VNC:QEMU窗口并按Ctrl-Alt-2,当出现QEMU的控制窗口后,输入:
  info block
  这时,你可以发现虚拟机的cdrom的设备号,即类似于:ide1-cd0这样的字符串,然后,再输入:
  eject ide1-cd0
  change ide1-cd0 /data/isofiles/vmware6.iso
  这样,在linux环境中的iso文件将被加载到虚拟机的光驱中;
  (注:如果在windows中的光驱中看不到光盘,99.9999%的可能就是你输入的iso文件名或路径名出错了,剩下的原因通常就是权限问题)
  按:Ctrl-Alt-1 返回Windows系统,并安装虚拟机光驱中的VMWare软件,至于如何安装Windows下的VMWare软件,相信大家都已经很熟悉了,就不用在这里多讲了。

9、在第二层的VMWare虚拟机中安装操作系统,如:Windows系统

  VMWare安装完毕并重新启动后,将输入焦点转到VNC:QEMU窗口并按Ctrl-Alt-2,当出现QEMU的控制窗口后,输入:
  eject ide1-cd0
  change ide1-cd0 /data/isofiles/win2003schs.iso
  这样,第二层虚拟机所需要的windows的iso文件就被加载到了第一层的虚拟机中了;
  注1:第二层的虚拟机不一定必须是windows系统,也可以是其他操作系统;
  注2:如果第二层的虚拟机用的是windows系统,那么,可以与第一层的windows系统不同;
  注3:如果第二层的虚拟机用的是windows系统,那么,并不是每一种windows系统都能在第一层虚拟机中的VMWare中正确启动!!!
  注4:为了避免不必要的麻烦,强烈建议只考虑加载安装原版或原版镜像的操作系统,否则系统有可能蓝屏;

  按:Ctrl-Alt-1 返回Windows系统中的VMWare,点击:[File]->[New]->[Virtual Machine]->[下一步]->[Custom]->[下一步]->在Verion中选择适当的操作系统,如:windows 2003企业版->一路按N个[下一步]->[完成]
  注1:安装启动Windows标准版时,最好强制以Windows企业版的模式启动,否则系统有可能蓝屏;
  
  双击VMWare中Sidebar栏中的Windows Server 2003 Enterprise Edition,即可启动安装或运行第二层虚拟机中的windows系统,至于如何安装windows2003系统相信大家都已经很熟悉了,就不用在这里多讲了。

注:以上做法,已经在:ubuntu8.10+KVM-83+Windows 2003简体中文企业/标准版 SP1+VMWare WorkStation 6.03 build 80004+以Windows 2003简体中文版标准版SP1下测试通过。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 379
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
路过,正好需要,谢谢楼主啦
2009-4-6 22:09
0
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错.请问可以在32位cpu上安装64位的windows吗.要用那个虚拟机软件?
2009-4-6 22:18
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
======================
KVM能高效运行,主要是利用了AMD CPU的AMD-V硬件技术的支持,因此,在32位cpu上安装64位的windows是不可能的,但是,反过来是可以的。。。。。

如果实在要在32位cpu上安装64位的windows,得用QEMU或SIMICS等模拟器进行模拟运行,速度比较慢。。。。

QEMU支持的主机CPU种类有:
   X86, X86_64,PowerPC

QEMU可运行或模拟的目标CPU种类有:
  X86,X86_64(用户测试阶段), ARM,SPARC,SPARC64(开发中),PowerPC(测试中),PowerPC64(开发中),MIPS, MIPS64,M68K等等
2009-4-7 11:14
0
雪    币: 148
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢.慢点我能接受.搞一个64位去.88
2009-4-7 11:54
0
游客
登录 | 注册 方可回帖
返回
//