Difference between revisions of "Kernel-based Virtual Machine (KVM)"
(53 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | [[wikipedia:Kernel-based_Virtual_Machine|Kernel-based Virtual Machine]] (KVM) is a [[virtualization]] module in the Linux kernel that allows the kernel to function as a hypervisor. KVM support dynamic memory management<ref>https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F</ref> and [[Live Migration]]<ref>https://www.linux-kvm.org/page/Migration</ref> since 2007 ([[kernel | + | [[wikipedia:Kernel-based_Virtual_Machine|Kernel-based Virtual Machine]] (KVM) ([[2007]]) is a [[virtualization]] module in the Linux kernel that allows the kernel to function as a hypervisor. KVM support dynamic memory management<ref>https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F</ref> and [[Live Migration]]<ref>https://www.linux-kvm.org/page/Migration</ref> since [[2007]] ([[Linux Kernel changelog|kernel version 2.6.20]]), among other features. |
− | KVM is included in all mayor distribution including Ubuntu and RHEL (RedHat), RedHat provides 2 version of KVM, the one included with RHEL which allows to run up to 4 VM or the one included with [[Red Hat Virtualization|RHV]] with unlimited VM.<ref>https://www.redhat.com/en/topics/virtualization/what-is-KVM</ref> | + | KVM is included in all mayor distribution including [[Ubuntu]] and RHEL (RedHat), RedHat provides 2 version of KVM, the one included with RHEL which allows to run up to 4 VM or the one included with [[Red Hat Virtualization|RHV]] with unlimited VM.<ref>https://www.redhat.com/en/topics/virtualization/what-is-KVM</ref> |
<code>[[systemd-cgtop]]</code> can be used for showing [[control group]]s resource utilization. | <code>[[systemd-cgtop]]</code> can be used for showing [[control group]]s resource utilization. | ||
Line 9: | Line 9: | ||
=== Config files and directories === | === Config files and directories === | ||
− | <code>/etc/[[libvirt]]/[[qemu]]</code> | + | * <code>/etc/[[libvirt]]/[[qemu]]</code> |
+ | * <code>[[/etc/libvirt/qemu.conf]]</code> | ||
+ | * <code>[[/etc/libvirt/virtlogd.conf]]</code> | ||
+ | * <code>[[/var/lib/libvirt/images/]]</code> | ||
=== Information === | === Information === | ||
Line 18: | Line 21: | ||
=== Operations === | === Operations === | ||
* Editing Virtual Machine configuration: <code>[[virsh edit]] $VM_ID</code> | * Editing Virtual Machine configuration: <code>[[virsh edit]] $VM_ID</code> | ||
− | * Create VM_MACHINE: <code>[[virsh define]] [[ | + | * Create VM_MACHINE: <code>[[virsh define]] [[MY_XML_VM_DEFINITION.XML]]</code><ref>https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example</ref> |
* Modifying [[CPU]]s: <code>virsh setvcpus $VM_NAME ([--maximum] [[--config] [--live] | [--current]])</code> // Can be live or offline in the next reboot <ref>http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug</ref> | * Modifying [[CPU]]s: <code>virsh setvcpus $VM_NAME ([--maximum] [[--config] [--live] | [--current]])</code> // Can be live or offline in the next reboot <ref>http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug</ref> | ||
** To check vcpu info: <code>[[virsh vcpuinfo]] $VM_NAME</code> | ** To check vcpu info: <code>[[virsh vcpuinfo]] $VM_NAME</code> | ||
* Modifying Memory: <code>[[virsh setmem]] <vm_name> <memsize></code> | * Modifying Memory: <code>[[virsh setmem]] <vm_name> <memsize></code> | ||
− | * Connection by console: <code>virsh console VM_NAME</code>. See also: <code>[[virt-manager]]</code> | + | * [[Enable serial console|Connection by console]]: |
− | * Clone a virtual machine: <code>virt-clone</code> | + | : <code>[[virsh console]] VM_NAME</code>. See also: <code>[[virt-manager]]</code> |
− | * Create image: <code>[[qemu-img]] create</code> | + | * Clone a virtual machine: |
− | * Resize image: <code>[[qemu-img]] resize</code> | + | :<code>virt-clone</code> |
− | * Create domain/virtual machine: <code>virt-install --autostart --check all=on --name VM_DOMAIN_NAME --memory VM_MEMORY_SIZE --vcpus VM_VCPUs --os-variant ubuntu18.04 --cdrom VM_INSTALLATION_MEDIA --disk /path/to/VM_STORAGE_POOL_NAME/VM_DOMAIN_NAME.qcow2 --noautoconsole --wait VM_CREATION_WAIT_TIME --network VM_NETWORK_SETTINGS</code> | + | * Create image: |
+ | :<code>[[qemu-img]] create</code> | ||
+ | * Resize image: | ||
+ | : <code>[[qemu-img]] resize</code> | ||
+ | * Create domain/virtual machine: <code>[[virt-install]] --autostart --check all=on --name VM_DOMAIN_NAME --memory VM_MEMORY_SIZE --vcpus VM_VCPUs --os-variant ubuntu18.04 --cdrom VM_INSTALLATION_MEDIA --disk /path/to/VM_STORAGE_POOL_NAME/VM_DOMAIN_NAME.qcow2 --noautoconsole --wait VM_CREATION_WAIT_TIME --network VM_NETWORK_SETTINGS</code> | ||
* <code>[[virsh migrate]]</code> | * <code>[[virsh migrate]]</code> | ||
Line 33: | Line 40: | ||
* <code>[[virsh domstats]]</code> | * <code>[[virsh domstats]]</code> | ||
− | === KVM Networking === | + | === [[KVM Networking]] === |
* <code>[[virsh net-list]]</code> | * <code>[[virsh net-list]]</code> | ||
* <code>[[virsh net-info]] YOUR_NET_NAME</code> | * <code>[[virsh net-info]] YOUR_NET_NAME</code> | ||
* <code>virsh net-destroy YOUR_NET_NAME</code> | * <code>virsh net-destroy YOUR_NET_NAME</code> | ||
− | See also: [[MacVTap]], virbr0, ovirtmgmt, [[virtio]]<ref>https://wiki.libvirt.org/page/Virtio</ref> and [[brctl]]. | + | See also: [[MacVTap]], virbr0, ovirtmgmt, [[virtio]]<ref>https://wiki.libvirt.org/page/Virtio</ref> and <code>[[brctl]]</code>. |
==== Activities ==== | ==== Activities ==== | ||
Line 75: | Line 82: | ||
== Hybernate VM == | == Hybernate VM == | ||
− | * <code>virsh save</code> | + | * <code>[[virsh save]]</code> |
== Performance == | == Performance == | ||
* <code>[[systemd-cgtop]]</code> can be used for showing control groups resource utilization. | * <code>[[systemd-cgtop]]</code> can be used for showing control groups resource utilization. | ||
+ | |||
+ | |||
+ | == KVM [[timeline]] == | ||
+ | * 2013 KVM virtual machine in [[ARM]] architecture [[Linux Kernel 3.9]] in April 2013 | ||
+ | * [[2009]] [[RHV]] | ||
+ | * [[2007]] [[Live Migration]] support | ||
== Activities == | == Activities == | ||
Line 84: | Line 97: | ||
# [[Install KVM in an Ubuntu Server]] following https://help.ubuntu.com/community/KVM/Installation instructions. | # [[Install KVM in an Ubuntu Server]] following https://help.ubuntu.com/community/KVM/Installation instructions. | ||
# Connect to KVM using [[Virt Manager]] (<code>brew install [[virt-manager]]</code> <ref>https://help.ubuntu.com/community/KVM/VirtManager</ref> | # Connect to KVM using [[Virt Manager]] (<code>brew install [[virt-manager]]</code> <ref>https://help.ubuntu.com/community/KVM/VirtManager</ref> | ||
− | # Create a KVM virtual machine with Ansible: [[ | + | # Create a KVM virtual machine with Ansible: [[ovirt-RHV module]] |
# Read about raw files and [[qcow2]] differences: https://www.berrange.com/posts/2017/02/10/the-surprisingly-complicated-world-of-disk-image-sizes/ | # Read about raw files and [[qcow2]] differences: https://www.berrange.com/posts/2017/02/10/the-surprisingly-complicated-world-of-disk-image-sizes/ | ||
+ | # Read StackOverflow most popular questions https://stackoverflow.com/questions/tagged/kvm?tab=Votes | ||
+ | * [[Virt-install Windows]]: [[Install virtio-win]] | ||
=== Snapshots === | === Snapshots === | ||
Line 96: | Line 111: | ||
* Live Migrate a machine between two servers<ref>https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/</ref>. | * Live Migrate a machine between two servers<ref>https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/</ref>. | ||
* [[Offline Migrate or move a virtual machine between two KVM servers without shared storage]]<ref>https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm</ref>: <code>[[virsh dumpxml]]</code> and <code>[[virsh define]]</code> | * [[Offline Migrate or move a virtual machine between two KVM servers without shared storage]]<ref>https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm</ref>: <code>[[virsh dumpxml]]</code> and <code>[[virsh define]]</code> | ||
+ | * Recover a VM using <code>[[virt-rescue]]</code> | ||
+ | |||
[[Backup]]: | [[Backup]]: | ||
* [[Create Live backups]] using <code>[[virsh blockcommit]]</code> | * [[Create Live backups]] using <code>[[virsh blockcommit]]</code> | ||
* Review [[Bacula]] Enterprise KVM plugin: http://www.bacula.lat/kvm-plugin-bacula-enterprise-quick-guide/?lang=en | * Review [[Bacula]] Enterprise KVM plugin: http://www.bacula.lat/kvm-plugin-bacula-enterprise-quick-guide/?lang=en | ||
− | * Review [[Bacula]] solution with <code>bpipe</code>: http://www.bacula.lat/kvm-hot-online-virtual-machines-backup-with-bacula-bpipe/?lang=en | + | * Review [[Bacula]] solution with <code>[[bpipe]]</code>: http://www.bacula.lat/kvm-hot-online-virtual-machines-backup-with-bacula-bpipe/?lang=en |
* Review Veritas [[Netbackup]] support for [[Red Hat Virtualization|RHV]] | * Review Veritas [[Netbackup]] support for [[Red Hat Virtualization|RHV]] | ||
+ | |||
+ | == Related terms == | ||
+ | * [[Avi Kivity]] | ||
+ | * [[VM-Exits]] | ||
+ | * [[Amazon Firecracker]] | ||
+ | * [[MacVTap]] device driver | ||
+ | * [[Ansible]] [[ovirt-RHV module]] (ovirt_vm) | ||
+ | * [[KubeVirt]] | ||
+ | * [[QEMU Logs]] | ||
+ | * [[OVirt]] and [[RHV]] | ||
+ | * <code>[[/dev/kvm]]</code> | ||
+ | * [[vhost_net]] kernel module | ||
+ | * [[KVM switch]] | ||
+ | * [[PCI passthrough]] | ||
+ | * [[AWS Nitro System]] | ||
== See also == | == See also == | ||
* {{virtinst}} | * {{virtinst}} | ||
* {{virt}} | * {{virt}} | ||
− | * | + | * {{virt-manager}} |
− | * | + | * {{libvirtd}} |
− | |||
− | |||
− | |||
− | |||
* {{QEMU}} | * {{QEMU}} | ||
* {{KVM}} | * {{KVM}} | ||
* {{Virtualization}} | * {{Virtualization}} | ||
− | + | ||
− | + | ||
Latest revision as of 18:16, 29 June 2022
Kernel-based Virtual Machine (KVM) (2007) is a virtualization module in the Linux kernel that allows the kernel to function as a hypervisor. KVM support dynamic memory management[1] and Live Migration[2] since 2007 (kernel version 2.6.20), among other features.
KVM is included in all mayor distribution including Ubuntu and RHEL (RedHat), RedHat provides 2 version of KVM, the one included with RHEL which allows to run up to 4 VM or the one included with RHV with unlimited VM.[3]
systemd-cgtop
can be used for showing control groups resource utilization.
Contents
Basic KVM commands[edit]
Config files and directories[edit]
Information[edit]
- Show information by pool:
virsh pool-info YOUR_POOL_NAME
virsh pool-list
virsh guestinfo
Operations[edit]
- Editing Virtual Machine configuration:
virsh edit $VM_ID
- Create VM_MACHINE:
virsh define MY_XML_VM_DEFINITION.XML
[4] - Modifying CPUs:
virsh setvcpus $VM_NAME ([--maximum] [[--config] [--live] | [--current]])
// Can be live or offline in the next reboot [5]- To check vcpu info:
virsh vcpuinfo $VM_NAME
- To check vcpu info:
- Modifying Memory:
virsh setmem <vm_name> <memsize>
- Connection by console:
virsh console VM_NAME
. See also:virt-manager
- Clone a virtual machine:
virt-clone
- Create image:
qemu-img create
- Resize image:
qemu-img resize
- Create domain/virtual machine:
virt-install --autostart --check all=on --name VM_DOMAIN_NAME --memory VM_MEMORY_SIZE --vcpus VM_VCPUs --os-variant ubuntu18.04 --cdrom VM_INSTALLATION_MEDIA --disk /path/to/VM_STORAGE_POOL_NAME/VM_DOMAIN_NAME.qcow2 --noautoconsole --wait VM_CREATION_WAIT_TIME --network VM_NETWORK_SETTINGS
virsh migrate
Monitoring[edit]
KVM Networking[edit]
virsh net-list
virsh net-info YOUR_NET_NAME
virsh net-destroy YOUR_NET_NAME
See also: MacVTap, virbr0, ovirtmgmt, virtio[6] and brctl
.
Activities[edit]
- Read KVM Network Performance - Best Practices and Tuning Recommendations [7]
- Learn about KVM Host Networking Configuration Choices https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaag/wkvm/wkvm_c_net.htm
Storage[edit]
File based (raw or qcow2) or block based.
- List Storage pools:
virsh pool-list
[8]virsh pool-list --all
- Show information by pool:
virsh pool-info YOUR_POOL_NAME
- List Volumes from a pool:
virsh vol-list YOUR_POOL_NAME
- Create pool:(RHEL 6 documentation [9])
virsh pool-define-as --name YOUR_POOL_NAME --type dir --target /your/path/YOUR_POOL_NAME/ virsh pool-build YOUR_POOL_NAME virsh pool-start YOUR_POOL_NAME virsh pool-autostart YOUR_POOL_NAME
- Create volume
virsh vol-create-as --format qcow2 --capacity VM_DISK_SIZE --pool VM_STORAGE_POOL_NAME --name VM_SERVER_NAME.qcow2
Snapshots [10][edit]
Snapshots can be offline or live and internal or external:
- RedHat recommend using external snapshots using
virsh snapshot-create-as
command. [11] - Live snapshot are not supported in RHEL 8[12]
- List snapshots:
virsh snapshot-list $DOMAIN
[13] - Create snapshot:
virsh snapshot-create-as --domain {VM-NAME} --name "{SNAPSHOT-NAME}"
- Revert snapshot:
virsh snapshot-revert --domain YOUR_DOMAIN --snapshotname YOUR_SNAPSHOT_NAME --running
Hybernate VM[edit]
Performance[edit]
systemd-cgtop
can be used for showing control groups resource utilization.
KVM timeline[edit]
- 2013 KVM virtual machine in ARM architecture Linux Kernel 3.9 in April 2013
- 2009 RHV
- 2007 Live Migration support
Activities[edit]
General[edit]
- Install KVM in an Ubuntu Server following https://help.ubuntu.com/community/KVM/Installation instructions.
- Connect to KVM using Virt Manager (
brew install virt-manager
[16] - Create a KVM virtual machine with Ansible: ovirt-RHV module
- Read about raw files and qcow2 differences: https://www.berrange.com/posts/2017/02/10/the-surprisingly-complicated-world-of-disk-image-sizes/
- Read StackOverflow most popular questions https://stackoverflow.com/questions/tagged/kvm?tab=Votes
Snapshots[edit]
- Read KVM virsh external vs internal snapshots: https://rentry.co/644h6
- Read RedHat recommendations: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-Troubleshooting-Workaround_for_creating_external_snapshots_with_libvirt
- Read this guide about handling snapshots: https://www.cyberciti.biz/faq/how-to-create-create-snapshot-in-linux-kvm-vmdomain/
Advanced[edit]
- Extend LVM on qcow2 images: https://www.technomenace.com/2014/08/how-to-extend-lvm-on-qcow2-images/
- Live Migrate a machine between two servers[17].
- Offline Migrate or move a virtual machine between two KVM servers without shared storage[18]:
virsh dumpxml
andvirsh define
- Recover a VM using
virt-rescue
- Create Live backups using
virsh blockcommit
- Review Bacula Enterprise KVM plugin: http://www.bacula.lat/kvm-plugin-bacula-enterprise-quick-guide/?lang=en
- Review Bacula solution with
bpipe
: http://www.bacula.lat/kvm-hot-online-virtual-machines-backup-with-bacula-bpipe/?lang=en - Review Veritas Netbackup support for RHV
Related terms[edit]
- Avi Kivity
- VM-Exits
- Amazon Firecracker
- MacVTap device driver
- Ansible ovirt-RHV module (ovirt_vm)
- KubeVirt
- QEMU Logs
- OVirt and RHV
/dev/kvm
- vhost_net kernel module
- KVM switch
- PCI passthrough
- AWS Nitro System
See also[edit]
virtinst
(package):virt-install
,virt-clone
,virt-convert
andvirt-xml
libguestfs-tools
:virt-sysprep
,virt-clone
,virt-builder
,virt-customize
,virt-resize
,virt-rescue
,virt-sparsify
,guestmount
,guestfish
,virt-inspector
,virt-cat
,virt-log
,virt-df
,virt-ls
,virt-filesystems
,virt-list-filesystems
,virt-edit
virt-manager
,virsh vncdisplay
,virt-install
- libvirtd:
systemctl status libvirtd
,systemctl status libvirt-guests
, Libvirt release notes, logs,libvirtd.conf
,/etc/libvirt/
,/var/log/libvirt/
- QEMU:
qemu-img
,qemu-ga
,qemu.conf
,virsh qemu
, QEMU guest agent (qemu-ga
), qcow2,qemu-nbd, qemu-img map
,qemu-io
,/etc/libvirt/qemu.conf
, QEMU releases, VENOM,qemu-nbd --help, qemu-system
- KVM, Installation, QEMU,
virsh
,virtinst
,libguestfs-tools
, libvirt, qemu, Red Hat Virtualization (RHV), MacVTap, Virtio, oVirt, KVM services, KVM networking, KVM graphics, CPU, KVM on ARM - Virtualization: KVM, VirtualBox, multipass, containers, Vagrant, Packer, Hyper-V, VMware, Parallels, Bhyve, Virtual machine
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy.
Source: https://en.wikiversity.org/wiki/KVM
- ↑ https://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F
- ↑ https://www.linux-kvm.org/page/Migration
- ↑ https://www.redhat.com/en/topics/virtualization/what-is-KVM
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/section-libvirt-dom-xml-example
- ↑ http://wiki.stoney-cloud.org/wiki/VM_CPU_Hotplug
- ↑ https://wiki.libvirt.org/page/Virtio
- ↑ https://www.ibm.com/support/knowledgecenter/en/linuxonibm/liaag/wkvm/l0wkvm00_2016.htm
- ↑ http://manpages.ubuntu.com/manpages/precise/man1/virsh.1.html#storage%20pool%20commands
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-virtualization-storage_pools-creating-local_directories-virsh
- ↑ http://manpages.ubuntu.com/manpages/xenial/man1/virsh.1.html#snapshot%20commands
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-managing_guests_with_the_virtual_machine_manager_virt_manager-managing_snapshots
- ↑ https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_and_managing_virtualization/index
- ↑ https://www.cyberciti.biz/faq/how-to-create-create-snapshot-in-linux-kvm-vmdomain/
- ↑ https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit
- ↑ https://kashyapc.wordpress.com/2013/01/22/live-backup-with-external-disk-snapshots-and-libvirts-blockpull/
- ↑ https://help.ubuntu.com/community/KVM/VirtManager
- ↑ https://www.berrange.com/posts/2016/05/12/analysis-of-techniques-for-ensuring-migration-completion-with-kvm/
- ↑ https://serverfault.com/questions/434064/correct-way-to-move-kvm-vm
Advertising: