如何在KVM中使用qcow2镜像文件创建虚拟机
如何安装以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`