AN
作者AN·2018-11-07 13:38
资深技术专家·某金融企业

VMDK转QCOW2镜像操作

字数 5902阅读 4992评论 0赞 4

准备工作,vmdk转换为qcow2
1.如果导出为单个ova文件,则解压ova文件,tar tvf xxx.ova;
如果为ovf+vmdk文件,则无需解压
2.qemu-img convert -O qcow2 CentOS64bit-v7.0-disk1.vmdk CentOS64.qcow2 转换镜像文件

一、安装KVM
安装CentOS7.5版本系统,OS镜像CentOS-7-x86_64-Everything-1804.iso,选择GNOME图形化桌面模式安装,配置可上Internet网,如不能上网,则需挂载本地ISO yum源,后续安装组件需要

  1. 验证CPU是否支持KVM;如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。
    egrep '(vmx|svm)' /proc/cpuinfo
  2. 关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled
  3. 最小安装的CentOS安装一些最基本的包(可选项,因为我是刚安装好的CentOS,所以为了下面方便点,先把一些必要的工具安装下)
    yum install epel-release net-tools vim unzip zip wget ftp -y
  4. 安装KVM及其依赖项,及其图形化管理virt-manager
    yum install qemu-kvm libvirt virt-install bridge-utils virt-manager -y
  5. 验证安装结果,下图说明已经成功安装了
    lsmod | grep kvm
  6. 开启kvm服务,并且设置其开机自动启动
    systemctl start libvirtd
    systemctl enable libvirtd
  7. 查看状态操作结果,如下图所示,说明运行情况良好
    systemctl status libvirtd
    systemctl is-enabled libvirtd
  8. 配置网桥模式,先将 /etc/sysconfig/network-scripts/ 目录下的网卡配置文件备份一份(不要备在当前目录以及子目录下,其他目录随意)
    a. 创建 ifcfg-br0 文件
    内容如下:
    BOOTPROTO=static
    DEVICE=br0
    TYPE=Bridge
    NM_CONTROLLED=no
    IPADDR=192.168.1.95
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=61.177.7.1
    DNS2=8.8.8.8
    b. 移除掉原来的 ifcfg-enp0s25 ,重新创建该文件,内容如下:
    BOOTPROTO=none
    DEVICE=enp0s25
    NM_CONTROLLED=no
    ONBOOT=yes
    BRIDGE=br0
    c. 重启网络服务
    systemctl restart network

9.关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service

二、安装虚拟机 ,制作镜像

  1. 打开virt-manager图形化工具
    命令界面输入 virt-manager,或者图形化界面Application->System Tools->Virtual Machine Manager
    2.选择 导入存在的磁盘镜像
    yiqdxg1dra9
    yiqdxg1dra9

3.选择qcow2文件
amdjf5jdwq4

amdjf5jdwq4

4.网络选择 Brider br0,虚拟机通过网桥进行通信;
migg2elwtem

migg2elwtem

注意现在的Storage,后续生成的qcow2文件就在此处

5.安装过程中,会报下面错误,由于缺少virto驱动,导致磁盘认不到,需要安装virtio相关驱动。【如virtio模式下,可以启动成功,则该qcow2文件可以不装驱动,跳到第10步实施后续配置】
017dp64aaewac

017dp64aaewac

6.先通过IDE磁盘驱动方式启动
点击 虚拟机详情->IDE DISK1->DISK BUS选择"IDE",重新启动虚拟机,可以正常启动
akhzln7nnf4

akhzln7nnf4

7.启动后,挂载磁盘,点击 虚拟机详情->IDE CDROM1 ->选择ISO镜像
ryitd0c9vur

ryitd0c9vur

47clyxd7tbx
47clyxd7tbx

x0k71thy2ps
x0k71thy2ps

8.启动系统后,禁止selinux【CentOS需要禁用】
关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled
9.virtio驱动安装
网上由很多教程可以学习【可以用阿里云或者华为教程,第9小结引自阿里社区】【根据操作系统类型实施方式不同,如下实施方式适用于Ubuntu部分系统;验证下来Ubuntu14.04.5自带virtio驱动,无需安装驱动,可直接转换做为Openstack镜像使用】
需要安装virtio驱动的镜像
需要在导入镜像之前,为源服务器安装virtio驱动。
检查服务器内核是否支持virtio驱动

1. 运行 grep -i virtio /boot/config-$(uname -r) 检查当前操作系统的内核是否支持virtio驱动。

r6isy4osygq

r6isy4osygq

说明 
    ○ 如果在输出信息中没有找到 VIRTIO_BLK 及 VIRTIO_NET 的信息,表示该操作系统没有安装virtio相关驱动,需要为您的服务器编译安装virtio驱动。 
    ○ 如果参数 CONFIG_VIRTIO_BLK 及 CONFIG_VIRTIO_NET 取值为 y,表示包含了virtio驱动,可以直接跳到第10步
    ○ 如果参数 CONFIG_VIRTIO_BLK 及 CONFIG_VIRTIO_NET 取值为 m,需要进入第2步。 
执行命令 lsinitrd /boot/initramfs-$(uname -r).img | grep virtio 确认virtio驱动是否包含在临时文件系统initramfs或者initrd中。

wzkr6bgooy

wzkr6bgooy

说明 
    ○ 截图表明,initramfs已经包含了virtio_blk驱动,以及其所依赖的virtio.ko、virtio_pci.ko和virtio_ring.ko,可以直接导入到glance镜像中 
    ○ 如果临时文件系统initramfs没有包含virtio驱动,则需要修复临时文件系统。

修复临时文件系统
通过检查,发现源服务器内核支持virtio驱动,但是临时文件系统initramfs或者initrd中没有包含virtio驱动时,需要修复临时文件系统。以CentOS等为例。

• CentOS/RedHat 5 

mkinitrd -f --allow-missing \

        --with=xen-vbd  --preload=xen-vbd \\
        --with=xen-platform-pci --preload=xen-platform-pci \\
        --with=virtio_blk --preload=virtio_blk \\
        --with=virtio_pci --preload=virtio_pci \\
        --with=virtio_console --preload=virtio_console \\
• CentOS/RedHat 6/7 

mkinitrd -f --allow-missing \

        --with=xen-blkfront --preload=xen-blkfront \\
        --with=virtio_blk --preload=virtio_blk \\
        --with=virtio_pci --preload=virtio_pci \\
        --with=virtio_console --preload=virtio_console \\
        /boot/initramfs-$(uname -r).img $(uname -r)
• Debian/Ubuntu 

echo -e 'xen-blkfront\nvirtio_blk\nvirtio_pci\nvirtio_console' >> \
/etc/initramfs-tools/modules
mkinitramfs -o /boot/initrd.img-$(uname -r)"
编译安装virtio驱动
此处以Centos服务器为例,为您示范如何编译安装virtio驱动。
下载内核安装包

• 运行 yum install -y ncurses-devel gcc make wget 安装编译内核的必要组件。 
• 运行 uname -r 查询当前系统使用的内核版本,如示例中的4.4.24-2.a17.x86_64。

• 前往 Linux内核列表页面 下载对应的内核版本源码,如示例中的4.4.24开头的linux-4.4.24.tar.gz的网址为 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz。

xkgfqxsonf

xkgfqxsonf

• 运行 cd /usr/src/ 切换目录。 
• 运行 wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.24.tar.gz 下载安装包。 
• 运行 tar -xzf linux-4.4.24.tar.gz 解压安装包。 
• 运行 ln -s linux-4.4.24 linux 建立链接。 
• 运行 cd /usr/src/linux 切换目录。 

编译内核

• 依次运行以下命令编译内核。 

make mrproper
symvers_path=$(find /usr/src/ -name "Module.symvers")
test -f $symvers_path && cp $symvers_path .
cp /boot/config-$(uname -r) ./.config
make menuconfig

• 出现以下界面时,开始打开virtio相关配置: 

说明 选 * 配置表示编译到内核,选 m 配置表示编译为模块。

    a. 使用空格勾选Virtualization项。

4ppe3p6l5nj

4ppe3p6l5nj

    确认是否勾选了KVM(Kernel-based Virtual Machine)选项。

je38ybtjj6c

je38ybtjj6c

    Processor type and features  --->

[*] Paravirtualized guest support --->

 --- Paravirtualized guest support

(128) Maximum allowed size of a domain in gigabytes
[*] KVM paravirtualized clock
[*] KVM Guest support
m4z5bgehxhp

m4z5bgehxhp

    Device Drivers  --->

[*] Block devices --->
<M> Virtio block driver (EXPERIMENTAL)
-*- Network device support --->

 <M>   Virtio network driver (EXPERIMENTAL)
    b. 按下Esc键退出内核配置界面并根据弹窗提示保存.config文件。
    c. 检查 virtio相关配置是否已经正确配置。 
    d. 若检查后发现暂未设置virtio相关配置,运行以下命令手动编辑.config文件。 

make oldconfig
make prepare
make scripts
make
make install

    e. 运行以下命令查看virtio驱动的安装情况。 

find /lib/modules/"$(uname -r)"/ -name "virtio." | grep -E "virtio."
grep -E "virtio.*" < /lib/modules/"$(uname -r)"/modules.builtin
说明 如果任一命令输出virtio_blk、virtio_pci.virtio_console等文件列表,表明您已经正确安装了virtio驱动。

10.系统启动后,一系列配置(Centos为例)

关闭防火墙
编辑 Linux 操作系统的网卡配置文件
a. 整行清除 HWADDR 配置项。
b. 整行清除 UUID 配置项。
c. 将 NM_CONTROLLED 配置项的取值由 yes 改为 no。
d. 将 BOOTPROTO 配置项的取值配置为 dhcp

启用 Linux 操作系统的 SSH 服务。
a. 使用以下命令启用 Linux 操作系统的 SSH 服务。
[root@localhost ~]# chkconfig sshd on
b. 重启虚拟机。
c. 使用以下命令检查 SSH 服务的状态,如图 2-29 所示。
[root@localhost ~]# service sshd status
清除 Linux 操作系统的 Network Persistence Rules。
a. 使用以下命令清除 70-persistent-net.rules 中的内容。
[root@localhost ~]# echo > /etc/udev/rules.d/70-persistent-net.rules
b. 使用以下命令清除 75-persistent-net-generator.rules 中的内容。
[root@localhost ~]# echo > /lib/udev/rules.d/75-persistent-net-generator.rules
正常关闭 Linux 系统。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广