使用libvirt命令行管理虚拟机

本文主要介绍虚拟机的启动、停止、重启、挂起等基础操作,不过在进行这些操作之前,我们得先有一台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

时间: 2024-11-12 09:19:21

使用libvirt命令行管理虚拟机的相关文章

libvirt 命令行交互工具之virsh

libvirt是当前主流VM最低层库.IBM PowerVM也不例外,libvirt是深入玩虚拟化必须玩转的东西; 简单测试玩玩libvirt 的virsh命令行交互工具, 你我都知识libvirt大体上主要有3个组件,分别是: 1. libvirt daemon进程 2. 命令行工具virsh 3. libvirt API virsh命令使用 virsh <command> <domain-id> [OPTIONS] virsh既有命令行模式,也有交互模式,在命令行直接输入vir

KVM命令集管理虚拟机

使用KVM命令集管理虚拟机 查看虚拟机状态 [[email protected] ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 2 c01 running 虚拟机的关机与开机 [[email protected] ~]# virsh shutdown c01 域 c01 被关闭 [[email protected] ~]# virsh list --all Id 名称 状态 -

vmware 命令行启动虚拟机

在redhat enterprise 5.3安装了vmware workstation,如何用vmware 命令行启动指定虚拟机?/usr/bin/vmware[[email protected] ~]# /usr/bin/vmware --help-all用法:  vmware [选项...] [--] [configuration file(s)]帮助选项:  -?, --help                       显示帮助选项  --help-all               

从命令行启动虚拟机

从命令行启动虚拟机: 2.用命令列出虚拟机的ID: 1 vim-cmd vmsvc/getallvms |grep <vm name> 注意: 第一列输出是vmid. 2.用命令查看虚拟机启动状态: 1 vim-cmd vmsvc/power.getstate <vmid> 3.用命令启动虚拟机: 1 vim-cmd vmsvc/power.on <vmid>

3.学会命令行管理代码

3.学会命令行管理代码大航海时代1:世界的创建 --------------表的操作:海贼王世界CREATE DATABASE ONE_PIECEDROP DATABASE ONE_PIECE CREATE TABLE ROLE(ID INT IDENTITY(1,1) ,NAME VARCHAR(20),AGE INT ,REWARD INT ) CREATE TABLE AREA(ID INT IDENTITY(1,1),NAME VARCHAR(20),REMARK TEXT,)SP_RE

[转]玩转Windows服务系列——命令行管理Windows服务

本文转自:http://www.cnblogs.com/hbccdf/p/managewindowsservicewithcmd.html 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令,命令行都是非常方便以及强大的工具. 接下来就看一下如何通过cmd命令管理Windows服务. 管理Windows服务的主要cmd命令 管理Windows服务的命令应该有很多,但是我所了解到的命令主要有两个:sc.net. 说是

使用SqlLocalDB命令行管理LocalDB

SqlLocalDB.exe start v11.0 SqlLocalDB.exe info v11.0 SQL Server Management Stdio添加管道连接实例 默认实例名(localDB)\v11.0 为了方便管理,LocalDB提供了一个基于命令行的数据库管理工具SqlLocalDB.exe.下面是SqlLocalDB.exe的路径: %ProgramFiles%\Microsoft SQL Server\110\Tools\Binn 我们可以在Windows操作系统的CMD

IIS命令行管理工具使用

AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下 一条命令批量添加应用程序 c:\Windows\System32\inetsrv>for /d %i in (e:\wwwroot\*.*) do appcmd add app /site.name:"Default Web Site" /path:/%~ni /physicalpath:%i 使用命令行管理IIS 7.0时,需要使用IIS7.0提供的全新管理工具AppCmd.ex

RHEL7 124 之从命令行管理文件(2)

从命令行管理文件 [[email protected] ~]# cd /[[email protected] /]# lsbin  dev  home  lib64 mnt  proc  run  srv  tmp  varboot etc  lib   media opt  root  sbin sys  usr  xx /bin /dev 包含特殊的设备文件,供系统用于访问硬件 /home 普通用户存储其个人数据和配置文件的主目录 /root root的主目录 /lib64 /mnt /pr