⑴ virsh命令和调用libvirt api有什么区别
libvirt是用来管理虚拟机或虚拟化功能的软件集合,主要包括:libvirt API,libvirtd进程和virsh工具集三部分。最初的目的是为不同的hypervisor提供统一的管理接口。
The goal of libvirt: to provide a common and stable layer sufficient to securely manage domains on a node, possibly remote。
1. Libvirt API
不同版本的API具体参见:http://libvirt.org/hvsupport.html,主要为不同的虚拟化技术方案对外提供统一的接口,其设计思想为:
(1)isolation from HV API changes - 隔离底层硬件虚拟化接口对上层的影响
(2)portable across HV - 支持多种os,如linux,windows,solairs等
(3)rapid application development - 提供封装的API,加快软件开发的过程
(4)TLS, SASL, SSH, PolicyKit - 提供各种加密协议,保证了上层应用对下层资源的安全访问
通过封装最原始的C库,实现了多种编程语言的接口:Perl, Python, OCaml, Java, Ruby,C#, Php,并对目前在应用层编程中常用的协议进行封装,形成不同的协议库,方便在应用层编程中调用,目前主要支持:
(1)Mapping to CIM/DMTF: libvirt-cim
公共信息模型CIM,是一个与具体实现无关的、用于描述管理信息的概念性模型。
(2)Mapping to AMQP/QMF: libvirt-qmf
AMQP是一个提供统一消息服务的应用层标准协议,是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。
基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。
(3)Mapping to SNMP: libvirt-snmp
该库使得libvirt具备SNMP的功能,开发人员能够通过SNMP来监控和设置每个node上不同domain的信息
(4)Mapping to GObject: libvirt-glib
2. daemon进程(libvirtd )
该后台进程主要实现以下功能:
(1)远程代理
所有remote client发送来的命令,由该进程监测执行
(2)本地环境初始化
libvirt服务的启停,用户connection的响应等
(3)根据环境注册各种Driver(qemu, xen, storage…)的实现
不同虚拟化技术以Driver的形式实现,由于libvirt对外提供的是统一的接口,所以各个Driver就是实现这些接口, 即将Driver注册到libvirt中
3. virsh 工具集
即将libvirt API封装,以Command Line Interface提供的对外接口。
4. libvirt层次体系结构
为了便于理解,将libvirt分为三个层次结构,具体参见下图。
参照上图,来理一下通过virsh命令或接口创建虚拟机实例的代码执行路径:
(1)virsh命令或API接口c创建虚拟机 -- 接口层
virsh create vm.xml 或者 virDomainPtr virDomainCreateXML (virConnectPtr conn, const char * xmlDesc, unsigned int flags)
(2)调用libvirt提供的统一接口 -- 抽象驱动层
conn->driver->domainCreateXML(conn, xmlDesc, flags); //此处的domainCreateXML即抽象的统一接口,这里并不需要关心底层的driver是kvm,还是xen
(3)调用底层的相应虚拟化技术的接口 -- 具体驱动层
domainCreateXML = qemuDomainCreateXML; //如果driver=qemu,那么此处即调用的qemu注册到抽象驱动层上的函数qemuDomainCreateXML
(4)拼装shell命令,并执行
以qemu为例,qemuDomainCreateXML首先会拼装一条创建虚拟机的命令,比如qemu -hda disk.img,然后创建一个新的线程来执行
回过头来思考,libvirt通过4步,将最底层的直接在shell中输入命令来完成的操作进行了抽象封装,给应用程序开发人员提供了统一的,易用的接口。
5. 抽象驱动层
目前,libvirt以下几种类型的抽象驱动,每一种类型的驱动代表某以功能模块的抽象封装:
(1)虚拟化驱动(virDriverPtr)
(2)虚拟网络驱动(virNetworkDriverPtr)
(3)物理网卡驱(virInterfaceDriverPtr)
(4)存储驱动(virStorageDriverPtr)
(5)监控驱动(virDeviceMonitorPtr)
(6)安全驱动(virSecretDriverPtr)
(7)过滤驱动(virNWFilterDriverPtr)
(8)状态驱动(virStateDriverPtr)
⑵ VMware中virsh命令不可用是怎么回事儿
经过查看virsh命令帮助和上网查询,才得知virsh shutdown命令使用发送acpi指令来控制虚拟机的电源,
而kvm虚拟机安装linux系统时默认是没有安装acpi服务的,所以并不会做处理。据说安装windows会自动安装acpi服务,没测试过。
知道了原因、解决方法也就简单了、我们只需要在虚拟机里安装和启动acpid服务即可,执行命令如下:
[root@kvm_client_00 ~]# yum install acpid -y
[root@kvm_client_00 ~]# /etc/init.d/acpid restart //重新启动acpic服务,安装后默认会加入到开机启动的
最后这里笔者简单讲一下关于apcpid服务的工作原理。
⑶ virsh start jil的命令含义是什么
1,查看运行的虚拟机
virsh list
2,查看所有的虚拟机(关闭和运行的虚拟机)
virsh list --all
3,连接虚拟机
virsh console +域名(虚拟机的名称)
4,退出虚拟机
ctrl+]
5,关闭虚拟机
5.1 virsh shutdown +域名
这个时候我在virsh list发现 test02这个虚拟机还是在运行的,并没有关闭。
我们需要安装一个acpid的服务并启动它,什么是ACPI?
ACPI是Advanced Configuration and PowerInterface缩写,高级配置和电源管理接口。
acpid中的d则代表daemon。Acpid是一个用户空间的服务进程,它充当linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。
Acpid是一个用户空间的服务进程,它充当linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。
其实,说明了就是通过这个服务来执行电源关闭的动作,这也是为什么我们执行virsh shutdown +域名无法关机的原因。
(子机安装acpid服务)yum install -y acpid
/etc/init.d/acpid start
如果此时我没法进入子机安装acpi协议的话,那么就无法关掉该虚拟机,此时可以用下面这种方法。
5.2 virsh destroy +域名
这种方式的关闭,是一种删除的方式,只是在virsh list中删除了该虚拟机。
⑷ virsh attach-disk 是临时挂载吗
请你补充一下问题:linux系统上创建的kvm虚拟机操作系统版本问题有影响的,如果是虚拟机安装的操作系统rhel6.0,在命令行执行virsh attach-disk xxx是可以识别;但虚拟机操作系统是rhas4的情况,硬盘识别为hd*,ide磁盘不能进行热插拔,需要shutdown虚拟机,通过图形界面给虚拟机增加新的虚拟机硬件或在虚拟机的xml文件中添加新的磁盘信息均可实现;
⑸ 如何使用virt-clone命令快速克隆创建新的虚拟机
查看需要克隆的的源虚拟机镜像文件的信息
使用命令查看lion.disk镜像文件的详细信息:
$qemu-img info lion.disk
确保需要克隆的虚拟机处于关闭状态
使用如下命令关闭虚拟机lion:
$virsh shutdown lion
使用如下命令查看虚拟机lion的状态:
$virsh list -all
查看virt-clone命令的详细参数信息
使用如下命令:
$ vrit-clone --help
使用virt-clone命令创建一个新的虚拟机,命名为mouse
使用如下命令:
$virt-clone -o lion -n mouse -f /home/hxb/image/mouse.disk
查看并启动新创建的mouse虚拟机
这时候使用如下命令就可以查看到新创建的mouse虚拟机
$virsh list --all
$virsh start mouse
查看mouse虚拟机的配置文件
在/etc/libvirt/qemu目录下可以看到mouse.xml配置文件
通过VirtualManager工具连接到mouse虚拟机,进行主机名称和IP地址的修改
修改IP地址命令:
$ifconfig ens3 192.168.100.5 netmask 255.255.255.0
修改mouse虚拟机的主机名称,避免和之前的虚拟机同名
修改/etc/hosts文件
增加一行:
192.168.100.5 mouse
⑹ 我用了virsh list命令之后怎么获得这些虚拟机的VNC端口是多少,是5902还是5903之类的
# virsh mpxml centos6-1 |grep vnc
<graphics type='vnc' port='5901' autoport='no' listen='127.0.0.1'>
其中,centos6-1是我自己的虚拟机名字,port=‘5901’就是这个虚拟机的vnc端口;你可以换成你想查看的虚拟机的名字。如果想批量查看虚拟机的vnc端口,只要你的虚拟机的名字有规律,就可以用for循环,如下所示:[root@localhost ~]# for i in {1..8}
> do
> virsh mpxml centos6-$i |grep vnc
> done
<graphics type='vnc' port='5901' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5902' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5904' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5905' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5906' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5907' autoport='no' listen='127.0.0.1'>
<graphics type='vnc' port='5908' autoport='no' listen='127.0.0.1'>
⑺ linux kvm 的虚拟机处于暂停状态怎么开机 和 KVM-Virsh指令
我想知道KVM虚拟机,指的是linux系统上的Kernel-based Virtual Machine吗?如果是的话,就把问题写的详细一些,打不开指的是什么? 如果是VM暂停的话,可以执行一下这些命令试试 virsh list --all (得到VM的名字) virsh resume VM名字
⑻ virsh list-all的命令含义
1,查看运行的虚拟机
virsh list
2,查看所有的虚拟机(关闭和运行的虚拟机)
virsh list --all
3,连接虚拟机
virsh console +域名(虚拟机的名称)
4,退出虚拟机
ctrl+]
5,关闭虚拟机
5.1 virsh shutdown +域名
这个时候我在virsh list发现 test02这个虚拟机还是在运行的,并没有关闭。
我们需要安装一个acpid的服务并启动它,什么是ACPI?
ACPI是Advanced Configuration and PowerInterface缩写,高级配置和电源管理接口。
acpid中的d则代表daemon。Acpid是一个用户空间的服务进程,它充当linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。
Acpid是一个用户空间的服务进程,它充当linux内核与应用程序之间通信的接口,负责将kernel中的电源管理事件转发给应用程序。
其实,说明了就是通过这个服务来执行电源关闭的动作,这也是为什么我们执行virsh shutdown +域名无法关机的原因。
⑼ bash virsh command not found 怎么解决
如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command not found。那么
首先就要考虑root 的$PATH里是否已经包含了这些环境变量。
主要是这四个:/bin ,/usr/bin,/sbin,/usr/sbin。
四个主要存放的东东:
./bin:
bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。
/usr/bin:
主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、m、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
/sbin:
主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、mp、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。
⑽ 不使用virsh命令怎么改变虚拟机cpu数量及内存大小
先回答内存,是这样的:物理机内存4G,把虚拟机设成4G是没问题的,但是当虚拟机满载的时候会内存溢出。第二个虚拟机也是一样,你只要把虚拟机想成普通的软件或者游戏什么的就好了。内存不够用就会卡,或者内存溢出蓝屏,强制退出。VMWARE或VIRTUALBOX是想知道你给他分配内存的上限是什么,也就是说,你给我512,我最多用512,如果不够,虚拟机内存溢出,虚拟机死机。cpu是这样的:因为cpu有4个核心,4个线程,那么就相当于4个小cpu。虚拟机占用其中的一个核心的意思是,将一个线程从始至终分给虚拟机,而不会让其他软件插手。以上乃个人理解,如有不当,请大家包涵