如何在KVM中使用qcow2镜像文件创建虚拟机

时间:2020-01-09 10:37:55  来源:igfitidea点击:

如何安装以qcow2格式提供的qcow2镜像?
如何从提供的镜像(例如image.qcow2)文件创建Linux KVM 虚拟机?

说明:qcow只是QEMU使用的磁盘文件格式。

qcow是QEMU写时复制的首字母缩写。
该文件格式有两种版本:.qcow和.qcow2。
自然,您必须使用qcow2。
它是qcow格式的更新版本。

本教程将学习如何使用Linux KVM导入.qcow2镜像并从中创建VM。

如何在Linux KVM中使用qcow2创建VM

导入qcow2以在Linux上创建VM的步骤:

  • 下载云镜像,例如rhel-8.0-beta-1-x86_64-kvm.qcow2或CentOS-7-x86_64-GenericCloud.qcow2
  • 为KVM VM创建元数据和用户数据文件
  • 创建磁盘镜像以创建新的VM
  • 导入qcow2以在KVM中创建VM
  • 创建虚拟机并通过使用ssh命令登录到虚拟机进行验证

我假设您已经下载了云镜像并设置和配置了KVM。
如果看不到:

  • 如何在CentOS 7/RHEL 7无头服务器上安装KVM
  • 在Ubuntu 16.04 LTS无头服务器上安装KVM
  • 在Debian Linux 9 Headless Server上设置KVM服务器

让我们详细了解所有步骤。

设置所需的目录和配置文件

执行以下mkdir命令:

# D=/var/lib/libvirt/images ## <-- Dir to store new VM ##
# VM=theitroad-rhel8 ## <-- set vm name ##
# mkdir -vp $D/$VM

KVM VM的元数据文件

您必须使用文本编辑器(例如vi命令)来创建元数据文件,以设置实例主机名和ID:

# cd $D/$VM
# vi meta-data

追加以下内容:

instance-id: theitroad-rhel8
local-hostname: theitroad-rhel8

在vi/vim文本编辑器中保存并关闭文件。

KVM VM的用户数据文件

接下来,您需要根据设置修改预构建的云镜像。
例如,使用Cloud-init添加用户,ssh密钥,设置时区等。
让我们看看如何创建具有2048MB内存,60GB磁盘空间,2个vCPU,用户名为Hyman和ssh键的RHEL 8(测试版)虚拟机。
创建一个名为user-data的新文件:

# cd $D/$VM
# vi user-data
#cloud-config
# Customize as per your need. At least change username (Hyman) and ssh-ed22519 
# key with your actual public key
 
# Hostname management
preserve_hostname: False
hostname: theitroad-rhel8
fqdn: theitroad-rhel8.theitroad.com
 
# Setup Users with ssh keys so that I can log in into new machine
users:
    - default
    - name: Hyman
      groups: ['wheel']
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      ssh-authorized-keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG+zTQJ5FBsD2dTPlPVvQUbMq3jt19HflOtAy1EPBmKw KVM VM Lab SSH Login key for user
 
# Configure where output will go
output:
  all: ">> /var/log/cloud-init.log"
 
# configure interaction with ssh server
ssh_genkeytypes: ['ed25519', 'rsa']
 
# Install your public ssh key to the first user-defined user configured
# in cloud.cfg in the template (optional since I created Hyman)
ssh_authorized_keys:
  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG+zTQJ5FBsD2dTPlPVvQUbMq3jt19HflOtAy1EPBmKw KVM VM Lab SSH Login key for user
 
# set timezone for VM
timezone: Asia/Kolkata
 
# Remove cloud-init 
runcmd:
  - systemctl stop network && systemctl start network
  - yum -y remove cloud-init

复制云镜像

我在/var/lib/libvirt/boot中存储了rhel-8.0-beta-1-x86_64-kvm.qcow2:

# cd $D/$VM
# cp -v /var/lib/libvirt/boot/rhel-8.0-beta-1-x86_64-kvm.qcow2 $VM.qcow2

输出示例:

‘/var/lib/libvirt/boot/rhel-8.0-beta-1-x86_64-kvm.qcow2’ -> ‘theitroad-rhel8.qcow2’

为新的KVM VM创建60GB磁盘镜像

让我们创建一个名为theitroad-rhel8.new.image的60GB镜像来存储我们的新VM:

# cd $D/$VM
# export LIBGUESTFS_BACKEND=direct
# qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 60G
# ls -l

我将使用virt-resize命令来调整名为theitroad-rhel8.new.image的虚拟机磁盘的大小:

# virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image
# ls -l

最后,使用mv命令将新调整大小的图像theitroad-rhel8.new.image覆盖为theitroad-rhel8.qcow2

# mv -v $VM.new.image $VM.qcow2
# ls -l

为我们的RHEL 8(beta)VM创建一个cloud-init ISO和一个池

根据我们的用户数据和元数据创建ISO9660文件:

# cd $D/$VM
# mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data

最后,为我们的KVM VM创建一个存储池:

# virsh pool-create-as --name $VM --type dir --target $D/$VM
# ls -l

如何安装RHEL 8下载中提供的rhel-8.0-beta-1-x86_64-kvm.qcow2镜像?

现在,您要做的就是通过导入新创建的theitroad-rhel8.qcow2镜像来安装VM,运行:

# cd $D/$VM
# virt-install --import --name $VM \
--memory 2048 --vcpus 2 --cpu host \
--disk $VM.qcow2,format=qcow2,bus=virtio \
--disk $VM-cidata.iso,device=cdrom \
--network bridge=virbr0,model=virtio \
--os-type=linux \
--os-variant=rhel7.5 \
--graphics spice \
--noautoconsole

删除不需要的文件:

使用rm命令删除文件:

# cd $D/$VM
# virsh change-media $VM hda --eject --config
# rm -vi meta-data user-data *.iso

如何找出DHCP提供的KVM VM的IP地址

# virsh net-dhcp-leases default
# virsh net-dhcp-leases default | grep $VM | awk '{ print }'
`192.168.122.229/24`

登录到RHEL 8(测试版)VM

您所要做的就是使用ssh命令,如下所示:

$ ssh [email protected]