⑴ 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。虛擬機佔用其中的一個核心的意思是,將一個線程從始至終分給虛擬機,而不會讓其他軟體插手。以上乃個人理解,如有不當,請大家包涵