三种方式创建虚拟机
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机上做的。