【KVM系列05】Libvirt 介绍
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第五章 Libvirt 介紹
1. Libvirt 是什么
1.1 Libvirt C API
1.2 Libvirt XML 定義
1.3 Libvirt API 的實(shí)現(xiàn)
1.4 Libvirt 的 Python 綁定
2. QEMU/KVM libvirt 驅(qū)動(dòng)
2.1 架構(gòu)
2.2 安裝
2.3 libvirt log
3 使用 libvirt 編程來管理 KVM 虛機(jī)的實(shí)例
【KVM系列文章】https://blog.csdn.net/baidu_37107022/article/details/88812463
?
1. Libvirt 是什么
為什么需要Libvirt?
Libvirt提供了什么?
?? ? 目前,libvirt 已經(jīng)成為使用最為廣泛的對(duì)各種虛擬機(jī)進(jìn)行管理的工具和應(yīng)用程序接口(API),而且一些常用的虛擬機(jī)管理工具(如virsh、virt-install、virt-manager等)和云計(jì)算框架平臺(tái)(如OpenStack、OpenNebula、Eucalyptus等)都在底層使用libvirt的應(yīng)用程序接口。
? ? ? ? ? ? ? ? ? ? ? ? ???(SLE 11)
1.1 Libvirt C API
1.1.1 Libvirti API 所管理的主要對(duì)象
| 對(duì)象 | 解釋 |
| Domain (域) | 指運(yùn)行在由Hypervisor提供的虛擬機(jī)器上的一個(gè)操作系統(tǒng)實(shí)例(常常是指一個(gè)虛擬機(jī))或者用來啟動(dòng)虛機(jī)的配置。 |
| Hypervisor | 一個(gè)虛擬化主機(jī)的軟件層 |
| Node (主機(jī)) | 一臺(tái)物理服務(wù)器。 |
| Storage pool (存儲(chǔ)池) | 一組存儲(chǔ)媒介的集合,比如物理硬盤驅(qū)動(dòng)器。一個(gè)存儲(chǔ)池被劃分為小的容器稱作卷。卷會(huì)被分給一個(gè)或者多個(gè)虛機(jī)。 |
| Volume (卷) | 一個(gè)從存儲(chǔ)池分配的存儲(chǔ)空間。一個(gè)卷會(huì)被分給一個(gè)或者多個(gè)域,常常成為域里的虛擬硬盤。 |
1.1.2 對(duì)象的管理模型
| 對(duì)象名稱 | 對(duì)象 | Python 類 | 描述 |
| Connect | 與 Hypervisor的連接 | virConnectPtr | 在調(diào)用任何 API 去管理一個(gè)本地或者遠(yuǎn)端的Hypervisor前,必須建立和這個(gè)Hypervisor的連接。 |
| Domain | Guest domain | virDomainPtr | 用于列舉和管理已有的虛機(jī),或者創(chuàng)建新的虛機(jī)。唯一標(biāo)識(shí):ID,Name,UUID。一個(gè)域可能是暫時(shí)性的或者持久性的。暫時(shí)性的域只能在它運(yùn)行期間被管理。持久性的域在主機(jī)上保存了它的配置。 |
| Virtual Network | 虛擬網(wǎng)絡(luò) | virNetworkPtr | 用于管理虛機(jī)的網(wǎng)絡(luò)設(shè)備。唯一標(biāo)識(shí):Name,UUID。一個(gè)虛擬網(wǎng)絡(luò)可能是暫時(shí)性的或者持久性的。每個(gè)主機(jī)上安裝libvirt后,它都有一個(gè)默認(rèn)的網(wǎng)絡(luò)設(shè)備“default”。它向該主機(jī)上運(yùn)行的虛機(jī)提供DHCP服務(wù),以及通過NAT連接到主機(jī)上。 |
| Storage Pool | 存儲(chǔ)池 | virStoragePoolPtr | 用于管理虛擬機(jī)內(nèi)的所有存儲(chǔ),包括 local disk, logical volume group, iSCSI target, FibreChannel HBA and local/network file system。唯一標(biāo)識(shí):Name,UUID。一個(gè)存儲(chǔ)池可能是暫時(shí)性的或者持久性的。Pool 的 type 可以是??dir,?fs,?netfs,?disk,?iscsi,?logical,?scsi,mpath,?rbd,?sheepdog,?gluster 或者?zfs。 |
| Storage Volume?? | 存儲(chǔ)卷 | virStorageVolPtr | 用于管理一個(gè)存儲(chǔ)池內(nèi)的存儲(chǔ)塊,包括一個(gè)池內(nèi)分配的塊、磁盤分區(qū)、邏輯卷、SCSI/iSCSI Lun,或者一個(gè)本地或者網(wǎng)絡(luò)文件系統(tǒng)內(nèi)的文件等。唯一標(biāo)識(shí):Name,Key,Path。 |
| Host device? | 主機(jī)設(shè)備 | virNodeDevPtr | 用于管理主機(jī)上的物理硬件設(shè)備,包括?the physical USB or PCI devices and logical devices these provide, such as a NIC, disk, disk controller, sound card, etc。唯一標(biāo)識(shí):Name。 |
1.1.3 API 的簡(jiǎn)單分類
Libvirt API 就是對(duì)各種對(duì)象的各種操作,包括基本的增、刪、改、查操作和其它操作。
| 對(duì)象 | 增 | 刪 | 改 | 查 | 其它 |
| Connect | virConnectOpen virConnectOpenAuth virConnectOpenReadOnly | virConnectClose | virConnectSetKeepAlive | ||
| Strorage pool | virStoragePoolBuild virStoragePoolCreate virStoragePoolCreateXML virStoragePoolDefineXML | virStoragePoolDelete virStoragePoolDestroy virStoragePoolFree virStoragePoolUndefine | virStoragePoolRefresh virStoragePoolSetAutostart | virConnectFindStoragePoolSources virConnectListAllStoragePools virConnectListDefinedStoragePools virConnectListStoragePools virConnectNumOfDefinedStoragePools virConnectNumOfStoragePools virStoragePoolGetInfo/Name/UUID/UUIDString/XMLDesc ?virStoragePoolIsActive/Persistent virStoragePoolLookupByName/UUID/UUIDString/Volume virStoragePoolRef | virStoragePoolGetAutostart virStoragePoolGetConnect virStoragePoolNumOfVolumes virStoragePoolListAllVolumes virStoragePoolListVolumes |
| Storage volume | virStorageVolCreateXML virStorageVolCreateXMLFrom | virStorageVolDelete virStorageVolFree | virStorageVolResize virStorageVolUpload virStorageVolWipe virStorageVolWipePattern | virStorageVolGetConnect/Info/Key/Name/Path/XMLDesc ?virStorageVolLookupByKey/Name/Path virStorageVolRef | virStorageVolDownload |
| Network | virNetworkCreate virNetworkCreateXML virNetworkDefineXML | virNetworkDestroy virNetworkFree virNetworkUndefine | virNetworkSetAutostart virNetworkUpdate | virConnectListAllNetworks virConnectListDefinedNetworks virConnectListNetworks virConnectNumOfDefinedNetworks virConnectNumOfNetworks virNetworkGetBridgeName/DHCPLeases/Name/UUID/UUIDString/XMLDesc virNetworkIsActive/Persistent ?virNetworkLookupByName/UUID/UUIDString virNetworkGetAutostart virNetworkGetConnect | virConnectNetworkEventDeregisterAny virConnectNetworkEventGenericCallback virNetworkDHCPLeaseFree |
| Domain snapshot | virDomainSnapshotCreateXML | virDomainSnapshotDelete virDomainSnapshotFree | virDomainRevertToSnapshot | virDomainHasCurrentSnapshot virDomainListAllSnapshots virDomainSnapshotCurrent virDomainSnapshotGetConnect/Domain/Name/Parent/XMLDesc virDomainSnapshotHasMetadata virDomainSnapshotIsCurrent virDomainSnapshotListAllChildren virDomainSnapshotListChildrenNames virDomainSnapshotListNames virDomainSnapshotLookupByName virDomainSnapshotNum virDomainSnapshotNumChildren virDomainSnapshotRef | |
| Host | ? | virInitialize virNodeSetMemoryParameters virNodeSuspendForDuration | virConnectBaselineCPU virConnectCompareCPU virConnectGetCPUModelNames/Capabilities/Hostname/LibVersion/MaxVcpus/Sysinfo/Type/URI/Version virConnectIsAlive virConnectIsEncrypted virConnectIsSecure virGetVersion virNodeGetCPUMap/CPUStats?/CellsFreeMemory/FreeMemory/Info/MemoryParameters/MemoryStats?/ ?virNodeGetSecurityModel | virTypedParamsAddBoolean virTypedParamsAddDouble virTypedParamsAddFromString virTypedParamsAddInt virTypedParamsAddLLong virTypedParamsAddString virTypedParamsAddUInt virTypedParamsAddULLong virTypedParamsClear virTypedParamsFree virTypedParamsGet | |
| Interface | virInterfaceCreate virInterfaceDefineXML | virInterfaceDestroy virInterfaceFree virInterfaceUndefine | virInterfaceChangeBegin virInterfaceChangeCommit virInterfaceChangeRollback | virConnectListAllInterfaces virConnectListDefinedInterfaces virConnectListInterfaces virConnectNumOfDefinedInterfaces virConnectNumOfInterfaces virInterfaceGetConnect virInterfaceGetMACString virInterfaceGetName virInterfaceGetXMLDesc virInterfaceIsActive virInterfaceLookupByMACString virInterfaceLookupByName virInterfaceRef | |
| Net Filter | virNWFilterDefineXML | virNWFilterFree virNWFilterUndefine | virConnectListAllNWFilters virConnectListNWFilters virConnectNumOfNWFilters virNWFilterGetName virNWFilterGetUUID virNWFilterGetUUIDString virNWFilterGetXMLDesc virNWFilterLookupByName virNWFilterLookupByUUID virNWFilterLookupByUUIDString virNWFilterRef | ||
| Domain Event | virConnectDomainEventDeregister virConnectDomainEventDeregisterAny virConnectDomainEventDeviceAddedCallback virConnectDomainEventDeviceRemovedCallback | virConnectDomainEventAgentLifecycleCallback virConnectDomainEventBalloonChangeCallback virConnectDomainEventBlockJobCallback virConnectDomainEventCallback virConnectDomainEventDiskChangeCallback virConnectDomainEventGenericCallback virConnectDomainEventGraphicsCallback virConnectDomainEventIOErrorCallback virConnectDomainEventIOErrorReasonCallback virConnectDomainEventPMSuspendCallback virConnectDomainEventPMSuspendDiskCallback | |||
| Domain | virDomainCreate virDomainCreateLinux virDomainCreateWithFiles virDomainCreateWithFlags virDomainCreateXML virDomainCreateXMLWithFiles virDomainDefineXML virDomainDefineXMLFlags | virDomainDestroy virDomainDestroyFlags virDomainFree virDomainUndefine virDomainUndefineFlags virDomainUpdateDeviceFlags | virDomainAbortJob virDomainAddIOThread virDomainDelIOThread virDomainAttachDevicevirDomainAttachDeviceFlags virDomainDetachDevice virDomainDetachDeviceFlags virDomainBlockCommit virDomainBlockCopy virDomainBlockJobAbort virDomainBlockJobSetSpeed virDomainBlockPeek virDomainBlockPull virDomainBlockRebase virDomainBlockResize virDomainCoreDump virDomainCoreDumpWithFormat virDomainFSFreeze virDomainFSInfoFree virDomainFSThaw virDomainFSTrim virDomainInjectNMI virDomainInterfaceFree virDomainManagedSave virDomainManagedSaveRemove virDomainMigrate virDomainMigrate2 virDomainMigrate3 virDomainMigrateSetCompressionCache virDomainMigrateSetMaxDowntime virDomainMigrateSetMaxSpeed virDomainMigrateToURI virDomainMigrateToURI2 virDomainMigrateToURI3 virDomainOpenChannel virDomainOpenConsole virDomainOpenGraphics virDomainOpenGraphicsFD virDomainPMSuspendForDuration virDomainPMWakeup virDomainReboot virDomainReset virDomainRestore virDomainRestoreFlags virDomainResume virDomainSave virDomainSaveFlags virDomainSaveImageDefineXML virDomainScreenshot virDomainSendKey virDomainSendProcessSignal virDomainShutdown virDomainSetBlkioParameters virDomainSetBlockIoTune virDomainSetInterfaceParameters virDomainSetMaxMemory virDomainSetMemory virDomainSetMemoryFlags virDomainSetMemoryParameters virDomainSetMemoryStatsPeriod virDomainSetMetadata virDomainSetNumaParameters virDomainSetSchedulerParameters virDomainSetSchedulerParametersFlags virDomainSetTime virDomainSetUserPassword virDomainSetVcpus virDomainSetVcpusFlags | virConnectGetAllDomainStats virConnectGetDomainCapabilities virConnectListAllDomains virConnectListDefinedDomains virConnectListDomains virConnectNumOfDefinedDomains virConnectNumOfDomains virDomainBlockStats virDomainBlockStatsFlags virDomainGetAutostart virDomainGetBlkioParameters virDomainGetBlockInfo virDomainGetBlockIoTune virDomainGetBlockJobInfo virDomainGetCPUStats virDomainGetConnect virDomainGetControlInfo virDomainGetDiskErrors virDomainGetEmulatorPinInfo virDomainGetFSInfo virDomainGetHostname virDomainGetID virDomainGetIOThreadInfo virDomainGetInfo virDomainGetInterfaceParameters virDomainGetJobInfo virDomainGetJobStats virDomainGetMaxMemory virDomainGetMaxVcpus virDomainGetMemoryParameters virDomainGetMetadata virDomainGetName virDomainGetNumaParameters virDomainGetOSType virDomainGetSchedulerParameters virDomainGetSchedulerParametersFlags virDomainGetSchedulerType virDomainGetSecurityLabel virDomainGetSecurityLabelList virDomainGetState virDomainGetTime virDomainGetUUID virDomainGetUUIDString virDomainGetVcpuPinInfo virDomainGetVcpus virDomainGetVcpusFlags virDomainGetXMLDesc virDomainHasManagedSaveImage virDomainIOThreadInfoFree virDomainInterfaceAddresses virDomainInterfaceStats virDomainIsActive virDomainIsPersistent virDomainIsUpdated virDomainListGetStats virDomainLookupByID virDomainLookupByName virDomainLookupByUUID virDomainLookupByUUIDString virDomainMemoryPeek virDomainMemoryStats virDomainMigrateGetCompressionCache virDomainMigrateGetMaxSpeed virDomainPinEmulator ? virDomainPinIOThread virDomainPinVcpu virDomainPinVcpuFlags virDomainSaveImageGetXMLDesc virDomainStatsRecordListFree | virConnectDomainXMLFromNative virConnectDomainXMLToNative |
| Secret | virSecretDefineXML | virSecretFree virSecretUndefine | virSecretSetValue | virConnectListAllSecrets virConnectListSecrets virConnectNumOfSecrets virSecretGetConnect/UUID/UUIDString/UsageID/UsageType/Value/XMLDesc virSecretLookupByUUID/UUIDString/Usage virSecretRef | |
| Stream | virStreamNew | virStreamFree | virStreamFinish virStreamAbort virStreamRecv virStreamRecvAll virStreamSend virStreamSendAll | virStreamSinkFunc virStreamSourceFunc |
1.2 Libvirt XML 定義
Libvirt 使用 XML 來定義各種對(duì)象,其中,與 OpenStack Nova 關(guān)系比較密切的有:
| disk (磁盤) | 任何磁盤設(shè)備,包括軟盤(floppy)、硬盤(hard disk)、光驅(qū)(cdrom)或者半虛擬化驅(qū)動(dòng)都使用 元素來定義。 方式: 。其中:
(1)”volume“ 類型的 disk ? 'volume' device='disk'> 'qemu' type='raw'/> 'blk-pool0' volume='blk-pool0-vol0'/> 'hdk' bus='ide'/> 'file' snapshot='external'> "tap" type="aio" cache="default"/> '/var/lib/xen/images/fv0' startupPolicy='optional' /> 'hda' bus='ide'/> 'block' device='cdrom'> 'qemu' type='raw'/> 'hdd' bus='ide' tray='open'/> <readonly/> ? ?'network' device='cdrom'> 'qemu' type='raw'/> "http" name="url_path"> "hostname" port="80"/> 'hde' bus='ide' tray='open'/> <readonly/> ? ? | ? |
| Host device assignment (主機(jī)設(shè)備分配) | ? ?'subsystem' type='usb'> #USB 設(shè)備直接分配 'optional'> '0x1234'/> '0xbeef'/> '2'/> 'subsystem' type='pci' managed='yes'> #PCI 設(shè)備直接分配 '0x0000' bus='0x06' slot='0x02' function='0x0'/> '1'/> 'on' file='/etc/fake/boot.bin'/> ? | ? |
| Network interface (網(wǎng)卡) | 有幾種 interface 類型: (1)type = ‘network’ 定義一個(gè)連接 Virtual network 的 interface ? ?<interface?type='network'> 'default'/> #虛擬網(wǎng)絡(luò)的名稱為 ‘default’?<!--interface> ... <interface type='network'> 'default' portgroup='engineering'/> 'vnet7'/> "00:11:22:33:44:55"/> '09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> <!--interface> ? #virsh:attach-interface --domain d-2 --type network --source isolatednet1 --mac 52:53:00:4b:75:6f --config (2)type=‘birdge’ 定義一個(gè) Bridge to LAN(橋接到物理網(wǎng)絡(luò))的interface:前提是主機(jī)上存在一個(gè) bridge,該 bridge 已經(jīng)連到物理LAN。? ?<interface?type='bridge'>?#連接到 br0 'br0'/> <!--interface> <interface type='bridge'> #連接到br1 'br1'/> 'vnet7'/> "00:11:22:33:44:55"/> <!--interface> <interface type='bridge'> #連接到 Open vSwithc bridge ovsbr 'ovsbr'/> 'openvswitch'> 'menial' interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/> <!--interface> ? #virsh:attach-interface --domain d-2 --type bridge --source virbr0 --mac 52:22:33:44:55:66 --config (3)type=‘ethernet’ 定義一個(gè)使用指定腳本連接到 LAN 的 interface ?<interface?type='ethernet'> 'vnet7'/> '/etc/qemu-ifup-mynet'/> </interface> <interface?type='direct'?trustGuestRxFilters='no'> <source?dev='eth0'?mode='vepa'/> </interface> ? ?<interface?type='hostdev'?managed='yes'> <driver?name='vfio'/> <address?type='pci'?domain='0x0000'?bus='0x00'?slot='0x07'?function='0x0'/> <mac?address='52:54:00:6d:90:02'/> <virtualport?type='802.1Qbh'> <parameters?profileid='finance'/> </interface> ? | ? |
| network (網(wǎng)絡(luò)) | 1. bridge:定義一個(gè)用于構(gòu)造該虛擬網(wǎng)絡(luò)的網(wǎng)橋。? 2. domain:定義 DHCP server 的 DNS domain。 3. forward: 定義虛擬網(wǎng)絡(luò)直接連到物理 LAN 的方式. ”mode“指轉(zhuǎn)發(fā)模式。 ?(1) mode=‘nat’:所有連接到該虛擬網(wǎng)絡(luò)的虛擬的網(wǎng)絡(luò)都會(huì)經(jīng)過物理機(jī)器的網(wǎng)卡,并轉(zhuǎn)換成物理網(wǎng)卡的地址。 ? ?default <bridge?name="virbr0"?/> <forward?mode="nat"/> <ip?address="192.168.122.1"?netmask="255.255.255.0"> <range?start="192.168.122.2"?end="192.168.122.254"?/> <ip?family="ipv6"?address="2001:db8:ca2:2::1"?prefix="64"?/> ? 也可以指定公共的IP地址和端口號(hào)。 ?<forward?mode='nat'><address?start='1.2.3.4'?end='1.2.3.10'/> <forward?mode='nat'><port?start='500'?end='1000'/> ? ?local <bridge?name="virbr1"?/> <forward?mode="route"?dev="eth1"/> <ip?address="192.168.122.1"?netmask="255.255.255.0"> <range?start="192.168.122.2"?end="192.168.122.254"?/> <ip?family="ipv6"?address="2001:db8:ca2:2::1"?prefix="64"?/> ? (3) mode=‘bridge’:使用不受libvirt管理的bridge,比如主機(jī)上已有的bridge;open vswitch bridge;使用?macvtap's "bridge"??模式 ?host-bridge <forward?mode="bridge"/> <bridge?name="br0"/> ? ?<forward?mode='passthrough'> <interface?dev='eth10'/> <interface?dev='eth11'/> <interface?dev='eth12'/> <interface?dev='eth13'/> <interface?dev='eth14'/> ? (5) mode=‘hostdev’:直接分配主機(jī)上的網(wǎng)絡(luò)設(shè)備。 ?<forward?mode='hostdev'?managed='yes'> <driver?name='vfio'/> <address?type='pci'?domain='0'?bus='4'?slot='0'?function='1'/> <address?type='pci'?domain='0'?bus='4'?slot='0'?function='2'/> <address?type='pci'?domain='0'?bus='4'?slot='0'?function='3'/> | ? |
詳細(xì)的 XML 定義說明在?https://libvirt.org/format.html。
1.3 Libvirt API 的實(shí)現(xiàn)
libvirt API 的實(shí)現(xiàn)是在各個(gè) Hypervisor driver 和 Storage dirver 內(nèi)。Hypervisor 驅(qū)動(dòng)包括:
- LXC?- Linux Containers
- OpenVZ
- QEMU
- Test?- Used for testing
- UML?- User Mode Linux
- VirtualBox
- VMware ESX
- VMware Workstation/Player
- Xen
- Microsoft Hyper-V
- IBM PowerVM (phyp)
- Parallels
- Bhyve?- The BSD Hypervisor
1.4 Libvirt 的 Python 綁定
python-libvirt 包含 Libvirt 的 Python 語(yǔ)言綁定。安裝 libvirt 時(shí),默認(rèn)會(huì)安裝 python-libvirt 。?來源:?https://libvirt.org/python.html??https://pypi.python.org/pypi/libvirt-python?
Python API 和 C API 之間幾乎是一對(duì)一的映射關(guān)系,比如:?
#C API int virConnectNumOfDomains (virConnectPtr conn); int virDomainSetMaxMemory (virDomainPtr domain, unsigned long memory);#Python API virConnect::numOfDomains(self) virDomain::setMaxMemory(self, memory)?因此,libvirt 官網(wǎng)并沒有提供詳細(xì)的 python API 描述。
2. QEMU/KVM libvirt 驅(qū)動(dòng)
2.1 架構(gòu)
?Libvirtd 是一個(gè) daemon 進(jìn)程,可以被本地的virsh調(diào)用,也可以被遠(yuǎn)程的virsh調(diào)用
?Libvirtd 調(diào)用 qemu-kvm 操作KVM 虛擬機(jī)
這里有一個(gè) virsh 命令、Libvirt C API、 QEMU driver 方法 和 QEMU Monitor 命令的對(duì)照表(部分):
| virsh create XMLFILE | virDomainCreateXML() | qemudDomainCreate() | info cpus, cont, change vnc password, balloon (all indirectly) |
| virsh suspend GUEST | virDomainSuspend() | qemudDomainSuspend() | stop |
| virsh resume GUEST | virDomainResume() | qemudDomainResume() | cont |
| virsh shutdown GUEST | virDomainShutdown() | qemudDomainShutdown() | system_powerdown |
| virsh setmem GUEST MEM-KB | virDomainSetMemory() | qemudDomainSetMemory() | balloon (indirectly) |
| virsh dominfo GUEST | virDomainGetInfo() | qemudDomainGetInfo() | info balloon (indirectly) |
| virsh save GUEST FILENAME | virDomainSave() | qemudDomainSave() | stop, migrate exec |
| virsh restore FILENAME | virDomainRestore() | qemudDomainRestore() | cont |
| virsh dumpxml GUEST | virDomainDumpXML() | qemudDomainDumpXML() | info balloon (indirectly) |
| virsh attach-device GUEST XMLFILE | virDomainAttachDevice() | qemudDomainAttachDevice() | change, eject, usb_add, pci_add (all indirectly) |
| virsh detach-device GUEST XMLFILE | virDomainDetachDevice() | qemudDomainDetachDevice() | pci_del (indirectly) |
| virsh migrate GUEST DEST-URI | virDomainMigrate() | qemudDomainMigratePerform() | stop, migrate_set_speed, migrate, cont |
| virsh domblkstat GUEST | virDomainBlockStats() | qemudDomainBlockStats() | info blockstats |
| - | virDomainBlockPeek() | qemudDomainMemoryPeek() | memsave |
2.2 安裝
有三種方式來安裝 libvirt:
(1)下載 libvirt 的源代碼,然后編譯和安裝
(2)從各 Linux 的發(fā)行版中直接安裝,比如 Ubuntu 上運(yùn)行 apt-get install libvirt-bin
(3)從 git 上克隆 libvirt 的代碼,然后編譯和安裝
2.3 libvirt log
這篇文章?描述了 livbirt log。設(shè)置所有日志的方法是在 /etc/libvirt/libvirtd.conf?中添加下面的配置然后重啟 libvirt:
log_filters="1:libvirt 1:util 1:qemu" log_outputs="1:file:/var/log/libvirt/libvirtd.log"3 使用 libvirt 編程來管理 KVM 虛機(jī)的實(shí)例
?這里只描述基本的過程。具體的過程,下一篇文章會(huì)具體分析 Nova 中 libvirt 的使用。
總結(jié)
以上是生活随笔為你收集整理的【KVM系列05】Libvirt 介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【KVM系列04】KVM的I/O 设备直
- 下一篇: 【KVM系列06】Nova 通过 lib