知识点:kvm的使用,vnc的使用,和错误总结
一,安装虚拟机
1,查看已经安装的虚拟机列表及状态
virsh -c qemu:///system list --all
2,定义虚拟机映像
qemu-img create myname.img 10G
参数-f 可以指定镜像的格式 如: qemu-img create -f qcow2 myname.img 10G
常用的有 raw 和 qcow2。
3,安装虚拟机
virt-install \
--name ubuntutestname \ \\虚拟机的名字
--hvm \ \\ 使用全虚拟化(与para-irtualization向对),不支持xen hypervisor
--ram 1024 \ \\ 内存大小
--vcpus 1 \ \\ cpu个数
--disk path=/images/test/disk.img,size=10 \ \\ 之前创建的镜像的路径
--network network:default \ \\ 网络配置
--accelerate \
--vnc --vncport=5911 \ \\ 开启vnc 并 配置vnc的端口
--cdrom /images/iso/ubuntu-14.04-server-amd64.iso -d \\ 设置光驱获取虚拟光驱文件的路径 -d 指示从光驱启动( -c 指示从硬盘启动)
4,接着就开始图形化界面安装ubuntu了
5,管理虚拟机的命令
查看虚拟机列表
virsh -c qemu:///system list --all
启动虚拟机
virsh start ubuntuname
关闭虚拟机
virsh shutdown ubuntuname
强制关机,断电源
virsh destroy ubuntuname
删除虚拟机
virsh undefine ubuntuname
6,虚拟机迁移
将虚拟机从机器A迁移到虚拟机B上,如果两台机器的kvm环境一样的话。
只需要拷贝两个文件即可:
配置文件ubuntuname.xml 和 镜像文件myname.img
一般来说配置文件会放在目录下:/etc/libvirt/qemu/ubuntuname.xml
镜像文件就是之前你创建的镜像文件。
根据两个文件在A上的位置,修改配置文件ubuntuname.xml :
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/mydir/myname.img'/> #指定虚拟机的硬盘镜像文件的路径
<target dev='vda' bus='virtio'/>
</disk>
如果有必要也要修改:
<domain type='kvm' id='20'> #修改node6的id号
<name>ubuntutestname </name> #虚拟机node6的name
<uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fc7</uuid> #uuid必须修改,防止和已有的虚拟机id的冲突
然后运行命令即可:
virsh define ubuntuname.xml
如果环境配置一样的话,这样迁移很顺利,但是比如由ubuntu14.04上的虚拟机迁移到redhat6就会遇到各种错误,
比较正规的迁移还是要使用自带的迁移命令:virsh migrate 。具体使用可以使用说明
7,修改虚拟机的cpu和内存
virsh setmaxmem ubuntutest 1048576 --config # 修改虚拟机内存
Id: 2
Name: bbotte
UUID: bd22f444-ee7f-7f00-3d1b-1bb0d0857e43
OS Type: hvm
State: running
CPU(s): 4
CPU time: 152.3s
Max memory: 1048576 KiB
Used memory: 524288 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: none
Security DOI: 0
二,kvm错误总结
1,无法链接到/var/run/libvirt/libvirt-sock,解决方案如下所示,可能是权限,也可能是服务没哟启动
关于libvirt错误总结和解决方法: http://liuzhijun.iteye.com/blog/1783698
libvirt使用: http://smilejay.com/2013/03/libvirt-configuration-and-usage/
2,无法链接到libvirt服务,注意和上一个的区别,这个是用户目录下的,
注意和前一个区别,是用户目录下的libvirt-sock,一般出现在集群用户上,你不是root用户。
这个原因看virsh命令的 -c 就知道,没有指定到正确的URI解决方案如下:
所有命令加上uri即可:
virsh -c qemu:///system list --all
virsh -c qemu:///system start ubuntuname
virsh -c qemu:///system undefine ubuntuname
另一种解决方案是具体本地配置 certificates,具体的可以参考下面:
需要注意的是,即便是virt-install命令也会报上面的错误,同样是需要指定uri的,如: virt-install --connect=qeum:///system
不过这次用的是参数--connect 而不是 -c
3,virsh define 失败,找不到emulator
我从ubuntu迁移到redhat6上报错。
最好找一个本地机器上已经安装好的虚拟机配置文件,参考下它的配置文件。
4,虚拟机迁移的时候,需要拷贝镜像文件,镜像文件太大的话,占用空间和传输时间。
可以先本地建立较小的镜像文件,然后上传后,在进行扩容。
http://www.tuicool.com/articles/FnIZJvu
4.5 虚拟机迁移
被迁移的机器成为:sourceVM,所在服务器:source,目标服务器:target,#后是shell命令)
实验环境:
RedHat 6.2
Compiled against library: libvir 0.9.4
Using library: libvir 0.9.4
Using API: QEMU 0.9.4
Running hypervisor: QEMU 0.12.1
主要用两种方式,命令行virsh migrate 和图形界面 virt-mamge
命令行比较简单:
(如果ssh的端口不是默认22,可以写为 qemu+ssh://target:port/system)
No.1 Question::
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
解决办法很简单,因为默认情况下hostname 是 localhost,我们需要把目标的hostname修改一下,临时的也可以。
No.2 Question:
error: internal error Attempt to migrate guest to the same host 00020003-0004-0005-0006-000700080009
这个mail list 里有大牛说是服务器提供商的问题
你可以用#dmidecode -s system-uuid 查看一下这个ID,