热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何创建KVM虚拟机

LinuxKernel-basedVirtualMachine(KVM)是一款Linux开放源码虚拟化软件,基于硬件虚拟化扩展(IntelVT-X和AMD-V)和QEMU的修改版。KVM—其文件格式为kvm.ko,是一个提供核心虚拟化基础架构和特定于处理器的模块kvm-intel.ko和kvm-amd.ko的可

Linux Kernel-based Virtual Machine (KVM) 是一款 Linux 开放源码虚拟化软件,基于硬件虚拟化扩展(Intel VT-X 和 AMD-V)和 QEMU 的修改版。KVM — 其文件格式为 kvm.ko,是一个提供核心虚拟化基础架构和特定于处理器的模块 kvm-intel.ko 和 kvm-amd.ko 的可装载内核模块 — 其设计目标是在需要引导多个未改动的 PC 操作系统时支持完整的硬件模拟。

通过使用 KVM,您可以运行多个其本身运行未改动的 Windows 或 Mac OS X 映像的虚拟机。每个虚拟机都有各自的虚拟硬件,比如网卡、磁盘和图形适配器等。

在本文中,我使用的机器为运行 SUSE 11 操作系统的 IBM Blade Server HS21。HS21 支持 Intel VT 扩展和 2.6.27.13 内核版本的 SUSE 11,后者已经包含 KVM(KVM 包含在 2.6.20 以后的 Linux 内核版本中)。

需要通过 3 个步骤才能配置好虚拟服务器:

安装操作系统和所需的软件。

创建虚拟服务器。

配置虚拟服务器网络。

步骤 1. 安装操作系统和所需的软件

这个小节讨论:

安装操作系统和所需的软件

确定 CPU 是否支持 KVM

确保正确安装了软件

安装操作系统和所需的软件

在安装了操作系统之后,您可以通过以下命令找到已安装的 Linux 内核:

kvm:~ # uname -a
Linux kvm 2.6.27.13-1-pae #1 SMP 2009-01-27 13:41:16 +0100 i686 i686 i386 GNU/Linux

然后选择并安装 kvm 和 kvm-kmp-default 包(已经包含在针对 I/O 硬件模拟进行修改的 QEMU 中)。如图 1 所示,选择这些包并单击 Accept 安装它们:

图 1. 查找已安装的内核
查找已安装的内核

现在,kvm-kmp-default 版本应该为 78_2.6.27.13_1-11.3.(78 表示 KVM 的版本,其余的信息表示内核的版本)。

典型的 KVM 安装包含以下组件:

一个用于管理虚拟化硬件的设备驱动程序;这个驱动程序通过字符设备 /dev/kvm 公开其功能。

一个用于模拟 PC 硬件的用户空间组件;目前,这是在用户空间处理的,并且是经过稍微修改的 QEMU 进程。

I/O 模型,它直接源自 QEMU 的模型,并且支持 copy-on-write 磁盘映像和其他 QEMU 特性。

确定 CPU 是否支持 KVM

KVM 依赖于 x86 虚拟化扩展。为了检查兼容性,请运行命令 grep vmx /proc/cpuinfo(对于 AMD,运行命令 grep svm /proc/cpuinfo)。如果输出类似于清单 1,那么 CPU 就支持 KVM;否则,CPU 不支持 KVM。

清单 1. 检查 CPU 是否支持 KVM
kvm:~ # grep vmx /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc arch_perfmon pebs bts pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca lahf_lm
确定正确安装了软件

运行命令 lsmod | grep kvm 检查 KVM 模块是否成功安装。如果结果类似于以下输出,那么 KVM 模块已成功安装:

kvm:~ # lsmod | grep kvm
kvm_intel              42604  0
kvm                   150264  1 kvm_intel
步骤 2. 创建虚拟服务器

这个小节讨论:

创建原始磁盘映像

在该映像上安装操作系统

启动虚拟服务器

创建原始磁盘映像

要创建原始磁盘映像,使用以下命令:

dd if=/dev/zero of=/mnt/kvmtest.img bs=1024 count=0 seek=$[10*1024*1024]

使用该命令将创建一个大小为 10GB 的映像,其名称为 kvmtest.img。

在该映像上安装操作系统

要将操作系统安装在该映像上,使用以下命令:

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -boot d -cdrom /mnt/SLES-11-DVD-i586-RC3-DVD1.iso -m 1024

因为您安装的是现成的 KVM 包而不是从头构建 KVM,所以要使用 qemu-kvm 而不是 qemu-system-x86_64。

-boot d 意味着我们将让虚拟服务器从 CDROM 启动。-m 1024 表示我们为虚拟服务器指定 1GB 的内存。

在运行该命令之后,操作系统安装界面应该类似于图 2:

图 2. 操作系统安装界面
操作系统安装界面

接下来,按照常规的方式安装操作系统。

启动虚拟服务器

在成功安装操作系统之后,您可以通过以下命令启动虚拟服务器:

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024

您的服务器应该像一个运行在物理硬件之上的服务器。

步骤 3. 配置虚拟服务器网络

您看到了如何成功创建一个虚拟服务器,但还没有为虚拟服务器创建网络。现在,我将展示如何为虚拟服务器创建桥接网络:

安装 bridge-util 包

创建桥接网络界面

为网络控制创建脚本

启动来宾操作系统网络

配置来宾操作系统网络

bridge-util 包安装

我们需要创建一个桥接网络,因此我们需要在操作系统的软件管理部分安装 bridge-util 包。图 3 显示了在哪里选择和安装该包。

图 3. 安装 bridge-util 包
安装 bridge-util 包
构建桥接网络界面

在操作系统的网络配置界面,单击 Add a new network interface(见图 4):

图 4. 添加新的网络界面
添加新的网络界面

您将得到类似于图 5 所示的 Hardware Dialog:

图 5. 针对网络界面的硬件配置对话框
针对网络界面的硬件配置对话框

选择 Bridge 作为设备类型;单击 Next 继续配置网络。您将看到如图 6 所示的配置界面:

图 6. 网络配置界面
网络配置界面

在 “Bridged Devices” 下选择 eth0 并为桥接界面配置一个静态 IP,它与图 7 的配置 eth0 相同。

图 7. 为桥接界面配置一个静态 IP
为桥接界面配置一个静态 IP

完成以上操作之后,eth0 配置将被清除,单击 Next 继续。此时,您将回到网络配置界面。您将看到创建了一个新的桥接网络界面,并且清除了 eth0 配置。

构建网络控制脚本

网络控制脚本应该类似于清单 2:

清单 2. 网络控制脚本
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
        tunctl -u `whoami` -t $1
        ip link set $1 up
        sleep 0.5s
        brctl addif $switch $1
        exit 0
else
        echo "Error: no interface specified"
        exit 1
fi
启动来宾操作系统

通过以下命令启动带有网络界面的来宾操作系统:

/usr/bin/qemu-kvm -hda /mnt/kvmtest.img -m 1024 -net nic,macaddr=52:54:00:12:34:56 -net tap,script=/etc/qemu-ifup

您将在启动虚拟服务器时指定一个网络界面。

配置来宾操作系统网络

在来宾操作系统启动之后,像平常一样配置它的网络。

祝贺您!您已经成功创建了一个基于 KVM 的虚拟服务器。


推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
author-avatar
自由的成长_563_742_784
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有