三种方式创建虚拟机

1.qemu-kvm来创建虚拟机

通过阅读man qemu-kvm手册而清楚的。  于20160430阅读

[root@kvm1 ~]# /usr/libexec/qemu-kvm -machine help
[root@kvm1 ~]# /usr/libexec/qemu-kvm -M ?
[root@kvm1 ~]# /usr/libexec/qemu-kvm -cpu help
[root@kvm1 ~]# /usr/libexec/qemu-kvm -cpu ?
[root@kvm1 ~]# /usr/libexec/qemu-kvm -net nic,model=help
qemu: Supported NIC models: ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio centos7 图形界面下创建kvm虚拟机步骤
1.创建一个硬盘文件,三条命令效果一样,dd命令只能创建raw格式盘,不能创建qcow2格式盘
dd if=/dev/zero of=centos.img bs=1M count=10240
qemu-img create -f raw centos7.img 10G
qemu-img create -f qcow2 centos65-64.qcow2 10G
2.安装系统,不需要指定显示选项,默认是SDL
/usr/libexec/qemu-kvm -boot order=dc -hda centos65-64.qcow2 -cdrom CentOS-6.5-x86_64-minimal.iso -m 512 -smp 2 order=dc
The x86 PC uses: a, b (floppy 1 and 2), c (first hard disk), d (first CD-ROM), n-p (Etherboot from network adapter 1-4), hard disk boot is the default. To apply a particular boot order only on the first startup, specify it via once. -display sdl|vnc
-nographic
-curses
-vnc :0 -daemonize后台运行
-full-screen 3.启动系统,不加-boot c(这个选项是过时的,不推荐使用)也可以(应该是默认的)
/usr/libexec/qemu-kvm -boot c -hda test.img -m 512 &
/usr/libexec/qemu-kvm -hda test.img -m 512 &
下面这个也能启动,不过没有启动盘
/usr/libexec/qemu-kvm -m 512 4.在本机用vinagre去连接localhost:5900,便能安装与查看系统,但此时没有弄网络,所以宿主机与虚拟机互不相通
centos7 命令行界面下创建kvm虚拟机步骤

在cs72-minimal下不使用libvirt的方式,还是比较不懂,会创建,但没办法去连接管理来安装os

yum install qemu-kvm
yum install mlocate
ll /var/lib/mlocate/
updatedb
locate kvm
rpm -ql qemu-kvm-common|more
rpm -ql qemu-kvm|more
[root@2nd-kvm ~]# /usr/libexec/qemu-kvm -version
QEMU emulator version 1.5.3 (qemu-kvm-1.5.3-105.el7_2.4), Copyright (c) 2003-2008 Fabrice Bellard
mkdir /root/iso
mkdir /root/disk
cd /root/disk;qemu-img create -f qcow2 cs65.qcow2 10G
[root@2nd-kvm disk]# /usr/libexec/qemu-kvm
-boot order=dc
-hda cs65.qcow2 -cdrom ../iso/CentOS-6.5-x86_64-minimal.iso
-m 512 -smp 2 -name cs65
上面这个命令默认在本地启动一个ipv6 vnc连接,并且网络参数默认是-net nic -net user
[root@localhost ~]# /usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -m 1024
VNC server running on `::1:5900'
如果在安装系统时不指定相关参数,那么kvm就采用默认的显示-SDL(SDL这个必须有图形界面,就直接弹出一个窗口,等待用户交互安装),默认的网络(-net nic -net user)
所以就要对显示,网络进行指定参数,满足自己的需要。 加入这个,监听在ipv4的5900上,不加这个,直接在桌面环境下弹出一个窗口,这就是默认的sdl输出,此时不是vnc
-display vnc=:0
-vnc :0 -daemonize后台运行
上面两个参数的区别是-display是为了兼容xxx,可以看man手册,一般直接用-vnc :0或-spice port=9987,password=1234 -vga cirrus -vnc :0
-net bridge -net nic,model=virtio
-vga qxl -spice port=9987,password=1234  这两个通常连用 在qemu-kvm命令行中,添加“-nographic”参数可以完全关闭QEMU的图形界面输出,从而让QEMU在该模式下完全成为简单的命令行工具。而QEMU中模拟产生的串口被重定向到了当前的控制台(console)中,所以如果在客户机中对其内核进行配置从而让内核的控制台输出重定向到串口后,就依然可以在非图形模式下管理客户机系统或调试客户机的内核。
[root@my-host ~]# qemu-system-x86_64 --enable-kvm -m 1024 -smp 2 vm2.img -cdrom /data/nfs/images/CentOS-6.4-x86_64-minimal.iso --nographic -bios /usr/local/share/qemu/bios.bin -append console=ttyS0 -kernel /mnt/isolinux/vmlinuz -initrd /mnt/isolinux/initrd.img 在命令行直接安装虚拟机
mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /mnt
qemu-img create -f qcow2 cs66.qcow2 8G
/usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -cdrom CentOS-6.5-x86_64-bin-DVD1.iso -m 1024 -nographic -append console=ttyS0 -kernel /mnt/isolinux/vmlinuz -initrd /mnt/isolinux/initrd.img
kill 掉上面的进程,重启去掉一些参数再如下启动
/usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -m 1024 -nographic 宿主机是cs72,虚拟机是cs65
安装好系统之后,先用spice启动
1.先启动/usr/libexec/qemu-kvm -boot order=dc -hda cs65.qcow2 -m 1024 -spice port=9987,password=1234
2.windows的spice客户端去连接,进去之后,vi /boot/grub/grub.cfg,在内核行后加入console=ttyS0然后保存关机
3.再加-nographic参数后启动,/usr/libexec/qemu-kvm -boot order=dc -hda cs65.qcow2 -m 1024 -nographic
这样就在宿主机本地启动了

2.用virsh来创建

[root@2nd-kvm ~]# virsh start cs65
error: Failed to start domain cs65
error: Cannot access storage file '/root/disk/cs65.qcow2' (as uid:107, gid:107): Permission denied Changing /etc/libvirt/qemu.conf make working things.
Uncomment user/group to work as root. 第一步:
[root@kvm1 kvm]# qemu-img create -f qcow2 win7.qcow2 10G
Formatting 'win7.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off

第二步:
更多参数设置可参考liibvirt官网http://libvirt.org/drvqemu.html#xmlconfig
[root@kvm1 kvm]# vi text.xml <domain type='qemu'>
<name>win7</name>
<uuid></uuid>
<memory>2048000</memory>
<currentMemory>2048000</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='hd'/>
<boot dev='cdrom'/>
</os> <features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash> <devices>
<emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='cdrom'>
<source file='/root/iso/win7.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk> <disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/kvm/win7.qcow2'/>
<target dev='hda' bus='ide'/>
</disk> <interface type='bridge'>
<source bridge='br0'/>
<mac address="00:16:3e:5d:aa:a8"/>
</interface> <input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us'/>
</devices>
</domain>

第三步:
[root@kvm1 kvm]# virsh define test.xml
Domain win7 defined from test.xml
如果修改了xml文件,需要以下操作,先撤销再重定义
[root@kvm1 kvm]# virsh undefine win7
Domain win7 has been undefined
[root@kvm1 kvm]# virsh define test.xml
Domain win7 defined from test.xml [root@kvm1 kvm]# virsh list --all
Id Name State
----------------------------------------------------
2 opensuse running
- win7 shut off [root@kvm1 kvm]# virsh start win7
Domain win7 started [root@kvm1 kvm]# virsh vncdisplay win7
:1

第四步:
用vinagre去连接localhost:5901
登录后能看到操作系统安装的初始界面,开始安装系统,安装完成即表示镜像制作完成
但是出现蓝屏,怀疑machine有问题,不支持win7
<type arch='x86_64' machine='pc'>hvm</type> 注解:
virsh shutdown test_ubuntu //关闭虚拟机,如果关闭不了,可以查看http://blog.csdn.net/gg296231363/article/details/6891380
virsh destory test_ubuntu  //强制关闭虚拟机
virsh undefine test_ubuntu //删除虚拟机 kvm环境下可以使用shutdown命令让虚拟机关机,但不生效。
virsh shutdown vm-name
由于关机通过acpi电源管理接口来实现的
  3.1 首先配置文件里需要有这个选项
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  3.2 虚拟机内部需要有acpi服务并运行
    Windowns的虚拟机一般情况是默认已安装且运行的
    linux虚拟机例如Ubuntu虚拟机如果没有安装acpi服务,
    先执行apt-get install acpid进行安装并启动该服务,即可让虚拟机响应shutdown命令
 

3.virt-manager来创建

[root@kvm1 kvm]# qemu-img snapshot -c cen centos.raw
qemu-img: Could not create snapshot 'cen': -95 (Operation not supported)
快照这个功能只支持qcow2格式,raw不支持。其中-c是创建快照,-l是查看快照,-a是恢复快照,-d是删除快照。注意,创建磁盘快照时虚拟机需要处理关闭的状态。
[root@kvm1 kvm]# qemu-img convert -c -O qcow2 centos.raw centos.qcow2
[root@kvm1 kvm]# qemu-img snapshot -c centos-ori centos.qcow2
[root@kvm1 kvm]# qemu-img snapshot -l centos.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         centos-ori                0 2016-05-02 19:23:24   00:00:00.000
[root@kvm1 kvm]# qemu-img snapshot -a 1 centos.qcow2
qemu-img: Could not open 'centos.qcow2': Could not read snapshots: File too large
有两种解决办法
升级qemu-img为1.7以上,
或者因为centos.qcow2是从raw转换过来的,如果直接创建的是qcow2格式的,可能不会有这个问题(可以试一试)

各部分所对应的包

1.http://linux-kvm.org/
kvm阵营。
命令名qemu-kvm---同名包名或qemu-img---同名包名
安装qemu-kvm或者kvm,它们是kvm内核的用户空间工具

2.http://libvirt.org/index.html
libvirt阵营。
命令名virsh---包名libvirt-client
命令名libvirtd---包名libvirt-daemon

3.https://virt-manager.org/
virt-manager阵营。
命令名virt-manager---同名包名
命令名virt-install---包名在6和7下不一样

virt-install是rpm包python-virtinst里的一个工具,其实就是一个python写的脚本。它是qemu-kvm工具的人性化实现。可以利用该工具在终端下创建KVM guest主机。
centos6.5下面是这个包
python-virtinst
[root@localhost ~]# rpm -ql  python-virtinst|more
/usr/bin/virt-clone
/usr/bin/virt-convert
/usr/bin/virt-image
/usr/bin/virt-install
centos7下面是这个包
virt-install
[root@kvm1 ~]# rpm -ql virt-install
/usr/bin/virt-clone
/usr/bin/virt-install
/usr/bin/virt-xml

4.加载网桥模块和kvm模块
http://wiki.libvirt.org/page/Networking    桥网络相关设置

[root@localhost ~]# lsmod |grep brid
[root@localhost ~]# modprobe bridge
[root@localhost ~]# lsmod |grep brid
bridge                 83177  0
stp                     2218  1 bridge
llc                     5546  2 bridge,stp
[root@localhost ~]# lsmod |grep kvm
[root@localhost ~]# modprobe kvm
[root@localhost ~]# lsmod |grep kvm
kvm                   333172  0

brctl addbr br0
#> ifconfig
eth0      Link encap:Ethernet  HWaddr 00:CC:D0:99:EB:26
          inet6 addr: fe80::2b0:d0ff:fe99:eb26/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:86208855 errors:0 dropped:0 overruns:63 frame:0
          TX packets:77098217 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3871506445 (3692.1 Mb)  TX bytes:266311184 (253.9 Mb)
          Interrupt:5 Base address:0xec00
eth1      Link encap:Ethernet  HWaddr 00:CC:03:D8:3A:1A
          inet6 addr: fe80::201:3ff:fed8:3a1a/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:77087614 errors:0 dropped:0 overruns:0 frame:0
          TX packets:85110321 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:264995582 (252.7 Mb)  TX bytes:3672580334 (3502.4 Mb)
          Interrupt:9 Base address:0xec80
/etc/sysconfig/networking-scripts/ifcfg-eth0:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static

/etc/sysconfig/networking-scripts/ifcfg-eth1:
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static

#> brctl addif br0 eth0
#> brctl addif br0 eth1
#> ip link set br0 up
#> ip addr add 10.1.1.18/16  dev br0
#> route add default gw 10.1.1.1 dev br0
#> brctl show
bridge name  bridge id          STP enabled  interfaces
br0          8000.0030843e5aa2  no            eth0
                                                   eth1

ip addr help

ip link set dev br0 down

centos7桌面安装好后
网络桥接三步走,接着创建disk与iso目录,接着传iso,接着用virt-manager来建虚拟机就完事了。 [root@kvm1 img]# vi /etc/sysconfig/network-scripts/ifcfg-eno1
TYPE=Ethernet
DEVICE=eno1
ONBOOT=yes
BRIDGE=br0 [root@kvm1 img]# vi /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.10.199
PREFIX=24
GATEWAY=192.168.10.6
DNS1=8.8.8.8 service network restart与 systemctl restart NetworkManager没用
用下面的就可以了
systemctl restart network 另外,在RHEL系列系统中最好将NetworkManager这个程序结束掉,因为它并不能管理bridge的网络配置,反而它在后台运行则可能对网络设置有些干扰。
http://smilejay.com/2012/08/kvm-bridge-networking/
设置linux让网桥运行    配置网桥

1.我们需要让linux知道网桥,首先告诉它,我们想要一个虚拟的以太网桥接口:(这将在主机bridge上执行,不清楚的看看测试场景)
root@bridge:~> brctl addbr br0
2.其次,我们不需要STP(生成树协议)等。因为我们只有一个路由器,是绝对不可能形成一个环的。我们可以关闭这个功能。(这样也可以减少网络环境的数据包污染):
root@bridge:~> brctl stp br0 off
3.经过这些准备工作后,我们终于可以做一些立竿见影的事了。我们添加两个(或更多)以太网物理接口,意思是:我们将他们附加到刚生成的逻辑(虚拟)网桥接口br0上。
root@bridge:~> brctl addif br0 eth0
root@bridge:~> brctl addif br0 eth1
4.现在,原来我们的两个以太网物理接口变成了网桥上的两个逻辑端口。那两个物理接口过去存在,未来也不会消失。要不信的话,去看看好了。.现在他们成了逻辑网桥设备的一部分了,所以不再需要IP地址。下面我们将这些IP地址释放掉
root@bridge:~> ifconfig eth0 down
root@bridge:~> ifconfig eth1 down
root@bridge:~> ifconfig eth0 0.0.0.0 up
root@bridge:~> ifconfig eth1 0.0.0.0 up 好了!我们现在有了一个任何IP地址都没有的box w/o了。好了,这下如果你想通过TP配置你的防火墙或路由器的话,你就只能通过本地的控制端口了。你不会告诉我你的机器上连串行端口都没有吧?
注:上面红色部分其实是可选的,在试验中,我发现,就算不把原有的网卡地址释放掉,网桥也能工作!但是,为了更规范,或者说
为了避免有什幺莫名其妙的问题,最好还是按要求做,执行这四步吧! 5.最后,启用网桥root@bridge:~> ifconfig br0 up
可选: 我们给这个新的桥接口分配一个IP地址
root@bridge:~> ifconfig br0 10.0.3.129
或者把最后这两步合成一步:
root@bridge:~> ifconfig br0 10.0.3.129 up 关闭网桥命令
brctl delif ena eth1;
brctl delif ena eth0;
ifconfig ena down;
brctl delbr ena;

kvm管理工具之webvirtmgr

webvirtmgr管理kvm工具,只有web界面。

http://www.linux-kvm.org/page/Management_Tools
WebVirtMgr     Web service for managing VMs based on the KVM     WEB     Active     Only KVM; use libvirt     Apache License v2

https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr

下面是在管理机上做的
  271  yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
  272  yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
  274  yum -y install gcc python-devel
  388  pip install numpy

279  git clone git://github.com/retspen/webvirtmgr.git
  279  cd webvirtmgr
  285  less requirements.txt
  286  pip install -r requirements.txt
  287  ./manage.py syncdb
  288  ./manage.py collectstatic
  352  mv webvirtmgr/ /var/www/

296  vi /etc/nginx/conf.d/webvirtmgr.conf
  306  vi /etc/nginx/nginx.conf
  311  getenforce
  312  setenforce 0
  315  chkconfig supervisord on
  316  systemctl status supervisord
  317  systemctl start nginx
  318  systemctl status nginx

358  ssh root@192.168.10.115:8000 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
  360  chown -R nginx:nginx /var/www/webvirtmgr
  365  vi /etc/supervisord.d/webvirtmgr.ini

下面是在kvm机上做的。

qemu-kvm命令的更多相关文章

  1. 理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称

    本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...

  2. 理解 Linux 网络栈(3):QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端)

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

  3. 理解 QEMU/KVM 和 Ceph(1):QEMU-KVM 和 Ceph RBD 的 缓存机制总结

    本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...

  4. KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  5. KVM 介绍(7):使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照 (Nova Instances Snapshot Libvirt)

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  6. KVM 介绍(6):Nova 通过 libvirt 管理 QEMU/KVM 虚机 [Nova Libvirt QEMU/KVM Domain]

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  7. qemu kvm 虚拟化

    虚拟化: KVM是一个基于Linux内核的虚拟机,属于完全虚拟化.虚拟机监控的实现模型有两类:监控模型(Hypervisor)和宿主机模型(Host-based).由于监控模型需要进行处理器调度,还需 ...

  8. qemu/kvm/qemu-kvm/virsh的区别

    转自:http://www.2cto.com/os/201305/209596.html qemu/kvm/qemu-kvm/virsh的区别   qemu是一套虚拟机管理系统,kqemu是qemu的 ...

  9. 干货分享: 长达250页的Libvirt Qemu KVM的ppt,不实验无真相

    下载地址:Libvirt Qemu KVM 教程大全 http://files.cnblogs.com/popsuper1982/LibvirtQemuKVM.pptx 1. 概论 1.1 虚拟化的基 ...

  10. QEMU KVM Libvirt(12): Live Migration

    由于KVM的架构为 Libvirt –> qemu –> KVM 所以对于live migration有两种方式,一种是qemu + KVM自己的方式,一种是libvirt的方式,当然li ...

随机推荐

  1. Linux学习之CentOS--FTP服务原理及vsfptd的安装、配置

    本篇随笔将讲解FTP服务的原理以及vsfptd这个最常用的FTP服务程序的安装与配置... 一.FTP服务原理 FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文 ...

  2. Git的环境搭建

    Git时当下流行的分布式版本控制系统. 集中式版本控制系统的版本库是集中存放在中央处理器的,所以开发者要先从中央服务器获取最新的版本,编码后再将自己的代码发送给中央处理器.集中式版本控制系统最大的缺点 ...

  3. CF700C (枚举+tarjan)

    Problem Break up (CF700C) 题目大意 给一张n个点,m条边的无向图,有边权,和起点S,终点T. (n<=1000 , m<=30000) 要求最多割掉2条边,使得S ...

  4. arcgis显示其他国家语言

    接手一个韩国的项目,需要在arcmap中配置一个韩国地图并发布到arcserver中进行切图,给的韩国地图的shapefile文件中属性字段都是韩文的,在中文的系统中,arcMap中显示的韩文都是乱码 ...

  5. 【Avalon源码】dateGetter

    function dateGetter(name, size, offset, trim) { return function(date) { var value = date["get&q ...

  6. 简明python教程 --C++程序员的视角(八):标准库

    os模块 这个模块包含普遍的操作系统功能. 如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.一个例子就是使用os.sep可以取代操作系统特定的路径分割符. os.system() 执行li ...

  7. ZSDR017-客户订货价格和库存

    *----------------------------------------------------------------------*ZSDR017-客户订货价格和库存*---------- ...

  8. 简单实用的纯CSS百分比圆形进度条插件

    percircle是一款简单实用的纯CSS百分比圆形进度条插件.你不需要做任何设置,只需要按该圆形进度条插件提供的标准HTML结构来编写代码,就可以生成一个漂亮的百分比圆形进度条. 首先要做的就是引入 ...

  9. ajax 轮循

    使用 AJAX 进行异步加载轮询操作.简单代码如下: <script> // 执行ajax轮循操作 function polling(){ var xmlhttp; // 判断浏览器--创 ...

  10. js confirm用法

    <script> $('.tzshanchu').click(function(){ if(confirm('是否确认删除')){ alert('删除了') } });</scrip ...