文章目录

一、KVM虚拟机常见管理命令(在宿主机中执行)

二、磁盘管理

三、内存管理

四、CPU管理

五、快照管理

六、虚拟机克隆

七、为虚拟机创建瘦装备实例(domain)

八、虚拟机镜像导出,用于ESXi导入

九、把OVA格式的文件导入KVM虚拟机


一、KVM虚拟机常见管理命令(在宿主机中执行)

## 从虚拟机退出到宿主机
​​​​​​​[root@localhost ~]# Ctrl + ]   

## 查看KVM进程             
[root@localhost ~]# ps axu |grep kvm       

## 查看libvirt的版本信息      
[root@localhost ~]# virsh version   

## 列出当前有多少个虚拟机,以及其状态                 
[root@localhost ~]# virsh list            

## 列出关机状态的虚拟机
[root@localhost ~]# virsh list --all   

## 进入指定的虚拟机,进入的时候还需要按一下回车
[root@localhost ~]# virsh console vm1      

## 编辑虚拟机的配置
[root@localhost ~]# virsh edit vm1     

## 使用XML文件创建一个虚拟机
[root@localhost ~]# virsh create vm1.xml     
                    
## 使用XML文件定义一个虚拟机,但是不启动
[root@localhost ~]# virsh define vm1.xml

## 启动虚拟机    
[root@localhost ~]# virsh start vm1                          

## 重启虚拟机
[root@localhost ~]# virsh reboot vm1       

## 关闭虚拟机,比较优雅地做法,按部就班的关闭虚拟机 
[root@localhost ~]# virsh shutdown vm1     

## 强制停止虚拟机,是比较暴力的做法,相当于物理机的直接关闭电源
[root@localhost ~]# virsh destroy vm1       

## 彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
[root@localhost ~]# virsh undefine vm1 --nvram          

## 设置宿主机开机时该虚拟机也开机
[root@localhost ~]# virsh autostart vm1        

## 解除开机启动
[root@localhost ~]# virsh autostart --disable vm1     

## 列出开机自动启动的虚拟机
[root@localhost ~]# virsh list --autostart     

## 挂起虚拟机
[root@localhost ~]# virsh suspend vm1    

## 恢复挂起的虚拟机
[root@localhost ~]# virsh resume vm1   

二、磁盘管理

说明:qemu-img是QEMU的磁盘管理工具,qemu编译之后,默认会提供这个工具。

1、磁盘创建和磁盘信息查看

## 创建磁盘文件
[root@localhost ~]# qemu-img create -f qcow2 /home/qcow2/vm2.qcow2 400G     

## 查看磁盘文件信息。执行该命令,需要虚拟机关机    
[root@localhost ~]# qemu-img info /home/qcow2/vm1.qcow2             

2、磁盘格式转换

## 基于源磁盘文件创建新的磁盘文件。执行该命令,需要虚拟机关机
[root@localhost ~]# qemu-img convert -f qcow2 -O qcow2 -c vm1.qcow2 vm2.qcow2   

## 将iso文件转换成qcow2文件
[root@localhost ~]# qemu-img convert -f raw -O qcow2 example.iso example.qcow2  

## 导出虚拟机为vmdk格式。执行该命令,需要虚拟机关机
[root@localhost ~]# qemu-img convert -O qcow2 vm1.qcow2 vm1.vmdk          

## 将vmdk格式的文件转换成qcow2文件      
[root@localhost ~]# qemu-img convert -O qcow2 vm1.vmdk vm3.qcow2     

3、冷添加磁盘

## 创建磁盘文件
[root@localhost ~]# qemu-img create -f qcow2 /home/qcow2/test.qcow2 1G

## 将新创建的磁盘文件添加到vm1虚拟机
[root@localhost ~]# virsh edit vm1
...添加
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/qcow2/test.qcow2'/>
      <target dev='vdb' bus='virtio'/>
    </disk>

## 运行中的虚拟机不会直接生效,这里关机
[root@localhost ~]# virsh shutdown vm1

## 再次启动虚拟机
[root@localhost ~]# virsh start vm1

## 查看是否成功,查看虚拟机有几块磁盘
[root@localhost ~]# virsh domblklist vm1  

## 进入虚拟机 
[root@localhost ~]# virsh console vm1  

## 查看虚拟机的磁盘信息
[root@localhost ~]# fdisk -l

4、热添加磁盘

说明:热添加的磁盘,虚拟机重启后,就没有了,需要配置永久生效才行

## 启动虚拟机
[root@localhost ~]# virsh start vm1

## 添加前,查看虚拟机有几块磁盘
[root@localhost ~]# virsh domblklist vm1  

## 创建磁盘
[root@localhost ~]# qemu-img create -f qcow2 /home/qcow2/test.qcow2 1G

#-----------------------

方案一:不配置热添加磁盘永久生效
## 热添加磁盘,将新创建的磁盘热添加到虚拟机vm1,这种方式不是永久生效,重启后磁盘就掉了
[root@localhost ~]# virsh attach-disk vm1 /home/qcow2/test.qcow2 vdb --subdriver=qcow2

## 热添加后,查看是否生效
[root@localhost ~]# virsh domblklist vm1 

#-----------------------

方案二:配置热添加磁盘永久生效
## 热添加磁盘
[root@localhost ~]# virsh attach-disk vm1 /home/qcow2/test.qcow2 vdb --subdriver=qcow2

## 添加config参数,配置永久生效
[root@localhost ~]# virsh attach-disk vm1 /home/qcow2/test.qcow2 vdb --subdriver=qcow2 --config --live

## 热添加后,查看是否生效
[root@localhost ~]# virsh domblklist vm1

#-----------------------

## 虚拟机关机
[root@localhost ~]# virsh shutdown vm1

## 再次启动虚拟机
[root@localhost ~]# virsh start vm1

## 再次查看热添加磁盘永久生效是否成功
[root@localhost ~]# virsh domblklist vm1

## 进入虚拟机
[root@localhost ~]# virsh console vm1
Connected to domain vm1
Escape character is ^]

## 虚拟机中查看磁盘信息
[root@10 ~]# fdisk -l

说明:挂载后,我们发现磁盘空间并没有改变,是因为我们还没有刷新磁盘的inode

## 磁盘格式化
[root@10 ~]# mkfs.xfs /dev/vdb 

## 挂载使用
[root@10 ~]# mount /dev/vdb /mnt/

## 列出挂载信息
[root@10 ~]# ls /mnt/

## 查看磁盘空间是否变化
[root@10 ~]# df -h

## 创建50MB大小的文件,输入文件是/dev/zero,文件保存在/mnt/test,数据块的大小是5MB
[root@10 ~]# dd if=/dev/zero bs=5M count=10 of=/mnt/test

## 查看/mnt/test目录下各个文件占用的空间
[root@10 ~]# du -smh /mnt/test 

## 刷新inode,用于扩展XFS文件系统的大小
## 如果文件系统是ext2\ext3\ext4文件系统,xfs_growfs需要改成resize2fx
[root@10 ~]# xfs_growfs /dev/vdb

5、卸载磁盘

## 虚拟机中卸载挂载点
[root@10 ~]# umount /mnt/

## 宿主机中卸载磁盘
## 当机器是运行状态时,卸载虚拟磁盘命令(只是当前有效,重启后又回来了)
[root@localhost ~]# virsh detach-disk vm1 vdb

## 卸载后,查看虚拟机的磁盘是否卸载成功
[root@localhost ~]# virsh domblklist vm1

6、磁盘扩容

说明:qcow2格式不支持缩小,raw支持缩小。

## 扩容虚拟机磁盘,增加5G的容量。执行该命令,需要虚拟机关机
[root@localhost ~]# qemu-img resize vm1.qcow2 +5G       

## 把虚拟机磁盘的容量改为500G                        
[root@localhost ~]# qemu-img resize vm1.qcow2 500G         

三、内存管理

方法一:

## 修改最大内存
[root@localhost ~]# virsh setmaxmem vm1 32768M --config   
 
## 修改内存大小      
[root@localhost ~]# virsh setmem vm1 32768M --config    
  
## 进入虚拟机       
[root@localhost ~]# virsh console vm1       
     
## 查看是否生效                
[root@localhost ~]# free -h      

方法二:

## 先关机
[root@localhost ~]# virsh shutdown vm1   

## 直接修改虚拟机配置文件,修改里面的<memory/>和<currentMemory/>的值
[root@localhost ~]# virsh edit vm1       

## 再次启动虚拟机
[root@localhost ~]# virsh start vm1    

## 进入虚拟机  
[root@localhost ~]# virsh console vm1    

## 查看是否生效      
[root@localhost ~]# free -h 

四、CPU管理

方法一:

## 查看虚拟机的CPU核数
[root@localhost ~]# virsh vcpucount vm1      
                     
## 修改虚拟处理器的数量,--maximum 限定的最大CPU核数,扩容时不能超过这个数值
[root@localhost ~]# virsh setvcpus vm1 --maximum 8 --config    
   
## 支持热增加,但不支持热减少,扩容时不能超过maximum
[root@localhost ~]# virsh setvcpus vm1 --count 8 --config  
    
## 进入虚拟机   
[root@localhost ~]# virsh console vm1    

## 查看是否生效                         
[root@localhost ~]# lscpu        

方法二:

## 先关机
[root@localhost ~]# virsh shutdown vm1   

## 直接修改虚拟机配置文件,修改里面的<vcpu/>的值
[root@localhost ~]# virsh edit vm1   
   
## 再次启动虚拟机 
[root@localhost ~]# virsh start vm1  
    
## 进入虚拟机
[root@localhost ~]# virsh console vm1  
  
## 查看是否生效    
[root@localhost ~]# lscpu  

五、快照管理

扩展知识:
1、KVM中,快照只能使用qcow2创建,raw格式一般无法创建快照。
2、KVM的快照分内部快照和外部快照。
     1)内部快照:快照数据存储在虚拟机磁盘文件内部,与虚拟机的磁盘文件是同一个文件
     优点:

  • 管理和使用相对简单
  • 对于某些类型的虚拟机(例如,不使用特定类型固件的虚拟机)来说,性能较好

     缺点:

  • 可能会因为快照的积累导致原始磁盘文件膨胀
  • 不支持具有某些类型固件的虚拟机,例如基于 pflash 的固件。【常见问题:2】就是这个问题造成的。

    2)外部快照:快照数据存储在虚拟机的外部文件中,不会更改原有的虚拟机磁盘文件。外置磁盘快照创建时,会保存正在使用磁盘作为backing file(此磁盘不再接受新数据,只保存快照前的数据),并创建一个新的磁盘作为overlays以等待写入新数据
    优点:

  • 对原始虚拟磁盘文件的影响较小
  • 更适合大型虚拟机和频繁的快照操作

    缺点:

  • 快照恢复可能比内部快照更慢
  • 管理稍微复杂,尤其是在处理多个快照时
  • 外部快照没有libvirt支持,只能通过手动完成

3、使用pflash固件的虚拟机,不能创建内部快照,只能使用外部快照。

查看虚拟机的固件是否是pflash固件,可以通过如下方式:
[root@localhost ~]# virsh edit vm1   #搜索里面的"<loader" 就可以看到type类型
<domain type='kvm'>
  <name>vm1</name>
  <uuid>b52cead7-62e3-4c58-9933-de633cc8ac25</uuid>
  <memory unit='KiB'>16777216</memory>
  <currentMemory unit='KiB'>16777216</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <os>
    <type arch='aarch64' machine='virt-6.2'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/vm1_VARS.fd</nvram>
    <boot dev='hd'/>
  </os>
......

4、关于快照链

  • 快照链就是多个快照组成的关系链。
  • base-image<--guest1<--snap1<--snap2<--snap3<--snap4<--当前(active)
  • 如上,base-image是制作好的一个qcow2格式的磁盘镜像文件,它包含有完整的OS以及引导程序
  • qcow2(qemu copy-on-write)格式镜像支持快照,具有创建一个base-image,以及在base-image(backing file)基础上创建多个copy-on-write overlays镜像的能力。
  • 我们为base-image创建一个快照guest1,那么,此时base-image就是guest1的backing file(此磁盘不再接受新数据,只保存快照前的数据)。guest1就是base-image的overlay。
  • 同理,为guest1虚拟机创建了一个快照snap1。此时,guest1就是snap1的backing file,snap1是guest1的overlay。
  • backing files和overlays十分有用。可以快速的创建瘦装备实例,特别是在开发测试过程中可以快速回滚到之前某个状态。

1、创建外部快照:

  • <disk>应该是file类型才行
[root@localhost ~]# virsh dumpxml vm1 | grep '<disk' -A5 
  •    查看虚拟机当前使用的磁盘文件的target和source。创建快照时,--diskspec参数需要使用这里的target
[root@localhost ~]# virsh domblklist vm1                                            
 Target   Source
---------------------------------
 sda      /home/qcow2/vm1.qcow2
 sdb      -
  • 创建第1个快照,并指定快照文件名
[root@localhost ~]# virsh snapshot-create-as --domain vm1 \
                    --name vm1-snapshot1 --disk-only \
                    --diskspec sda,snapshot=external,file=/home/qcow2/vm1-snapshot1.qcow2 \
                    --atomic
  • 创建第2个快照,并指定快照文件名
[root@localhost ~]# virsh snapshot-create-as --domain vm1 \
                    --name vm1-snapshot2 --disk-only \
                    --diskspec sda,snapshot=external,file=/home/qcow2/vm1-snapshot2.qcow2 \
                    --atomic

参数说明:

  • --disk-only:表示创建磁盘的快照,不包括内存和CPU状态。
  • --atomic:表示创建快照的操作是原子的,即要么完全成功,要么完全失败,不会处于中间状态。
  • --diskspec参数的第一个参数是命令 virsh domblklist vm1执行结果中的target。若没有--diskspec参数,快照文件名默认是“虚拟机名.快照名”,即,vm1.snapshot2-vm1
  • 列出指定虚拟机的所有快照
[root@localhost ~]# virsh snapshot-list vm1                                         
 Name            Creation Time               State
------------------------------------------------------------
 vm1-snapshot1   2024-05-18 20:25:35 +0800   disk-snapshot
 vm1-snapshot2   2024-05-18 20:26:02 +0800   disk-snapshot
  • 再次查看虚拟机当前使用的磁盘文件的target和source。可见,虚拟机所使用磁盘已经更新到新创建的overlays快照磁盘/home/qcow2/vm1-snapshot2.qcow2
[root@localhost ~]# virsh domblklist vm1       
 Target   Source
-------------------------------------------
 sda      /home/qcow2/vm1-snapshot2.qcow2
 sdb      -
  • 查看虚拟机当前使用xml配置文件,可见,虚拟机配置<source>已经更新到新创建的overlays快照磁盘/home/qcow2/vm1-snapshot2.qcow2
[root@localhost ~]# virsh dumpxml vm1 | grep '<disk' -A5    
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/home/qcow2/vm1-snapshot2.qcow2' index='4'/>
      <backingStore type='file' index='3'>
        <format type='qcow2'/>
        <source file='/home/qcow2/vm1-snapshot1.qcow2'/>
  • 列出指定快照及其所有前置快照的image(快照磁盘文件)和backing file(即快照前的原始磁盘文件)
[root@localhost ~]# qemu-img info /home/qcow2/vm1-snapshot1.qcow2 -U --backing-chain      
image: /home/qcow2/vm1-snapshot1.qcow2
file format: qcow2
virtual size: 405 GiB (434865438720 bytes)
disk size: 200 KiB
cluster_size: 65536
backing file: /home/qcow2/vm1.qcow2
backing file format: qcow2
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

image: /home/qcow2/vm1.qcow2
file format: qcow2
virtual size: 405 GiB (434865438720 bytes)
disk size: 1.78 GiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

2、还原到指定的外部快照,从快照vm1-snapshot2 还原到 快照vm1-snapshot1

  • 还原快照前需关闭虚拟机
[root@localhost ~]# virsh shutdown vm1     
  • 还原前查看虚拟机所使用的磁盘                                       
[root@localhost ~]# virsh domblklist vm1                                            
 Target   Source
-------------------------------------------
 sda      /home/qcow2/vm1-snapshot2.qcow2
 sdb      -
  • 修改虚拟机配置,将虚拟机磁盘文件改成待还原快照vm1-snapshot1的磁盘文件
[root@localhost ~]# virt-xml vm1 --edit target=sda --disk path=/home/qcow2/vm1-snapshot1.qcow2  
Domain 'vm1' defined successfully.  
  • 可见虚拟机所使用的磁盘文件已经改成快照vm1-snapshot1的磁盘文件                        
[root@localhost ~]# virsh domblklist vm1                                            
 Target   Source
-------------------------------------------
 sda      /home/qcow2/vm1-snapshot1.qcow2
 sdb      -
  • 在<backingStore/>嵌套标签内部,找到待还原快照vm1-snapshot1对应的<source/>、<format/>,将它们及它们的所有外层嵌套都删除,只保留该<source/>同级的<backingStore/>及其内部嵌套。

       说起来比较绕,见下面所标注的删除线
[root@localhost ~]# virsh edit vm1                                                  
      <backingStore type='file'>
        <format type='qcow2'/>
        <source file='/home/qcow2/vm1-snapshot1.qcow2'/>

        <backingStore type='file'>
          <format type='qcow2'/>
          <source file='/home/qcow2/vm1.qcow2'/>
        </backingStore>
      </backingStore>
改成:
      <backingStore type='file'>
        <format type='qcow2'/>
        <source file='/home/qcow2/vm1.qcow2'/>      #这是快照vm1-snapshot1的backing file            
      </backingStore>

  • 启动虚拟机
[root@localhost ~]# virsh start vm1    
  • 删除snapshot2-vm1快照元数据             
[root@localhost ~]# virsh snapshot-delete vm1 snapshot2-vm1 --metadata   
  • 删除snapshot2-vm1快照磁盘文件           
[root@localhost ~]# rm /home/qcow2/snapshot2-vm1.qcow2         

3、还原到指定的外部快照,快照snapshot1-vm1 还原到 虚拟机初始状态(第一个快照前的状态)

  • 还原前需关闭虚拟机
[root@localhost ~]# virsh shutdown vm1    
  • 还原前查看虚拟机所使用的磁盘         
[root@localhost ~]# virsh domblklist vm1  
  • 修改虚拟机配置,将虚拟机磁盘文件改成第一个快照前的磁盘文件vm1.qcow2      
[root@localhost ~]# virt-xml vm1 --edit target=sda --disk path=/home/qcow2/vm1.qcow2  
  • 可见虚拟机所使用的磁盘文件已经改成第一个快照前的磁盘文件vm1.qcow2                                                                                    
[root@localhost ~]# virsh domblklist vm1  
  • 删除所有的<backingStore/>标签及其内嵌的<source/>、<format/>。因为该标签只是配置一个镜像的backing file,而虚拟机第一个快照前的磁盘文件没有backing file,只有创建了快照,才有backing file                       
[root@localhost ~]# virsh edit vm1   
  • 再次启动虚拟机                                               
[root@localhost ~]# virsh start vm1     
  • 删除snapshot1-vm1快照元数据                                   
[root@localhost ~]# virsh snapshot-delete vm1 snapshot1-vm1 --metadata
  • 删除snapshot1-vm1快照磁盘文件    
[root@localhost ~]# rm /home/qcow2/snapshot1-vm1.qcow2     

六、虚拟机克隆

说明:KVM虚拟机的克隆包括3种,分别是:完整克隆、手动克隆、链接克隆。推荐完整克隆和手动克隆。

1、完整克隆--强烈推荐:将当前虚拟机的磁盘文件完全复制一份,克隆时被克隆的虚拟机必需处于**挂起**或**关机**状态。克隆后,新虚拟机需要修改相关配置,比如IP地址。

  • 克隆前,虚拟机关机
[root@localhost ~]# virsh shutdown vm1
  • 完整克隆方法一:自动
[root@localhost ~]# virt-clone -o vm1 -n new-vm --auto-clone       

参数说明:

  • -o 源虚拟机   
  • -n new新的虚拟机
  • --auto-clone  表示克隆的虚拟机磁盘文件会和源虚拟机的磁盘文件存放相同路径,需要修改新虚拟机的相关配置,如IP等
  • 完整克隆方法二:指定存放路径
##基于源虚拟机vm1克隆出新虚拟机new-vm,它只使用源虚拟机vm1的多个磁盘中的1个磁盘:
[root@localhost ~]# virt-clone -o vm1 -n new-vm --file /home/qcow2/disk-1-vm1.qcow2
    
##基于源虚拟机vm1克隆出新虚拟机new-vm,它使用源虚拟机vm1的两个磁盘:                                                                           
[root@localhost ~]# virt-clone -o vm2 -n new-vm --file /home/qcow2/disk-1-vm1.qcow2 \
                    --file /home/qcow2/disk-2-vm1.qcow2

2、手动克隆--推荐:克隆后,新虚拟机需要修改相关配置,比如IP地址。

  • 手动克隆方法一:
## 复制源虚拟机磁盘为新虚拟机的磁盘
[root@localhost ~]# cp vm1.qcow2 new-vm.qcow2    

## 复制源虚拟机配置文件为新虚拟机的配置文件                    
[root@localhost ~]# virsh dumpxml vm1 > new-vm.xml   

## 修改新虚拟机配置文件的name/qcow2磁盘路径
## 删除UUID(会自动生成)/mac地址(会自动生成)                
[root@localhost ~]# vi new-vm.xml   
           
## 导入新虚拟机的配置文件                                
[root@localhost ~]# virsh define new-vm.xml    
    
## 启动新虚拟机                            
[root@localhost ~]# virsh start new-vm                
  • 手动克隆方法二:
## 基于vm1的磁盘文件生成new-vm的磁盘文件
[root@localhost ~]# qemu-img convert -f qcow2 -O qcow2 \
                    -c /home/qcow2/vm1.qcow2 /home/qcow2/new-vm.qcow2

## 复制源虚拟机配置文件为新虚拟机的配置文件
[root@localhost ~]# virsh dumpxml vm1 > new-vm.xml  

## 修改新虚拟机配置文件的name/qcow2磁盘路径
## 删除UUID(会自动生成)/mac地址(会自动生成)                 
[root@localhost ~]# vi new-vm.xml      
          
#导入新虚拟机的配置文件                              
[root@localhost ~]# virsh define new-vm.xml  
     
#启动新虚拟机                             
[root@localhost ~]# virsh start new-vm     

3、链接克隆--不推荐:占用磁盘空间较小,但是前置条件是源虚拟机文件要存在,如果把源虚拟机删除了,链接克隆后的虚拟机就不能用了

注意:源虚拟机不能启动,否则启动克隆后的虚拟机将报错

  • 创建链接克隆磁盘要指定-f 为qcow2,-b 源磁盘 新磁盘
[root@localhost ~]# qemu-img create -f qcow2 -F qcow2 -b vm1.qcow2 new-vm.qcow2    
  • 查看链接克隆磁盘
[root@localhost ~]# qemu-img info new-vm.qcow2                                               
image: new-vm.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: vm1.qcow2  # 引用的源磁盘文件
Format specific information:
    compat: 1.1
    lazy refcounts: false
  • 复制源虚拟机配置文件为新虚拟机的配置文件
[root@localhost ~]# virsh dumpxml vm1 > new-vm.xml   
  • 修改新虚拟机配置文件的name/qcow2磁盘路径,删除UUID(会自动生成)/mac地址(会自动生成)                                                                
[root@localhost ~]# vi new-vm.xml    
  • 导入新虚拟机的配置文件                                                      
[root@localhost ~]# virsh define new-vm.xml   
  • 启动新虚拟机                                  
[root@localhost ~]# virsh start new-vm    

七、为虚拟机创建瘦装备实例(domain)

说明:

  • domain是指libvirt创建的虚拟机.
  • qemu-img是QEMU的磁盘管理工具,qemu编译之后,默认会提供这个工具
  • 使用模板镜像centosbase(backing file)创建2个虚拟机(基于centosbase),20G不是必须的参数
qemu-img create -b centosbase.qcow2 -f qcow2 centos1.qcow2 20G
qemu-img create -b centosbase.qcow2 -f qcow2 centos2.qcow2 20G

现在,创建出来的centos1和centos2都可以用来启动一个虚拟机,因为他们依赖于backing file,所以这两个磁盘只有几百个字节大小,只有新的文件才会被写入此磁盘。

八、虚拟机镜像导出,用于ESXi导入

  • 从虚拟机退出到宿主机
[root@localhost ~]# Ctrl + ]  
  • 导出虚拟机为ovf格式
[root@localhost ~]# qemu-img convert -O qcow2 vm2.qcow2 vm2.vmdk        
  • ESXi不直接支持ovf格式,需要将导出的ovf格式转换为ESXi支持的格式,如vmdk格式
## 将ovf格式转换为vmdk格式
[root@localhost ~]# qemu-img convert -O vmdk vm2.vmdk vm2-template.vmdk  
  • 导出的vmdk格式虚拟机导入到ESXi中

   步骤:
   a.打开vSphere客户端,连接到ESXi主机。
   b.在主界面上选择"文件" -> "部署OVF模板"。
   c.在弹出的对话框中,选择转换后的vmdk格式虚拟机文件。
   d.按照向导的指引,设置虚拟机的名称、存储位置、网络配置等参数。
   e.完成向导后,vSphere客户端会自动导入虚拟机到ESXi中

九、把OVA格式的文件导入KVM虚拟机

  • 将ova文件转换成qcow2文件
[root@localhost ~]# qemu-img convert -O qcow2 tacgui-disk1.vmdk /home/tacgui.qcow2  
  • 使用kvm图形工具新建一台虚拟机,选择"import existing disk image"

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐