kvm安装ubuntu虚拟机错误总结
2017-07-26 15:51
411 查看
知识点:kvm的使用,vnc的使用,和错误总结
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 。具体使用可以使用说明
virsh setmaxmem ubuntutest 1048576 --config # 修改虚拟机内存
# virsh dominfo bbotte #查看虚拟机信息
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
关于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
# virsh version
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
命令行比较简单:
#virsh migrate sourceVM qemu+ssh://target/system --live
(如果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修改一下,临时的也可以。
#hostname target
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,理论上是#virsh sysinfo | grep uuid 及# virsh capabilities | grep uuid
这三个ID是一样的。(之前看论坛里发的解决方法是需要下载一个dmidecode 命令的文件去替换系统的,达到修改的目的,不过今天我只是修改了libvirt的配置文件就可以了,可能是版本的问题)
我们修改一下libvirtd的配置文件
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
重启一下libvirtd 服务
# /etc/init.d/libvirtd restart
然后再查看一下
# virsh capabilities | grep uuid
No.3 Question:
error: unable to set user and group to '107:107' on '/image/sourceVM/disk.img': No such file or directory
如果顺利进入到这步的话,就很简单了,没有directory 直接创建一个就可以
注:创建的磁盘应该和源虚拟机的磁盘是一样的大小(更大应该是可以)和格式(raw还是qcow2)
No.4 Question::
error: Unable to resolve address 'target' service '49155': Name or service not known
《《Name or service not known》》这个相信大家都知道如何解决,/etc/hosts ...略过
再次执行迁移命令的时候,就基本不会报错了,我的实验环境是,如果你还有其他问题,请贴图回复,谢谢
虚拟机迁移和网络的带宽、虚拟机镜像的大小有直接关系,但是在线迁移最关心的应该是宕机时间,我测试的方法是一直ping target 服务器,大概停顿1s。
图形就比较简单了,处理上边所说的相同的FQDN,相同的UUID以外,就是建立连接时的ssh认证问题。
我这边的环境是必须要在使用virt-manage远程连接的时候添加ssh的认证,而且还要在终端登陆一次,使服务器的信息记录到目标机器的~/.ssh/knows 下(其实就是有一个yes/no的界面 输入yes即可)
建立连接以后,选中机器右键有一个Migrate的选项
弹出迁移的目标服务器,选择目标服务器,点击Migrate即可
迁移的问题大概就这么多。
剩下的是一些有关于迁移和其他的小细节:
在设置vnc监听端口时基本上有3种,
127.0.0.1 (默认):只有本机能访问,也就是virt-mange和virt-view
host_ip :除了本机的所有机器都可以访问
0.0.0.0: 以上两种的合集
在迁移时,需要把监听地址改为0.0.0.0,端口为-1 自动分配,因为如果不出意外的话,指定的端口会冲突!!!
如果没有.ssh/这个目录,可能做不了免认证(没有真实环境,不知道原因),没关系,我们可以用tcp代替ssh连接到目标服务器上。
方法如下:
1 修改/etc/libvirt/libvirtd.conf中
[/code] listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "sasl"[/code]
2 去掉/etc/sysconfig/libvirtd 中LIBVIRTD_ARGS="--listen" 的注释
3 修改/etc/libvirt/qemu.conf 中listen 为0.0.0.0 ,去掉password注释
4 运行以下命令可以添加用户
# saslpasswd2 -a libvirt admin
Password: xxxxxx
Again (for verification): xxxxxx
通过以下命令可以查看已经创建的用户
# sasldblistusers2 -f /etc/libvirt/passwd.db
fred@t60wlan.home.berrange.com: userPassword
5 重启libvirtd 服务 ok!
原文引用:xiaoli110 的BLOG
在的ssh的位置选择tcp,如果端口没有修改可以不填端口
测试连接的时候可以用 #virsh -c qemu+tcp://target/system list
还有一个问题是,迁移的时候可以拉服务器吗?正常的迁移时大多是推过去的,就想scp 和rsync一样,以拉虚拟机的方式迁移是可以的
迁移虚拟机对服务器的要求,之前看必须是两个相同的Cpu才可以,今天我测试的时候是发现可以从source迁移到target,回来就出问题了,发现时 sourcce 少了一些指令集,所以可以说不通的cpu也是可以做迁移的,只是目标服务器必须包含源服务器cpu的所有指令集。
The virtual machine on the redhat6 migrates to Ubuntu
http://www.jb51.net/LINUXjishu/349638.html
两个好的迁移资料:
https://libvirt.org/migration.html https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/sect-Virtualization-KVM_live_migration-Live_KVM_migration_with_virsh.html
5,Failed to connect to the hypervisor
http://wiki.libvirt.org/page/Failed_to_connect_to_the_hypervisor
6,控制台安装ubuntu
并不是所有的环境下都有图形界面的。安装的时候需要从控制台进行安装,
而且安装好虚拟机后也可以用console进行登录操作。
要想从控制台链接虚拟机,有两个设置的部分,
一个是安装虚拟的时候,要给虚拟机添加控制台设备,修改配置文件,或者安装虚拟机指定控制台参数,
另一个虚拟机自身开启控制体启动设置。如下:
其实要实现,并不难。首先,我们需要在 virsh启动的虚拟机XML文件 kvm201.xml 中插入以下标签
[html] view
plain copy
<span style="font-size:14px;"><devices>
<serial type='pty' tty='/dev/pts/4'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices></span>
注意,serial和console 标签必须添加在devcies 标签内,否则 libvirt库无法识别要添加console设备。
然后我们启动虚拟机,virsh create kvm201.xml,在虚拟机kvm201的/boot/grub/grub.cfg文件中添加console,如下图所示
如果是grub2系统,请修改/etc/default/grub文件,
GRUB_CMDLINE_LINUX=" console=tty0 console=ttyS0",然后update-grub
如果串口输入时,希望能看到并控制grub,那么还得加上下面这段话
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
这段表示grub本身支持串口输出
光是这样无法用console登录,只能看到启动信息,所以我们还要添加 ttyS0的ssh启动。 在 虚拟机中的 /etc/init/ttyS0.conf 添加如下信息
接着 重启虚拟机,reboot,virsh console kmv201,发现可以连接了
注意ubuntu是grub2,一般centos是grub,如果是grub2系统,请修改/etc/default/grub文件,
设置:GRUB_CMDLINE_LINUX=" console=tty0 console=ttyS0",然后update-grub。
因为还没有安装虚拟机,所以是对镜像文件进行修改。
具体参考如下链接:
https://serverfault.com/questions/257962/kvm-guest-installed-from-console-but-how-to-get-to-the-guests-console http://blog.csdn.net/dobell/article/details/14442457 http://www.topjishu.com/5084.html
设置好后使用如下命令控制台链接虚拟机:
virsh -c qemu:///system console ubuntutestname
7,redhat6创建镜像,安装ubuntu,安装过程中报错: the creation of swap space in partition #5 scsi failed
大致意思就是,不能在img创建,交换分区,不能创建主分区,无论是我自动还是手动分区都不可以。
一般来说是权限问题,我是在实验室集群上跑的,我的运行的接的是node87,但是我的img文件在node307,
只需要在将img镜像放在node87即可。
类似的问题,在使用mongodb的时候也遇见过,如果你运行命令的节点,或者说用户登录的节点是node163,
而你创建的db数据库在node307上,那么你就没办法启动数据,会报无法锁定数据库文件的错误。
同样的只需要将数据库移动到node163上即可。
额外了解一下:
hda一般是指IDE接口的硬盘,hda一般指第一块硬盘,类似的有hdb,hdc等
sda一般是指SATA接口的硬盘,sda一般指第一块硬盘,类似的有sdb,sdc等
现在的内核都会把硬盘,移动硬盘,U盘之类的识别为sdX的形式。
已经总结的很好了:http://www.linuxidc.com/Linux/2013-08/88719.htm
里面包括,网桥的配置等等。
需要注意的是,你还需要检查下:
首先开启内核转发的模块。
echo 1 > /porc/sys/net/ipv4/ip_forward #这是个暂时的做法,重启后就会失效,好的做法是:
vi /etc/sysctl.conf
修改其中的net.ipv4.ip_forward = 1
DNS的配置在/etc/resolv.conf中添加DNS的IP即可
然后要让它立即生效,需要执行命令:
sysctl -p
至此第一步搞定。
第二步添加NAT:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
#这条命令里的 eth0代表外网接口,-s 192.168.10.0/24代表内网段
2008.10.13配置时问题:
注意在配置时清空系统默认的iptables规则;
做iptables的机器的DNS要设置对,使它能正常上网。
禁用网络过滤器
向文件/etc/sysctl.conf添加以下代码:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
重启网络服务:service network restart
如果是bridge模式,在虚拟机里面你还要自己配置虚拟机的ip、dns、网关等。
首先物理网卡虚拟化:http://www.linuxidc.com/Linux/2013-08/88517.htm
http://www.linuxidc.com/Linux/2012-05/61445p2.htm http://www.linuxidc.com/Linux/2012-05/61445.htm
1. 本地连接
1.1 适用情况:当我们在kvm hypervisor上时,可使用本地连接的方式;当然也能使用网络连接的方式(回环网络)
1.2 连接工具:
1.2.1 virt-manager,和windows下的vmware很是相似,图形界面友好;
1.2.2 virt-viewer,连接命令:virt-viewer -c qemu:///system VMachinename;
1.2.3 console,连接命令:virsh console VMachinename;
2. 网络连接
2.1 适用情况:不能使用上面工具连接时
2.2 连接工具:
2.2.1 vnc,「事先配置好vnc服务」
连接命令: 1. virsh vncdisplay/domdisplay VMachinename 2. vncviewer ip:port,其中ip:port是由命令1获得;
或把上面两条命令结合起来:vncviewer $(virsh vncdisplay VMachinename)
2.2.2 ssh,「事先配置好ssh服务」
连接命令: ssh user@ip
2,开启vnc服务,无论是安装虚拟机时指定参数,还是修改参数文件。
virt-install --connect=qemu:///system --name ubuntu --hvm --ram 16384 --vcpus 8 \
--disk path=/home/hadoopcj/tzl_tmp1/july/ubuntu16.04.img,size=80 --network network:default --accelerate \
--graphics vnc,listen=0.0.0.0 \ \\ 开启vnc服务,并指定监听地址
--cdrom /home/hadoopcj/tzl_tmp1/july/ubuntu-16.04.2-desktop-amd64.iso -d
需要注意的是监听地址的设置,
vnc_listen = "0.0.0.0" //使监听所有端口,否则只监听本地,
监听本地是指只能从服务器本地登录指定虚拟机如 vncviewer 127.0.0.1:端口号(如5902),
如果监听所有端口则可以从远程通过服务器IP:端口号登录虚拟机,如10.92.0.51:5902
还需要注意的是,修改哪个配置文件?
# vi /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
说明1:vnclisten 默认绑定127.0.0.1 在配置文件里指定VNC 绑定0.0.0.0IP,就不用在安装kvm虚拟机时指定vnclisten参数了。
说明2:在虚拟主机上有很多个虚拟机的时候,需要指定每个虚拟机的端口,否则将会很乱。
修改qemu.conf就不用在每个虚拟机的xml文件里面修改vnc的地址了
3,vnc的使用
vnc在远程服务安装并器配置vnc服务端,
在本地安装vnc客户端。
ssh登录到服务端,使用vncpasswd命令创建自己的vnc登录密码,如下所示:
然后运行命令vncserver,新建一个vnc桌面,可以看到返回一个端口号,如下所示,
然后客户端vnc,输入IP:端口号。
ip是你服务器的ip。
端口号是vncserver返回的数字加上5900,如下所示,
然后输入你第一步设置的密码即可,不需要输入用户名。只需要密码。如下所示:
用完之后,用vncserver -kill :2 命令杀掉你第二步创建的vnc桌面服务。如下所示:
vnc 服务端配置,:
http://blog.csdn.net/gg296231363/article/details/6899655
4,vnc的闪退
有可能是vnc客户端颜色配置方案有问题,
只需修改vnc option里面Advanced-->expert-->ColourLevel的值为“rgb222” or “full”即可。
说明:rgb111--8 colours,rgb222--64 colours,pal8 -- 256 colours,full -- full colours
但我查看log文件,发现遇到的问题是:(没有解决)
Fatal IO error 11 (Resource temporarily unavailable) on X server :2.
感觉下面的两个链接可以解决:
http://blog.itpub.net/35489/viewspace-1967731/ https://ubuntuforums.org/archive/index.php/t-1922978.html
5,两张图片
一些链接:
KVM详解::http://blog.chinaunix.net/uid-30022178-id-5749329.html
http://www.cnblogs.com/wudonghang/p/5167145.html https://segmentfault.com/a/1190000000644069#articleHeader2 http://www.linuxidc.com/Linux/2012-06/61690.htm
基础教程:https://wenku.baidu.com/view/f5bc1b1ef90f76c660371a53.html
http://www.linuxidc.com/Linux/2015-03/114462.htm http://www.topjishu.com/5084.html
ubuntu教程:http://jingyan.baidu.com/article/b907e627cfffc946e7891cd5.html
http://blog.csdn.net/qiuhan0314/article/details/43667227 http://blog.csdn.net/linglong102/article/details/46313903 http://koumm.blog.51cto.com/703525/1290996
首先物理网卡虚拟化:http://www.linuxidc.com/Linux/2013-08/88517.htm
一,安装虚拟机
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 setvcpus ubuntutest 2 --maximum 4 --config # 修改虚拟机cpuvirsh setmaxmem ubuntutest 1048576 --config # 修改虚拟机内存
# virsh dominfo bbotte #查看虚拟机信息
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
# virsh version
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
命令行比较简单:
#virsh migrate sourceVM qemu+ssh://target/system --live
(如果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修改一下,临时的也可以。
#hostname target
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,理论上是#virsh sysinfo | grep uuid 及# virsh capabilities | grep uuid
这三个ID是一样的。(之前看论坛里发的解决方法是需要下载一个dmidecode 命令的文件去替换系统的,达到修改的目的,不过今天我只是修改了libvirt的配置文件就可以了,可能是版本的问题)
我们修改一下libvirtd的配置文件
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
重启一下libvirtd 服务
# /etc/init.d/libvirtd restart
然后再查看一下
# virsh capabilities | grep uuid
No.3 Question:
error: unable to set user and group to '107:107' on '/image/sourceVM/disk.img': No such file or directory
如果顺利进入到这步的话,就很简单了,没有directory 直接创建一个就可以
注:创建的磁盘应该和源虚拟机的磁盘是一样的大小(更大应该是可以)和格式(raw还是qcow2)
No.4 Question::
error: Unable to resolve address 'target' service '49155': Name or service not known
《《Name or service not known》》这个相信大家都知道如何解决,/etc/hosts ...略过
再次执行迁移命令的时候,就基本不会报错了,我的实验环境是,如果你还有其他问题,请贴图回复,谢谢
虚拟机迁移和网络的带宽、虚拟机镜像的大小有直接关系,但是在线迁移最关心的应该是宕机时间,我测试的方法是一直ping target 服务器,大概停顿1s。
图形就比较简单了,处理上边所说的相同的FQDN,相同的UUID以外,就是建立连接时的ssh认证问题。
我这边的环境是必须要在使用virt-manage远程连接的时候添加ssh的认证,而且还要在终端登陆一次,使服务器的信息记录到目标机器的~/.ssh/knows 下(其实就是有一个yes/no的界面 输入yes即可)
建立连接以后,选中机器右键有一个Migrate的选项
弹出迁移的目标服务器,选择目标服务器,点击Migrate即可
迁移的问题大概就这么多。
剩下的是一些有关于迁移和其他的小细节:
在设置vnc监听端口时基本上有3种,
127.0.0.1 (默认):只有本机能访问,也就是virt-mange和virt-view
host_ip :除了本机的所有机器都可以访问
0.0.0.0: 以上两种的合集
在迁移时,需要把监听地址改为0.0.0.0,端口为-1 自动分配,因为如果不出意外的话,指定的端口会冲突!!!
如果没有.ssh/这个目录,可能做不了免认证(没有真实环境,不知道原因),没关系,我们可以用tcp代替ssh连接到目标服务器上。
方法如下:
1 修改/etc/libvirt/libvirtd.conf中
[/code] listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "sasl"[/code]
2 去掉/etc/sysconfig/libvirtd 中LIBVIRTD_ARGS="--listen" 的注释
3 修改/etc/libvirt/qemu.conf 中listen 为0.0.0.0 ,去掉password注释
4 运行以下命令可以添加用户
# saslpasswd2 -a libvirt admin
Password: xxxxxx
Again (for verification): xxxxxx
通过以下命令可以查看已经创建的用户
# sasldblistusers2 -f /etc/libvirt/passwd.db
fred@t60wlan.home.berrange.com: userPassword
5 重启libvirtd 服务 ok!
原文引用:xiaoli110 的BLOG
在的ssh的位置选择tcp,如果端口没有修改可以不填端口
测试连接的时候可以用 #virsh -c qemu+tcp://target/system list
还有一个问题是,迁移的时候可以拉服务器吗?正常的迁移时大多是推过去的,就想scp 和rsync一样,以拉虚拟机的方式迁移是可以的
迁移虚拟机对服务器的要求,之前看必须是两个相同的Cpu才可以,今天我测试的时候是发现可以从source迁移到target,回来就出问题了,发现时 sourcce 少了一些指令集,所以可以说不通的cpu也是可以做迁移的,只是目标服务器必须包含源服务器cpu的所有指令集。
The virtual machine on the redhat6 migrates to Ubuntu
http://www.jb51.net/LINUXjishu/349638.html
两个好的迁移资料:
https://libvirt.org/migration.html https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/sect-Virtualization-KVM_live_migration-Live_KVM_migration_with_virsh.html
5,Failed to connect to the hypervisor
http://wiki.libvirt.org/page/Failed_to_connect_to_the_hypervisor
6,控制台安装ubuntu
并不是所有的环境下都有图形界面的。安装的时候需要从控制台进行安装,
而且安装好虚拟机后也可以用console进行登录操作。
要想从控制台链接虚拟机,有两个设置的部分,
一个是安装虚拟的时候,要给虚拟机添加控制台设备,修改配置文件,或者安装虚拟机指定控制台参数,
另一个虚拟机自身开启控制体启动设置。如下:
其实要实现,并不难。首先,我们需要在 virsh启动的虚拟机XML文件 kvm201.xml 中插入以下标签
[html] view
plain copy
<span style="font-size:14px;"><devices>
<serial type='pty' tty='/dev/pts/4'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
</devices></span>
注意,serial和console 标签必须添加在devcies 标签内,否则 libvirt库无法识别要添加console设备。
然后我们启动虚拟机,virsh create kvm201.xml,在虚拟机kvm201的/boot/grub/grub.cfg文件中添加console,如下图所示
如果是grub2系统,请修改/etc/default/grub文件,
GRUB_CMDLINE_LINUX=" console=tty0 console=ttyS0",然后update-grub
如果串口输入时,希望能看到并控制grub,那么还得加上下面这段话
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
这段表示grub本身支持串口输出
光是这样无法用console登录,只能看到启动信息,所以我们还要添加 ttyS0的ssh启动。 在 虚拟机中的 /etc/init/ttyS0.conf 添加如下信息
接着 重启虚拟机,reboot,virsh console kmv201,发现可以连接了
注意ubuntu是grub2,一般centos是grub,如果是grub2系统,请修改/etc/default/grub文件,
设置:GRUB_CMDLINE_LINUX=" console=tty0 console=ttyS0",然后update-grub。
因为还没有安装虚拟机,所以是对镜像文件进行修改。
具体参考如下链接:
https://serverfault.com/questions/257962/kvm-guest-installed-from-console-but-how-to-get-to-the-guests-console http://blog.csdn.net/dobell/article/details/14442457 http://www.topjishu.com/5084.html
设置好后使用如下命令控制台链接虚拟机:
virsh -c qemu:///system console ubuntutestname
7,redhat6创建镜像,安装ubuntu,安装过程中报错: the creation of swap space in partition #5 scsi failed
大致意思就是,不能在img创建,交换分区,不能创建主分区,无论是我自动还是手动分区都不可以。
一般来说是权限问题,我是在实验室集群上跑的,我的运行的接的是node87,但是我的img文件在node307,
只需要在将img镜像放在node87即可。
类似的问题,在使用mongodb的时候也遇见过,如果你运行命令的节点,或者说用户登录的节点是node163,
而你创建的db数据库在node307上,那么你就没办法启动数据,会报无法锁定数据库文件的错误。
同样的只需要将数据库移动到node163上即可。
额外了解一下:
hda一般是指IDE接口的硬盘,hda一般指第一块硬盘,类似的有hdb,hdc等
sda一般是指SATA接口的硬盘,sda一般指第一块硬盘,类似的有sdb,sdc等
现在的内核都会把硬盘,移动硬盘,U盘之类的识别为sdX的形式。
三,配置虚拟机网路环境
物理网卡一般是eth0,网桥是虚拟的,相当于二层交换机,它可以有很多接口,配置好网桥后,就可以将物理网卡eth0和虚拟机网卡都链接到br网桥交换机上。如下所示:已经总结的很好了:http://www.linuxidc.com/Linux/2013-08/88719.htm
里面包括,网桥的配置等等。
需要注意的是,你还需要检查下:
首先开启内核转发的模块。
echo 1 > /porc/sys/net/ipv4/ip_forward #这是个暂时的做法,重启后就会失效,好的做法是:
vi /etc/sysctl.conf
修改其中的net.ipv4.ip_forward = 1
DNS的配置在/etc/resolv.conf中添加DNS的IP即可
然后要让它立即生效,需要执行命令:
sysctl -p
至此第一步搞定。
第二步添加NAT:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
#这条命令里的 eth0代表外网接口,-s 192.168.10.0/24代表内网段
2008.10.13配置时问题:
注意在配置时清空系统默认的iptables规则;
做iptables的机器的DNS要设置对,使它能正常上网。
禁用网络过滤器
向文件/etc/sysctl.conf添加以下代码:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
重启网络服务:service network restart
如果是bridge模式,在虚拟机里面你还要自己配置虚拟机的ip、dns、网关等。
首先物理网卡虚拟化:http://www.linuxidc.com/Linux/2013-08/88517.htm
http://www.linuxidc.com/Linux/2012-05/61445p2.htm http://www.linuxidc.com/Linux/2012-05/61445.htm
四,vnc链接虚拟机
1,链接虚拟机的方式1. 本地连接
1.1 适用情况:当我们在kvm hypervisor上时,可使用本地连接的方式;当然也能使用网络连接的方式(回环网络)
1.2 连接工具:
1.2.1 virt-manager,和windows下的vmware很是相似,图形界面友好;
1.2.2 virt-viewer,连接命令:virt-viewer -c qemu:///system VMachinename;
1.2.3 console,连接命令:virsh console VMachinename;
2. 网络连接
2.1 适用情况:不能使用上面工具连接时
2.2 连接工具:
2.2.1 vnc,「事先配置好vnc服务」
连接命令: 1. virsh vncdisplay/domdisplay VMachinename 2. vncviewer ip:port,其中ip:port是由命令1获得;
或把上面两条命令结合起来:vncviewer $(virsh vncdisplay VMachinename)
2.2.2 ssh,「事先配置好ssh服务」
连接命令: ssh user@ip
2,开启vnc服务,无论是安装虚拟机时指定参数,还是修改参数文件。
virt-install --connect=qemu:///system --name ubuntu --hvm --ram 16384 --vcpus 8 \
--disk path=/home/hadoopcj/tzl_tmp1/july/ubuntu16.04.img,size=80 --network network:default --accelerate \
--graphics vnc,listen=0.0.0.0 \ \\ 开启vnc服务,并指定监听地址
--cdrom /home/hadoopcj/tzl_tmp1/july/ubuntu-16.04.2-desktop-amd64.iso -d
需要注意的是监听地址的设置,
vnc_listen = "0.0.0.0" //使监听所有端口,否则只监听本地,
监听本地是指只能从服务器本地登录指定虚拟机如 vncviewer 127.0.0.1:端口号(如5902),
如果监听所有端口则可以从远程通过服务器IP:端口号登录虚拟机,如10.92.0.51:5902
还需要注意的是,修改哪个配置文件?
# vi /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
说明1:vnclisten 默认绑定127.0.0.1 在配置文件里指定VNC 绑定0.0.0.0IP,就不用在安装kvm虚拟机时指定vnclisten参数了。
说明2:在虚拟主机上有很多个虚拟机的时候,需要指定每个虚拟机的端口,否则将会很乱。
修改qemu.conf就不用在每个虚拟机的xml文件里面修改vnc的地址了
3,vnc的使用
vnc在远程服务安装并器配置vnc服务端,
在本地安装vnc客户端。
ssh登录到服务端,使用vncpasswd命令创建自己的vnc登录密码,如下所示:
然后运行命令vncserver,新建一个vnc桌面,可以看到返回一个端口号,如下所示,
然后客户端vnc,输入IP:端口号。
ip是你服务器的ip。
端口号是vncserver返回的数字加上5900,如下所示,
然后输入你第一步设置的密码即可,不需要输入用户名。只需要密码。如下所示:
用完之后,用vncserver -kill :2 命令杀掉你第二步创建的vnc桌面服务。如下所示:
vnc 服务端配置,:
http://blog.csdn.net/gg296231363/article/details/6899655
4,vnc的闪退
有可能是vnc客户端颜色配置方案有问题,
只需修改vnc option里面Advanced-->expert-->ColourLevel的值为“rgb222” or “full”即可。
说明:rgb111--8 colours,rgb222--64 colours,pal8 -- 256 colours,full -- full colours
但我查看log文件,发现遇到的问题是:(没有解决)
Fatal IO error 11 (Resource temporarily unavailable) on X server :2.
感觉下面的两个链接可以解决:
http://blog.itpub.net/35489/viewspace-1967731/ https://ubuntuforums.org/archive/index.php/t-1922978.html
5,两张图片
一些链接:
KVM详解::http://blog.chinaunix.net/uid-30022178-id-5749329.html
http://www.cnblogs.com/wudonghang/p/5167145.html https://segmentfault.com/a/1190000000644069#articleHeader2 http://www.linuxidc.com/Linux/2012-06/61690.htm
基础教程:https://wenku.baidu.com/view/f5bc1b1ef90f76c660371a53.html
http://www.linuxidc.com/Linux/2015-03/114462.htm http://www.topjishu.com/5084.html
ubuntu教程:http://jingyan.baidu.com/article/b907e627cfffc946e7891cd5.html
http://blog.csdn.net/qiuhan0314/article/details/43667227 http://blog.csdn.net/linglong102/article/details/46313903 http://koumm.blog.51cto.com/703525/1290996
首先物理网卡虚拟化:http://www.linuxidc.com/Linux/2013-08/88517.htm
相关文章推荐
- CentOS-6.7安装KVM及创建ubuntu14.04-server虚拟机
- 虚拟机上-ubuntu安装openssh-server 报依赖错误的解决过程
- 安装ubuntu已将该虚拟机配置 为使用64位客户机操作系统错误
- VMWare+Ubuntu+KVM+VNC虚拟机安装配置
- Linux之win764位下基于EasyBCD的硬盘安装ubuntu32位双系统一些错误总结
- Ubuntu 12.04 安装KVM 管理虚拟机
- 虚拟机下Ubuntu安装VMWare Tools出现错误“找不到kernel header文件路径”解决办法
- ubuntu14.04 安装HAXM(KVM)提升android虚拟机Android x8运行速度
- 安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结
- 〖Linux〗Ubuntu中使用KVM安装虚拟机
- 在ubuntu16下面通过kvm+lvm安装ubuntu16的虚拟机
- ubuntu apt-get 安装错误总结
- 虚拟机Ubuntu 13.04 在Easy Install 下安装vmware tools 过程及遇到的问题总结
- ubuntu14.04 安装HAXM(KVM)提升android虚拟机Android x8运行速度
- 用虚拟机KVM安装ubuntu server不能选择中文安装,否则肯定安装失败
- ubuntu上编译安装mysql5.7.x【多次错误之后总结的方法】
- [总结]联想笔记本E460/虚拟机VMware10.0+Ubuntu14.04+opencv+ROS+PCL+OpenNI+g2o+DSO+Pangolin+win7(Ubuntu双系统)安装过程整理
- 安装Xen、创建Xen虚拟机、使用Xen虚拟机过程中经常出现的错误总结
- Ubuntu12.04.4 Vmware 虚拟机安装总结
- ubuntu安装chrome及常见错误总结