当前位置: 首页 > news >正文

Ubuntu下的虚拟化KVM

虚拟机(VM)是一个运行在虚拟层的计算机,通常被叫做hypervisor。它并不是真是存在的,然而可以像一个真正的计算机一样工作。虚拟机所运行的虚拟层决定了虚拟机的虚拟界面,对于虚拟机上运行的操作系统而言,它们就是对应的网卡,内存,硬盘等。从某种意义上讲,虚拟机让guest操作系统误以为它运行在特定的物理设备上,这些物理设备实际上由虚拟软件模拟,并且虚拟软件负责处理与实际硬件的交互。这被称作硬件模拟。
虚拟技术中有一个折中处理。有些虚拟软件运行在操作系统层之上,这种虚拟化的灵活性比较差,在本机速度性能比较高。另外一些虚拟软件直接或接近等于运行在硬件(bare metal)上,也就是说该虚拟软件或者是操作系统内核的一部分,或者是作为操作系统运行,在虚拟软件跟物理硬件资源之间没有其他软件层。这种方法速度比较快。


KVM

KVMKernel-based Virtual Machine)是Linux系统内核的一部分。KVM并不提供硬件模拟,只是提供底层操作。运行KVM,需要处理器支持硬件虚拟化。IntelAMD都推出了处理器的扩展,用来支持硬件虚拟化,分别为IntelVT-xAMD-V


以下命令查看CPU是否支持硬件虚拟化

egrep -c '(vmx|svm)' /proc/cpuinfo

返回值为0说明CPU不支持硬件虚拟化;返回1或更高值说明CPU支持。通常情况,硬件虚拟化扩展是默认不启用的,要通过进入BIOS设置启用。


X200为例进行BIOS修改:开机F12->BootMenu-><Enter Setup>->Config->CPU->

Intel(R) Virtualization Technology选为Enabled

Intel(R) VT-d Feature选为Enabled


以下命令查看处理器是否是64

egrep -c ' lm ' /proc/cpuinfo

返回为0说明CPU不是64位,返回为1或更高值说明是64位。


查看目前安装的Ubuntu内核是否为64位,使用以下命令

uname -m

x86_64说明系统为64-bit kerneli386,i486, i586 or i686说明Linux内核为32位。


查看安装的Ubuntu的版本信息:

cat /etc/lsb-release

查看Linux内核版本

cat /proc/version


安装kvm-ok查看kvm状态

sudo apt-get install cpu-checker

在终端输入sudo kvm-ok来检查CPU目前状态。

CPU不支持硬件虚拟化时返回:

INFO:Your CPU does not support KVM extensions

KVM acceleration can NOT be used

CPU支持硬件虚拟化但未启用时返回:

INFO:Your CPU supports KVM extensions

INFO:KVM (vmx) is disabled by your BIOS

HINT:Enter your BIOS setup and enable Virtualization Technology (VT),

and then hard power off/power on your system

KVM acceleration can NOT be used

CPU支持硬件虚拟化且正常启用时返回

INFO:/dev/kvm does not exist

HINT: sudo modprobe kvm_intel

INFO:Your CPU supports KVM extensions

KVM acceleration can be used



安装kvm

sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

其中qemu-kvmKVM必须的用户空间组件

libvirt-bin是与Linux虚拟功能交互的二进制的C工具箱,不仅支持KVM,而且支持XENVirtualBox等。

virtinst是一系列创建VMs的命令行工具

bridge-utils是用来配置Linux以太网链接的工具集

此外,可以安装virt-viewer,为VMs提供了一个GUIVNC的界面;virt-manager,提供了一个管理VMsGUI。安装后可以在Dash主页找到。


默认情况下,通过KVM安装的客户操作系统可以使用网络服务,但是对于网络上的其他电脑是不可见的,也就是说不能作为服务器被其他系统访问。默认情况下,VMsIP地址范围为10.0.2.0/24,而客户操作系统可以通过10.0.2.2来访问主机。如果你想要改变网络设置,使得虚拟机能够被外界访问,那么需要建立网络链接,让它们对网络上的其他系统可见。需要注意的是,使用这种方法,需要通过默认的网络管理器来控制建立的硬件;该方法对有线网络可行,对无线网络不可行。首先安装libcap2-bin。然后需要通过设置cap_net_admin授予QEMU权限管理网络。

64位系统,通过以下命令设置:

sudo setcap cap_net_admin=ei /usr/bin/qemu-system-x86_64

32位系统,通过以下命令设置:

sudo setcap cap_net_admin=ei /usr/bin/qemu-system-i386

然后在/etc/network/interfaces添加以下几行,使用DHCP创建一个桥接界面br0

auto br0

iface br0 inet dhcp

<tab>bridge_portseth 0

<tab>bridge_stp off

<tab>bridge_fd 0

<tab>bridge_maxwait 0


通过以下命令重启网络:

sudo /etc/init.d/networking restart

最后,你需要通过该桥接网络创建客户VMs。用这个新的br0界面手动定义你的客户操作系统,与你在操作系统中通常定义的方式相同。


通过KVM创建虚拟机有几种方法。其中一种方法是通过vmbuilder。使用命令sudo apt-get install python-vm-builder来安装。Vmbuilder必须的两个参数是虚拟软件名称和将要使用的操作系统名称。vmbuilder功能非常强大,可以通过命令行输入vmbuilder kvm ubuntu --help 来了解。这里的例子基于KVMUbuntu12.04 LTS

sudo vmbuilder kvm ubuntu --suite precise --flavour virtual --arch i386 -o --libvirt qemu:///system --ip 192.168.0.100 --hostname lovelace --bridge br0

--suite指定了Ubuntu的发行版本,--flavour指定我们想要使用虚拟内核(这是用来建造JeOS image的),--arch说明我们想要创建使用一个32位的机器上,-ovmbuilder去覆盖前面版本的VM--libvirt报告本地虚拟环境,增加结果VM到有效机器的列表。


vmbuilder的功能非常强大,更适合有一定基础的用户。此外,我们可以使用virtinst来进行KVM的使用和配置。virtinst包括了很多个工具,这里我们简单介绍下virt-installvirt-clone,前者用来创建虚拟机;后者用来复制现存的虚拟机。我们可以使用virt-install来实现刚才使用vmbuilder的功能;区别仅仅是参数选项不同。此外virt-install还可以创建包含GUI的桌面image,能被VNC访问。

sudo virt-install -n hopper -r 512 --disk path=/var/lib/libvirt/images/hopper.img, size=20 -c /dev/cdrom --accelerate --connect=qemu:///system --vnc --noautoconsole -v

-n hopper定义虚拟机的名字;-r 512指定了虚拟机被分配的内存,单位为M--disk path=...是虚拟硬盘的路径,可以是一个文件,一个分区,或者是一个逻辑空间。这里我们在/var/lib/libvirt/images目录创建了一个20G的文件名字为hopper.img-c/dev/cdrom是主机的CD-ROM设备路径,也可以使用一个ISO文件;--accelerate启用内核加速;--connect定义使用的hypervisor--vncVNC虚拟控制台到处客户;--noautoconsole阻止自动链接到虚拟机的控制台;-v创建一个完全虚拟化的客户。


要复制一个虚拟机,可使用virt-clone

sudo virt-clone -o hopper -n knuth -f /var/lib/libvirt/images/knuth.img --connect=qemu:///system

-o hopper定义源虚拟机名;-n knuth定义目的虚拟机名;-f定义新虚拟机使用的文件/分区/逻辑空间的路径;--connect定义使用的hypervisor


要打开一个虚拟机,使用命令

virsh -c qemu:///system start hopper

要关闭一个虚拟机,使用命令

virsh -c qemu:///system shutdown hopper

当虚拟机被安装和运行时,你可以通过配置的IP地址来链接。你也可以使用GUI界面

virt-view -c qemu:///system hopper

你可以使用GUI来管理你的虚拟机

virt-manager -c qemu:///system



另外常用的虚拟软件有VirtualBoxVMwareXenVirtualBox的使用非常简单,可以在Ubuntu软件库下载,也可以从www.virtualbox.org/wiki/Downloads网页直接下载对应版本的最新软件。VMware是付费的企业级的虚拟平台。Ubuntu目前宣布不支持Xen的使用。


相关文章:

  • 使用MeTriX MuX 1.1
  • 使用Endnote进行文献管理
  • GOOGLE学术检索技巧
  • MATLAB下的程序调试
  • SVM学习笔记(1)LIBSVM在matlab下的使用安装
  • SVM学习笔记(2)LIBSVM在python下的使用
  • SVM学习笔记(3)LIBSVM中的核函数及其参数
  • C++一个完整的类实例及其调用
  • LaTeX算法排版例子
  • 高斯卷积
  • Matlab PCA 算法
  • Matlab排序函数
  • Matlab取整函数
  • Matlab图像直方图相关函数
  • Matlab中find函数的使用说明
  • CSS中外联样式表代表的含义
  • Go 语言编译器的 //go: 详解
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java面向对象及其三大特征
  • Leetcode 27 Remove Element
  • mockjs让前端开发独立于后端
  • XForms - 更强大的Form
  • 第2章 网络文档
  • 番外篇1:在Windows环境下安装JDK
  • 服务器之间,相同帐号,实现免密钥登录
  • 简单实现一个textarea自适应高度
  • 如何胜任知名企业的商业数据分析师?
  • 时间复杂度与空间复杂度分析
  • 使用Gradle第一次构建Java程序
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 积累各种好的链接
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • # Java NIO(一)FileChannel
  • #define、const、typedef的差别
  • (C++17) optional的使用
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (四)linux文件内容查看
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .gitignore文件使用
  • .Net IOC框架入门之一 Unity
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • @font-face 用字体画图标
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [51nod1610]路径计数
  • [Android]Tool-Systrace
  • [C++]高精度 bign (重载运算符版本)
  • [C++]类和对象【上篇】
  • [CISCN2019 华东南赛区]Web11