本文主要介绍虚拟机的启动、停止、重启、挂起等基础操作,不过在进行这些操作之前,我们得先有一台kvm虚拟机,根据之前的文章,先创建一台虚拟机。
virt-install --name "centos5" --vcpus=1 --ram=512 --disk=/images/kvm/centos55.img,size=10,sparse --force --network bridge=virbr0,model=virtio --cdrom /opt/CentOS-5.5-i386-bin-DVD.iso --graphic vnc,listen=0.0.0.0,port=5900 --os-variant rhel5
可以使用vncviewer进行系统安装,安装后虚拟机reboot,此时会退出vncviewer。我们需要重新启动该虚拟机,但是系统安装完了,又不能使用上面的命令安装,怎么做呢?
这里我们首先到/etc/libvirt/qemu/目录下,会在该目录下看到一个名为centos5.xml的文件,这就是我们之前使用virt-install创建虚拟机的配置文件。
于是,我们想要启动该虚拟机,可以使用如下命令:
virsh create centos5.xml #根据centos5.xml创建虚拟机
[[email protected] qemu]# virsh create centos5.xml
Domain centos5 created from centos5.xml
[[email protected] qemu]# virsh list
Id Name State
----------------------------------------------------
11 centos5 running
Virsh的常用命令介绍:
virt-install: 创建虚拟机,并安装OS;也可以创建虚拟机并导入Image文件
根据xml文件创建虚拟机:
virsh create *.xml #创建并启动虚拟机
virsh define *.xml #创建但不启动虚拟机
关闭domain:
virsh destroy domain_name #强制关闭domain
virsh shutdown domain_name #优雅的关闭domain
vrish reboot domain_name #重启一个domain
删除domain:
virsh undefine domain_name #删除一个domain,该操作会删除虚拟机的xml配置文件,但不会删除虚拟磁盘文件
连接一个domain:
virsh console domain_name #连接到一个domain的管理控制台
列出domain:
virsh list #列出domains,会列出活动中的虚拟机
virsh list -all #列出所有的domains,包含已经停止的虚拟机
附加或拆除disk:
virsh attach-disk domain_name #附加一个磁盘到一个domain中
virsh detach-disk domain_name #从一个domain中移除磁盘
注意:
centos5.x版本不支持在线调整cpu,内存等, 以下在centos6.x,7.x测试
centos6.x, 7.x平台下,cpu core数只能在线增加,不能在线减小
应注意你想要添加的硬件是临时生效,还是永久生效
所以这里创建一个centos6.5的虚拟机:
virt-install --name "centos6.5" --vcpus=1 --ram=512 --disk=/images/kvm/centos6.img,size=10,bus=virtio --force --network bridge=virbr0,model=virtio --cdrom /opt/CentOS-6.5-x86_64-bin-DVD1.iso --graphic vnc,listen=0.0.0.0,port=5900 --os-variant=rhel6
确保虚拟机处于running状态,然后使用qemu-img创建一个磁盘映像,然后使用virsh attach-disk命令添加给正在运行的虚拟机。
在宿主机出现“Disk attach successfully”后,进入客户机操作系统查看
在客户机中可以看到,通过attach-disk命令附加的磁盘,可以像普通磁盘一样使用该磁盘,就不多演示了。
下面,再动态移除之前添加的磁盘,使用virsh detach-disk命令。
成功移除磁盘后,在客户机中也没有了磁盘文件。另外,也可以将ISO文件附件到虚拟机中,这样就实现了挂载磁盘镜像的问题。
注意:上面的附加磁盘操作都是临时生效,待domain重启后就失去挂载的磁盘。要想附加的磁盘永久生效,有两种方法:
1)使用--persistent参数,比如:virsh attach-disk centos6.5 /images/kvm/test.img vdb --cache none --subdriver raw --persistent
--persistent 重启生效,相当于:-config --live
2)在添加磁盘成功后,导出xml文件。其实,就是使用attach-disk附加磁盘,然后使用virsh dumpxml domain_name > domain_name.xml,然后用这个新的xml文件创建虚 拟机。
3)使用xml文件进行attach-device操作。(这里实际上算介绍attach-device命令了)
首先,配置一个xml文件,添加需要配置的参数项,比如cache=none, io=native等。
[[email protected] ~] # cat disk.xml
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/CentOS_kvm/centos02_lij_data1'/>
<target dev='vdb' bus='virtio'/>
</disk>
然后,使用virsh attach-device命令添加,
virsh attach-device centos6.5 disk.xml --persistent
说明:attach-device才是更通用的添加硬件方法,添加硬件的同时可以配置相应参数,比如我们需要添加/dev/vg01/lv01这块新磁盘
附加或拆除网卡:
virsh attach-interface domain_name #往一个domain中添加网卡
virsh detach-interface domain_name #从一个domain中移除网卡
注意:使用attach-interface和附件磁盘是一样的,都是暂时保存,重启后失效,如果想永久生效,可参照上面附件磁盘的方法,不再赘述。
调整cpu:
virsh setvcpus domain_name vcpus_num --config --live #使用--config --live 使修改永久生效
例如:virsh setvcpus centos6.5 2 --config --live
注意:centos5.x不支持调整cpu、内存等,需要在centos6.x及以上版本中操作;
设置cpu数量不能超过domain的配置文件中设定的maxvcpus的值,不然会失败。
调整内存:
virsh setmem domain_name mem_num
例如:virsh setmem centos6.5 512M #临时设置内存为512M
virsh setmem centos6.5 786M --config --live #永久设置内存为786M
注意:能够调整的内存最大值不超过xml文件中内存设置的值。
内存能够在线调整的原理是利用了virtio-balloon技术。
扩展:
virtio-balloon气球内存技术:它可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机
该技术能够实现:
<1>当宿主机内存紧张时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放部分空闲内存。若其内存空间不足,可能还会回收部分使用中的内存,可能会将部分内存换到交换分区中;
<2>当客户机内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。
内存调整过程:
a. KVM 发送请求给 VM 让其归还一定数量的内存给KVM。
b. VM 的 virtio_balloon 驱动接到该请求。
c. VM 的驱动是客户机的内存气球膨胀,气球中的内存就不能被客户机使用。
d. VM 的操作系统归还气球中的内存给VMM
e. KVM 可以将得到的内存分配到任何需要的地方。
f. KVM 也可以将内存返还到客户机中。
保存状态至磁盘文件或从磁盘文件恢复:
virsh save domain_name #保留一个正在运行的domain的RAM状态
virsh restore domain_name #恢复一个domain
例如:virsh save --bypass-cache centos6.5 /usr/src/centos6.5_snapshot_1 --running --verbose
--bypass-cache:避免在保存的时候文件系统缓存而保存不完全
--running:设置恢复后domain的运行状态是running
--verbose:显示保存的进度
例如:virsh restore /usr/src/centos6.5_snapshot_1 --bypass-cache --running
--bypass-cache:避免在还原时发生文件系统缓存
--running:还原domain后进入running状态
暂停于内存或继续运行:
virsh suspend domain_name #挂起(暂停)一个domain
virsh resume domain_name #恢复一个domain
原文地址:http://blog.51cto.com/jerry12356/2132601