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

KVM---kernelbasedvirtualmachine

KVM是一种基于内核的虚拟机,它利用了现代的CPU提供的硬件虚拟化技术(在Intel称为VT,在AMD称为AMD-V)。KVM非内核部分是基于QEMU实现的,因此其使用上与QEMU基本一致。http://www.linux-kvm.org/要使用KVM,你的CPU必须支持硬件虚拟化技术。查找/proc/cp

KVM是一种基于内核的虚拟机,它利用了现代的CPU提供的硬件虚拟化技术( 在Intel称为VT,在AMD称为AMD-V)。KVM非内核部分是基于QEMU实现的,因此其 使用上与QEMU基本一致。

http://www.linux-kvm.org/


要使用KVM,你的CPU必须支持硬件虚拟化技术。查找/proc/cpuinfo中的 flags字段,如果其中含有vme或者svm标志则表示你的系统支持硬件虚拟化技术 ,否则你就需要看一下是你的CPU压根就不支持硬件虚拟化还是在BIOS中把它关 闭了。也可使用下面的命令查看:

grep -e "(vme|svm)" /proc/cpuinfo | head -n 1
配置内核

内核中需要以下选项被启用:

CONFIG_VIRTUALIZATION
CONFIG_KVM

对于INTEL的CPU还需要选中下面的项:

CONFIG_KVM_INTEL

AMD的CPU需选中下面的项:

CONFIG_KVM_AMD

创建磁盘映像文件

操作系统总是要安装在磁盘上的,KVM通过磁盘映像文件来提供一个虚拟的磁 盘。创建磁盘映像文件的命令如下:

qemu-img create 

例如下面的命令创建了一个5G大小的磁盘映像文件 os.img

qemu-img create os.img 5G

注意:目前KVM中此命令已更名为kvm-img

安装操作系统

创建完磁盘映像文件后就可以在其上安装操作系统了,下面是一个例子:

kvm -hda os.img \
-cdrom fedora.iso \
-usb -usbdevice tablet \
-localtime \
-m 256 \
-boot d

这个命令在磁盘映像文件os.img上安装fedora.iso操作 系统。选项-boot d表示从光驱来引导系统,这里用选项-cdrom fedora.iso指定了光驱中的内容就是光盘镜像文件 fedora.iso

启动磁盘映像文件中安装的系统

命令与前面安装系统的命令类似,只不过不需要指定选项-cdrom和 选项-boot d。此时,KVM从硬盘映像文件中进行系统的引导,例如:

kvm -hda os.img \
-usb -usbdevice tablet \
-localtime \
-m 256

KVM的monitor就是一个虚拟机的控制台,在这里你可以查看虚拟机的状态, 执行虚拟机的控制命令等。在虚拟机启动后,同时按下Ctrl+Alt+2即 可进入monitor。在monitor中可以使用help来查看其所支持的命令,通常情况下 help会输出很多行以致于我们无法看到所有的输出,此时可以按组合键 Shift+PageUp来向上翻页。要返回客户机中,可以同时按下 Ctrl+Alt+1来进行切换。

默认情况下KVM虚拟机的网络连接是通过其内置的NAT和DHCP服务器来形成了 一个私有的局域网,这种方式使得虚拟机在宿主主机的网络中不可见。但有时我 们可能就是希望这个虚拟机在宿主主机的网络系统中看起来就是一台独立的主机 ,这事就需要采用网桥和TAP的方式进行连接。

首先,宿主主机的网络必须采用桥接的方式连接到其所在的网络中。例如:

ifconfig eth0 up prmisc 0.0.0.0 
brctl addbr br0
brctl addif eth0

上面的命令先将网卡eth0置于监听模式且不赋予其IP地址,创建了 一个网桥设备br0,最后将网卡eth0接到网桥上。网桥的配 置详见网桥配置指南。

简单地讲,TAP设备就是一个虚拟的网卡,其输入输出不是经过实际的网线而 是注册它的用户程序。用户程序向TAP中写入以太网数据帧,然后内核对其传递 ;来自于网络的以太网数据帧经内核处理后成为用户程序从TAP中读入的数据。 关于TAP的详细的说明参见TUN/TAP。

KVM打开TAP设备以实现与宿主的网络通信,KVM还可以在虚拟的客户机中虚拟 出一个网卡,它将这个虚拟的网卡收到的来自客户系统的数据都写入到TAP设备 中,同时也将从TAP中读入的数据转给客户机中的这个虚拟网卡。这样就实现了 虚拟机与主机的网络通讯。如果要让虚拟机直接参与宿主机所在的网络进行通信 ,我们可以通过将TAP设备所注册的网卡接到宿主机的网桥上。

下面是一个例子:

kvm -hda os.img \
-usb -usbdevice tablet \
-localtime \
-m 256 \
-net nic -net tap,ifname=tap0,script=no,downscript=no

选项-net nic表示要在客户机中虚拟出一个网卡,选项-net tap,ifname=tap0,script=no,downscript=no表示在宿主机中使用 TAP设备,其注册的网卡名为tap0,并且在启动关闭虚拟机是不执行系 统脚本。

在上面的命令执行后,虚拟机开始启动,这时我们还需要在宿主机中对TAP设 备进行配置,并将其接到网桥上。相关命令如下:

ifconfig tap0 up 0.0.0.0
brctl addif br0 tap0

KVM启动时加入选项-snapshot就得到了一个快照系统,对这个 系统的任何修改在系统关闭后自动消失。这个功能有点像硬盘保护卡,在系统关 闭时所有的对文件磁盘驱动器的写操作均消失。

通过使用snapshot选项你就获得了一个不怕攻击的系统,系统有了问题只要 重启就又回到了原来的样子。

但有时你希望某些修改被保留下来,这是你可以在monitor中使用commit命令来将此 时驱动器的状态保留下来,也就是真正地写入到驱动器中。例如:

commit 

相应的驱动器可由命令info block得到。

在monitor中先确定光驱的设备,然后在将其指向系统的文件或者光驱设备, 例如:

info block
change ide1-cd0 /dev/cdrom

要让虚拟机有声音,需要做两方面的工作:指定宿主机声音系统、指定虚拟 机的虚拟声卡类型。

我们可以通过特定的环境变量来告诉KVM宿主机的声音系统的种类。我用 的是ALSA系统,使用混音器来实现多个程序的声音同时输出,所以在执行KVM命 令前要进行如下的环境变量导出:

export QEMU_AUDIO_DRV=alsa
export QEMU_ALSA_DAC_DEV=dmix
export QEMU_ALSA_ADC_DEV=null

这里我不需要声音的输入,所以模数转换(ADC)设备变量 指定为null

虚拟机的虚拟声卡可以通过kvm的命令行选项soundhw来指定,例如 :

kvm -soundhw es1370

使用overlay

通过对一个磁盘映像文件创建overlay,我们可以让所有的写操作均作用到 overlay上,从而保持原映像文件的不变。这在我们配置好了一个基本系统想保 持其不变时很有用。

下面的命令为磁盘映像文件os.img创建了一个大小为2G 的overlay os.img.ovl

qemu-img create -b os.img -f qcow2 os.img.ovl
2G

注意:不能使用默认的raw格式,所以必须加-f选项。

用户的组属性

用户必须在组kvm中,如果要使用KVM的 usb_add功能,也就是要对usb设备进行写入操作,那么用户还必 须在组usb中。

可通过下面的命令添加用户到这两个组中去:

usermod -a -G usb,kvm 

用户在组usb中对于正常使用需要写权限的usb设备很重要,否 则就会出现下面的错误:

Could not add USB devic

但对于鼠标这类只需要读权限的usb设备,则并不需要用户在usb组 中。实际上,这是由系统的usb设备的节点访问属性决定的,例如:

$ ls -l /dev/bus/usb/001/
total 0
crw-rw-r-- 1 root usb 189, 0 May 23 14:34 001
crw-rw-r-- 1 root usb 189, 6 May 27 14:19 007

当然这设备的访问属性可以通过udev来进行设置 ,所以理论上将用户也可以不在usb中!


推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 本文介绍了如何在 DB2 环境中创建和删除数据库编目。创建编目是连接新数据库的必要步骤,涉及获取数据库连接信息、使用命令行工具进行配置,并验证连接的有效性。删除编目则用于移除不再需要的数据库连接。 ... [详细]
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
author-avatar
手机用户2502921201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有