-
-
[原创]LINUX平台下,一种在虚拟机中嵌套安装虚拟机的方法
-
发表于:
2009-4-6 14:58
5892
-
[原创]LINUX平台下,一种在虚拟机中嵌套安装虚拟机的方法
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期)