天天看点

KVM libvirt使用虚拟机、磁盘、快照

文章目录

      • 基本命令
      • 磁盘格式说明
      • 创建虚拟机
      • clone虚拟机
      • 删除虚拟机
      • 添加、删除磁盘
      • 创建、删除内部快照
      • 转换格式
      • 其他问题
      • 可参考链接

基本命令

其中kylin01表机器名称,执行命令需要在宿主机上执行

重启:virsh reboot kylin01
开机:virsh start kylin01
开机自启:virsh authostart kylin01
取消开机自启:virsh authostart --disable kylin01
挂起:virsh suspend kylin01
恢复:virsh resume kylin01
控制台:virsh console kylin01
强制关机: virsh destroy kylin01

普通关机(这个不好用,建议用destroy): 
virsh shutdown kylin01
编辑配置(不建议使用vi直接修改xml文件):
virsh edit kylin01
查看所有虚拟机,不带all只能看到开机的,带了all可以查看所有:
virsh list [--all]
查看详细信息,包括文件类型
virsh dominfo kylin01
查看版本号:virsh verison

备份/导出配置文件,随意备份到什么地方
virsh dumpxml kylin01 > /tmp/kylin01.xml
查看备份文件
virsh dumpxml kylin01
解除虚拟机在list中标记
virsh undefine kylin01 
恢复kylin01,需要先备份
virsh define /tmp/kylin01.xml 
           

相关文件位置,也可以自行创建

# 自带的xml位置,每个虚拟机都有自己的xml文件
/etc/libvirt/qemu/
存放快照的目录
/var/lib/libvirt/qemu/
存放磁盘的位置
/var/lib/libvirt/imges

# 自定义克隆后虚拟机存放的位置
/virt
# 本文中自定义存放增加的磁盘的位置
/images

           

磁盘格式说明

kvm磁盘镜像常见的格式主要有raw和qcow2两种格式,一般默认是raw,也是使用virt-install安装时的默认格式。

以下两种图片对格式有说明,链接来自于http://www.361way.com/kvm-img-format/3167.html,不再复述:

KVM libvirt使用虚拟机、磁盘、快照
KVM libvirt使用虚拟机、磁盘、快照

也有表格对比的图片,来源https://blog.csdn.net/majiangNB/article/details/81672911:

KVM libvirt使用虚拟机、磁盘、快照

创建虚拟机

这里有个图片文档,还蛮不错

1、https://blog.csdn.net/qq_36345864/article/details/104828420

2、有说明具体步骤:http://chengyaogen.blog.chinaunix.net/uid-30272819-id-5166021.html

clone虚拟机

kylinBase

为克隆的虚拟机,

kylin01

为克隆后的虚拟机:

# 先关闭kylinBase
virsh destroy kylinBase
# clone,如果想要做快照,生成的文件名后缀用qcow2,raw不支持快照
virt-clone -o kylinBase -n kylin01 -f /virt/kylin01.raw
           

其中,参数说明:

-o: --origin,克隆的机器,这就需要自己备一个模板
-n: --name,克隆后的机器的名称
-f: --file,克隆后端机器存放的目录
           

clone后需要改IP,kylin01的IP和kylinBase是一样的,由于kylinBase已经关机,那么访问该IP进入的是kylin01。

以下两种是我常用的两种办法:

1、通过访问kylinBase的IP+9090端口访问web,在左侧栏找到终端,正常修改后重启network服务;
2、一种是通过VNC VIewer软件连接,访问ip为宿主机的ip加上端口,这个端口需要在kylin01的xml配置文件里修改。但是不推荐使用vim去改,而推荐virsh edit kylin01的方式去修改
           

在文件的最后几行找到,将autoport改为no,将端口改成我们可以使用的即可

<graphics type='vnc' port='5921' autoport='no' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
</graphics>
           

然后启动虚拟机

virsh start kylin01
           

个人建议是最好配置端口,有的时候因为一些原因会在本地无法通过kylin01的IP访问,比如防火墙和路由的关系,只能访问宿主机,而不能访问虚拟机。

删除虚拟机

1、关闭需要删除的虚拟机
virsh destroy kylin01
2、解除虚拟机在list中标记,建议带上nvram参数,可以删除配置
virsh undefine kylin01 [--nvram]
3、手动删除/virt下的raw配置
rm -rf /virt/kylin01.raw
4、删除磁盘,建议创建磁盘时命名格式类似kylin01-1这种,方便区分也方便删除
rm -rf /images/kylin01*
           

这时kylin01已经是干净的,可以直接重新clone了

添加、删除磁盘

一般kvm常用的有raw和qcow2两种格式,一般默认是raw,但它不支持snapshot,即快照,但qcow2支持。

1、关机
virsh destroy kylin01
2、创建一个raw,后缀也可以是raw
qemu-img create -f raw /images/kylin01-1.img 10G
如果是qcow2
qemu-img create -f qcow2 /images/kylin01-1.qcow2 10G
3、添加磁盘到系统中,映射到如sdg,此时是关机状态,如果想在运行时添加,则后面加个live参数
virsh attach-disk kylin01 /images/kylin01-1.img sdg --cache none --subdriver raw --config [--live]

4、attach-disk能即时生效,但重启后就失效,所以修改配置,示例放在稍后
virsh edit kylin01

5、启动
virsh start kylin01
           

删除磁盘,主要指定虚拟机、磁盘名

virsh detach-disk kylin01 sdg --config [--live]
           

attach-disk和detach-disk参数如下:

--persistent 让实时更改更改持久,立即生效
--config 影响下一次引导,之后一直生效
--live 影响运行的域,重启失效
--current 影响当前域
           

添加磁盘后在配置中默认生成如下:

<disk type='file' device='disk'>
      <driver name='qemu' type='img' cache='none'/>
      <source file='/images/kylin01-1.img'/>
      <target dev='sdf' bus='scsi'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
           

我们需要将bus由scsi修改为virtio,删除

行,:wq退出保存后会自动生成type为pci的行,这段无需手动修改:

<disk type='file' device='disk'>
      <driver name='qemu' type='img' cache='none'/>
      <source file='/images/kylin01-1.img'/>
      <target dev='sdf' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</disk>
           

创建、删除内部快照

内部快照不支持raw,需要转换成qcow2。一般来说建议使用外部快照,这里因为没测过,所以请参考链接4。

# 带-as是可以指定新生成快照名的,如果没有-as则不需要第二个参数
virsh snapshot-create-as kylin01 kylin01_clone
# 这种方式生成的快照名是数字
virsh snapshot-create kylin01


查看kylin01的快照状态配置文件
virsh snapshot-current kylin01

查看kylin01的快照信息
virsh snapshot-list kylin01

恢复快照,若要在不停机时回滚需要加force参数
virsh snapshot-revert [--force] kylin01 kylin01_clone

删除快照
virsh snapshot-delete kylin01 kylin01_clone

           

注意事项:

1、生成的快照目录`/var/lib/libvirt/qemu`,因此删除时还需要手动删除该目录下对应快照;
2、恢复前最后关闭虚拟机,也可以在开启时回滚,但有新数据写入时还是有问题。需要加--force,不加会提示
error: revert requires force: Target controller type ide does not match source usb;
3、如果创建时报错,则说明raw不支持内部快照,需要转换格式:
error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw
           

转换格式

转换格式,转换后需要改配置里的type和file的名字后缀,-f指源格式,-O指目标格式,所以也可以相互转换

qemu-img convert -f raw -O qcow2 /imges/kylin01-1.img /imges/kylin01-1.qcow2
           

查看磁盘镜像格式

qemu-img info /imges/kylin01-1.img
           

查看信息如

[[email protected] images]# qemu-img info kylin01.img 
image: kylin01.raw
file format: raw
virtual size: 50G (53687091200 bytes)
disk size: 16G
           

此外,还需要修改配置,如type由img改为qcow2,并将file的后缀改为qcow2

<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/images/kylin01-1.qcow2'/>
      <target dev='sdf' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</disk>
           

但转换了格式之后,创建内部快照还是有可能报错,所以可以尝试外部快照

internal snapshot of a VM with pflash based firmware are not supported
           

意思是不支持具有基于pflash固件的VM的内部快照

其他问题

1、如果偶尔出现VNC通过端口能访问子机,但是宿主机和子机之间无法连接,在排除没有搭建桥接的前提下,可以重启防火墙服务firewalld,但最好先start再stop,不要直接执行restart。

2、如果在重启了宿主机后发现,宿主机内能ping通虚拟机,但是从虚拟机内无法ping通宿主机及外网。可以用VNC通过端口连接访问虚拟机,但是xshell无法连上,从里往外ping宿主机及相同其他网段都无法ping通,可以参考链接3。简单解释来说,就是防火墙被关之后,路由表就没有了,无法进行IP转发。

3、原本试图通过快照来做环境恢复,就像VMWare上创建虚拟机做的那样,但是后来发现这个快照主要是用来备份数据的。假设你已经创建了虚拟机子机,你一通过命令恢复就会提示你已存在,如果不存在子机又会提示你没有这个子机。也就是说,恢复以子机存在为前提。

4、Ubuntu桥接配置可以参考我另一篇:https://blog.csdn.net/qq_28304687/article/details/116132295。

5、虚拟机进入pause状态,无法resume:https://blog.csdn.net/qq_28304687/article/details/116302027

可参考链接

1、内部快照:http://www.361way.com/internal-snapshot/3179.html

2、https://blog.csdn.net/qq_36345864/article/details/104828420

3、解决KVM虚拟机不能连外网的问题:https://blog.csdn.net/u010099177/article/details/107426372

4、内部快照和外部快照:https://www.jianshu.com/p/4f1a1ce7c6a8

5、图片文档:https://blog.csdn.net/qq_36345864/article/details/104828420

6、https://blog.csdn.net/majiangNB/article/details/81672911

7、http://chengyaogen.blog.chinaunix.net/uid-30272819-id-5166021.html

8、Ubuntu配置网桥:https://blog.csdn.net/qq_28304687/article/details/116132295

9、https://blog.csdn.net/weixin_34380296/article/details/85822000