对KVM虚拟机的基本管理

对KVM虚拟机的基本管理

管理kvm虚拟机有两种方法:一、图形化管理工具virt-manager,二、命令行工具virsh命令。这两种方法都是通过调用libvirt API来实现虚拟化管理。
使用virsh对KVM虚拟机的基本管理
1、查看虚拟机
virsh list显示运行的虚拟机。

[root@localhost images]# clear
[root@localhost images]# virsh list
 Id    Name                           State
----------------------------------------------------
 7     rhel7-vm01                     running

要查看所有虚拟机就要加参数 --all

[root@localhost images]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 7     rhel7-vm01                     running

2、关闭虚拟机
virsh shutdown 虚拟机名称

[root@localhost images]# virsh shutdown rhel7-vm01
Domain rhel7-vm01 is being shutdown

在这里插入图片描述
在这里插入图片描述
3、启动虚拟机
virsh start 虚拟机名称

[root@localhost images]# virsh start rhel7-vm01
Domain rhel7-vm01 started

在这里插入图片描述
在这里插入图片描述
4、关闭虚拟机电源
virsh destroy 虚拟机名称,该命令是直接拔掉虚拟机电源进行关闭虚拟机。
5、挂起(暂停)虚拟机
virsh suspend 虚拟机名称

[root@localhost images]# virsh start rhel7-vm01
Domain rhel7-vm01 started

在这里插入图片描述
6、恢复虚拟机
virsh resume 虚拟机名称

[root@localhost images]# virsh resume rhel7-vm01
Domain rhel7-vm01 resumed

在这里插入图片描述
7、设置自动启动虚拟机
virsh autostart 虚拟机名称

[root@localhost images]# virsh autostart rhel7-vm01
Domain rhel7-vm01 marked as autostarted

8、禁止自启动虚拟机
virsh autostart 虚拟机 --disable

[root@localhost images]# virsh autostart rhel7-vm01 --disable
Domain rhel7-vm01 unmarked as autostarted

9、查看虚拟机信息
virsh dominfo 虚拟机名称

[root@localhost images]# virsh dominfo rhel7-vm01
Id:             8
Name:           rhel7-vm01
UUID:           c38aaa91-70ff-4a12-a77c-1cd482948f2e
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       51.7s
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      enable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c26,c812 (permissive)

10、删除虚拟机
virsh undefine 虚拟机名称
此时虚拟机是在虚拟机管理器里面找不到了。
11、删除虚拟机,并删除磁盘镜像文件
virsh undefine 虚拟机名称 --storage /var/lib/libvirt/images/虚拟机名称.qcow2
此时虚拟机是在虚拟机管理器里面找不到了,同时虚拟的磁盘镜像文件一并删除。
12、删除虚拟机,并删除所有磁盘文件。
virsh undefine 虚拟机名称 --remove-all-storage
13、显示虚拟机当前的配置文件。
virsh dumpxml 虚拟机名称

[root@localhost ~]# virsh dumpxml rhel7-vm01
<domain type='kvm' id='1'>
  <name>rhel7-vm01</name>
  <uuid>c38aaa91-70ff-4a12-a77c-1cd482948f2e</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Broadwell-noTSX</model>
  </cpu>
  <clock offset='utc'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/rhel7-vm01.qcow2'/>
      <backingStore/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <alias name='usb'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <alias name='usb'/>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <alias name='usb'/>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <alias name='usb'/>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'>
      <alias name='pci.0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <alias name='virtio-serial0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:b2:de:c1'/>
      <source network='default' bridge='virbr0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/1'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/1'>
      <source path='/dev/pts/1'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-1-rhel7-vm01/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
      <alias name='channel0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0' state='disconnected'/>
      <alias name='channel1'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'>
      <alias name='input0'/>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='keyboard' bus='usb'>
      <alias name='input1'/>
      <address type='usb' bus='0' port='2'/>
    </input>
    <input type='mouse' bus='ps2'>
      <alias name='input2'/>
    </input>
    <input type='keyboard' bus='ps2'>
      <alias name='input3'/>
    </input>
    <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich6'>
      <alias name='sound0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir0'/>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <alias name='redir1'/>
      <address type='usb' bus='0' port='4'/>
    </redirdev>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='selinux' relabel='yes'>
    <label>system_u:system_r:svirt_t:s0:c541,c677</label>
    <imagelabel>system_u:object_r:svirt_image_t:s0:c541,c677</imagelabel>
  </seclabel>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+107:+107</label>
    <imagelabel>+107:+107</imagelabel>
  </seclabel>
</domain>

对虚拟机进行进阶管理
1、添加网卡
当前虚拟机中默认只有一块网卡。
在这里插入图片描述
在这里插入图片描述
在宿主机中通过命令也可以查看到网卡信息。
virsh domiflist 虚拟机名称

[root@localhost ~]# virsh domiflist rhel7-vm01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:b2:de:c1

使用virsh命令添加网卡
virsh attach-interface 虚拟机 network default --persistent
其中attach-interface添加接口,network代表网络类型,default代表网络默认NAT方式,–persistent选项代表永久的意思,即重启虚拟机后网卡依旧生效。

[root@localhost ~]# virsh attach-interface rhel7-vm01 network default --persistent
Interface attached successfully
[root@localhost ~]# virsh domiflist rhel7-vm01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:b2:de:c1
vnet1      network    default    rtl8139     52:54:00:c1:40:d2

在这里插入图片描述
如果要删除网卡,使用下面命令

[root@localhost ~]# virsh detach-interface rhel7-vm01 --type network --mac 52:54:00:c1:40:d2Interface detached successfully
[root@localhost ~]# virsh domiflist rhel7-vm01
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      network    default    virtio      52:54:00:b2:de:c1

此处只是添加网卡,但该网卡并不会绑定具体ip地址。
2、添加磁盘
在宿主机上查看虚拟机磁盘信息。
virsh domblklist 虚拟机

[root@localhost ~]# virsh domblklist rhel7-vm01
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/rhel7-vm01.qcow2

此时虚拟机只有一个磁盘vda,磁盘对应文件是rhel7-vm01.qcow2。
在宿主机上通过dd命令生成一个大小为100M的磁盘文件。

[root@localhost ~]# dd if=/dev/zero of=/var/lib/libvirt/images/rhel7-vm01_1.img bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 2.41723 s, 43.4 MB/s

dd命令用于从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
if为输入文件名,/dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符。其中的一个常见用法是产生一个特定大小的空白文件。
of为输出文件名。
bs代表同时设置读入/读出的块大小为多少个字节。
count代表拷贝多少个块,每个块大小由bs指定了字节数。
使用virsh attach-disk命令将新生成的磁盘加到虚拟机中,作为虚拟机的vdb。

[root@localhost ~]# virsh attach-disk rhel7-vm01 /var/lib/libvirt/images/rhel7-vm01_1.img vdb
Disk attached successfully

[root@localhost ~]# virsh domblklist rhel7-vm01
Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/rhel7-vm01.qcow2
vdb        /var/lib/libvirt/images/rhel7-vm01_1.img

在虚拟机中也可以通过命令lsblk查看新的磁盘。
在这里插入图片描述
修改CPU与内存
1、修改配置文件调整CPU和内存大小。
在虚拟机中查看当前CPU和内存大小
在这里插入图片描述
通过命令virsh edit 虚拟机名称来修改虚拟机的配置文件。
如把CPU改为2个,这个大小是不能超过宿主机的。

[root@localhost ~]# virsh edit rhel7-vm01

<domain type='kvm'>
  <name>rhel7-vm01</name>
  <uuid>c38aaa91-70ff-4a12-a77c-1cd482948f2e</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Broadwell-noTSX</model>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/rhel7-vm01.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:b2:de:c1'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='52:54:00:c1:40:d2'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </interface>
    <interface type='network'>
      <mac address='52:54:00:21:31:0d'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='tablet' bus='usb'>
      <address type='usb' bus='0' port='1'/>
    </input>
    <input type='keyboard' bus='usb'>
      <address type='usb' bus='0' port='2'/>
    </input>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='en-us'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='3'/>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
      <address type='usb' bus='0' port='4'/>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Domain rhel7-vm01 XML configuration edited.

修改保存好后,要将虚拟机关闭,再启动才会生效,直接重启是不会生效的。

[root@localhost ~]# virsh shutdown rhel7-vm01
Domain rhel7-vm01 is being shutdown

[root@localhost ~]# virsh start rhel7-vm01
Domain rhel7-vm01 started

进入虚拟机,查看CPU信息,修改成功!
在这里插入图片描述
2、通过图形的方式调整CPU和内存的大小
打开虚拟机图形界面的详情页面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提示调整配置时,需要在虚拟机关闭的状态下进行。
3、通过命令的方式调整CPU和内存大小
首先关闭虚拟机,然后通过virsh setvcpus命令修改配置文件。

[root@localhost ~]# virsh dominfo rhel7-vm01
Id:             2
Name:           rhel7-vm01
UUID:           c38aaa91-70ff-4a12-a77c-1cd482948f2e
OS Type:        hvm
State:          running
CPU(s):         2
CPU time:       67.5s
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c514,c640 (permissive)

[root@localhost ~]# virsh shutdown rhel7-vm01
Domain rhel7-vm01 is being shutdown

[root@localhost ~]# virsh setvcpus rhel7-vm01 1 --maximum --config

[root@localhost ~]# virsh dominfo rhel7-vm01
Id:             -
Name:           rhel7-vm01
UUID:           c38aaa91-70ff-4a12-a77c-1cd482948f2e
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

[root@localhost ~]# virsh start rhel7-vm01
Domain rhel7-vm01 started

[root@localhost ~]# virsh dominfo rhel7-vm01
Id:             3
Name:           rhel7-vm01
UUID:           c38aaa91-70ff-4a12-a77c-1cd482948f2e
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       4.8s
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c612,c991 (permissive)

在线调整CPU个数时,CPU个数比当前虚拟机个数多时,可以不用重启即可生效,但不能超过最大CPU个数。

[root@localhost ~]# virsh setvcpus rhel7-vm01 2 --live
error: invalid argument: requested vcpus is greater than max allowable vcpus for the live domain: 2 > 1

使用virsh setmaxmen修改配置文件中的内存,当然还是要重启之后才会生效。

[root@localhost ~]# virsh setmaxmem rhel7-vm01 4096M --config

[root@localhost ~]# virsh dominfo rhel7-vm01
Id:             3
Name:           rhel7-vm01
UUID:           c38aaa91-70ff-4a12-a77c-1cd482948f2e
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       53.6s
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c612,c991 (permissive)

使用virsh setmem命令调整当前内存大小。调整当前内存大小需要注意不能调整到比最大内存更大,只能调小。

[root@localhost ~]# virsh setmem rhel7-vm01 2048M --current
error: invalid argument: cannot set memory higher than max memory

[root@localhost ~]# virsh setmem rhel7-vm01 1024M --current

[root@localhost ~]# 

猜你喜欢

转载自blog.csdn.net/qq_26350199/article/details/114111228
今日推荐