虚拟化技术介绍没有统一的标准,如:仿真、全虚拟化、半虚拟化、操作系统级虚拟化。其实我觉得这些说法并不统一,只是视角的问题。也可能是理解不深,所以说的只是个人理解,也可能是理解不够深入,仅供参考。但即使是虚拟化这个词,不同的人和不同的层次也有不同的理解。神级虚拟化(虚拟化的起源)首先站在计算机科学的层面,即从神级的角度(只是为了形象化,不神化科学),从神级的角度看什么是虚拟化,它究竟从哪里开始:它已经存在了50多年。虚拟化技术最早应用于IBM的7044、MIT的CTSS(CompatibleTimeSharingSystem)和曼彻斯特大学的Atlas项目(世界上最早的超级计算机之一)。这些是请求分页和监督流程调用的先驱。硬件虚拟化IBM早在1960年代开发System/♂?Model67大型机时就认识到虚拟化的重要性。Model67通过VMM(VirtualMachineMonitor)将所有硬件接口虚拟化。在早期的计算中,操作系统被称为主管。能够运行其他操作系统的操作系统称为管理程序(该术语是在1970年代创造的)。VMM可以直接在底层硬件上运行,允许多个虚拟机(VM)运行。每个VM都可以运行自己的私有操作系统实例——在早期,这被称为CMS(或会话监控系统)。然后VM继续发展,现在您可以在Systemz9?大型机上发现VM。这提供了很好的向后兼容性,甚至是System/360产品线。在这里,hypervisor术语有点重要,需要测试。在早期的计算中,操作系统被称为主管。能够运行其他操作系统的操作系统称为管理程序。处理器虚拟化虚拟化的另一个早期用途(在本例中是处理器的仿真)是P代码(或伪代码)机器。P代码是一种在虚拟机而非实际硬件上运行的机器语言。P-code自1970年代就在UCSDPascal系统上为人所知,该系统将Pascal程序编译成P-code并在P-code虚拟机上运行。这使得P-code程序具有很强的可移植性,只要有可用的P-code虚拟机,P-code程序就可以运行。1960年代的BCPL(BasicCombinedProgrammingLanguage,基本组合编程语言)的设计也采用了同样的概念,C语言就是从它发展而来的。在这种用法中,编译器将BCPL代码编译成称为O代码的中间机器代码。接下来的第二步是将O代码编译成目标机器的原始语言。现代编译器使用的模型在将编译器移植到新的目标体系结构方面提供了很大的灵活性(使用中间语言将前端与后端分开)。Soga,原来的C设计也有这样的考虑。-0-这个虚拟化概念涉及的真深。指令集虚拟化虚拟化的最新发展称为指令集虚拟化或二进制翻译。在这个模型中,虚拟指令集被翻译成底层硬件的物理指令集,通常是动态的。执行代码时,会转换一段代码。如果出现分支情况,则导入并转换新的代码集。这使得它非常类似于缓存操作,后者将指令块从内存移动到本地缓存中以供执行。该模型最近被用于Transmeta设计的Crusoe中央处理器(CPU)。二进制转换是通过CodeMorphing的专利技术实现的。一个类似的例子是一个完整的虚拟化解决方案,它使用运行时代码扫描来查找和重定向特权指令(用于解决特定处理器指令集的一些问题)。这样一来,就好像是Java的JIT(just-in-time)实时编译。当虚拟机发现某个方法或代码块运行特别频繁时,它会将这些代码识别为“HotSpotCode”(热点代码),为了提高热点代码的执行效率,虚拟机会对这些代码进行编译在运行时转换为与本地平台相关的机器代码,并执行各种级别的优化。完成这个任务的是JIT编译器。在这个层面上,虚拟化是:虚拟化是指在同一台物理服务器上模拟多个虚拟机,每个虚拟机都有逻辑上独立的CPU、内存、硬盘和网络接口等,虚拟化可以提高硬件的利用率资源并使多个应用程序能够在同一台物理机器上隔离运行。从广义虚拟化的角度(知道为什么我改用神级虚拟化,实在不知道广义上应该叫什么,知道的同学可以帮忙科普一下):虚拟化分为分为硬件层面的虚拟化和软件层面的虚拟化。Virtualizationatthehardwarelevel硬件层面的虚拟化,我发现很多人好像都是从这个角度来看的,所以我把虚拟化技术分为:emulation,fullvirtualization,paravirtualization,hypervirtualization,Operatingsystem-levelvirtualization(这个应该属于软件级虚拟化,这里统一内存比较方便)。在硬件虚拟化层面,现代虚拟化技术通常是全虚拟化和半虚拟化的混合体。VMWare、Xen、KVM等常见的硬件虚拟化技术既支持全虚拟化,也支持半虚拟化。硬件虚拟化提供的虚拟机独立运行一个完整的操作系统,因此同一台物理主机上存在大量相同或相似的进程和内存页,造成较大的性能损失(例如:宿主机操作系统为Centos,使用KVM生成的多台虚拟机,每台虚拟机运行Windows操作系统和同一个QQ程序,必然会对宿主机的性能造成较大损失)。因此,硬件虚拟化又称为重量级虚拟化,同一台主机上能够并发运行的虚拟机数量是相当有限的。该级别的虚拟化项目包括:项目类型许可Bochs仿真LGPLQEMU仿真LGPL/GPLVMware全虚拟化privatez/VM全虚拟化privateXen超虚拟化GPLUML超虚拟化GPLLinux-VServer操作系统级虚拟化GPLOpenVZ操作系统级虚拟化GPL一句话:虚拟化在硬件层级就是在硬件上模拟N套硬件,N套硬件上可以安装不同的系统,然后不同的虚拟化技术层级不同,造成性能、便捷性等方面的差异。软件级虚拟化从这个角度来看,有人将上述硬件级虚拟化称为全虚拟化(这个概念与上面硬件级虚拟化中的“全虚拟化”有冲突,可能会有混淆,不同的观点理解和看到是不同的,这可能不会那么混乱)。指在同一台物理服务器上提供多个相互隔离的虚拟运行环境,也称为容器技术。在软件虚拟化层面,同一主机上的所有虚拟机(也称为Container)共享主机的操作系统实例,不存在运行多个操作系统实例(例如:主机的操作系统为Centos)带来的性能损失,通过软件虚拟化技术生成多个Container,每个Container运行QQ程序,由于共享同一个宿主Centos操作系统,所以在Centos所有Container中只有一个QQ程序进程)。因此,软件虚拟化也被称为轻量级虚拟化,同一台主机上能够并发运行的虚拟运行环境数量相对宽松。以SolarisOS上的Container为例,一个SolarisOS实例理论上最多可以支持8000个Container(实际可以运行的Container数量取决于系统资源和负载)。同样,Linux操作系统上的LXC也可以轻松地在同一主机上同时支持相当数量的虚拟操作环境。LXC技术属于这一层次。对应的项目包括:Linux-VServer、OpenVZ和另一著名的Docker虚拟化性能分析(XEN/KVM/LXC)。参考http://blog.chinaunix.net/uid..三种虚拟化性能对比LXC>>KVM>>XEN由于LXC使用cgroup机制,其性能损失基本为0。三种虚拟化隔离对比XEN>>KVM>>LXCLXC只能虚拟化linux。三种虚拟化内存利用率LXC>>KVM>>XEN由于LXC共享内核,所以内存利用率最高;另外两种解决方案需要每个虚拟机有一个单独的操作系统来占用部分内存空间。虚拟化的演进和发展已经到了这个地步,虚拟化应该会催生行业差异。诞生的产业是:云计算和大数据。云计算比较有代表性,亚马逊AWS和开源项目Openstack。大数据更具代表性。此外,虚拟化还可以将多台计算机合并为一台计算机。这通常称为服务器聚合或网格计算。安装步骤准备1、安装centos7时,SOFTWARESELECTION选择VirtualizationHost2、进入系统后,修改hosthostnamectl--staticset-hostnamecdh-host.c7.jevoncode.com3、关闭SELinuxvim/etc/selinux/config更改启用禁用4。关闭防火墙systemctlstopfirewalld.servicesystemctlmaskfirewalld.service5。创建一个桥接网卡,假设现有的Ethernet网卡是eth0,然后改成如下入口目录:cd/etc/sysconfig/network-scripts/TYPE="Ethernet"BOOTPROTO="none"DEFROUTE="yes"PEERDNS="是"PEERROUTES="是"IPV4_FAILURE_FATAL="否"IPV6INIT="是"IPV6_AUTOCONF="是"IPV6_DEFROUTE="是"IPV6_PEERDNS="是""IPV6_PEERROUTES="是"IPV6_FAILURE_FATAL="否"IPV6_ADDR_GEN_MODE="稳定-privacy"NAME="eth0"UUID="0cd981cd-8d6c-4802-a185-c64770110711"DEVICE="eth0"ONBOOT="yes"BRIDGE="br0"其中BOOTPROTO、BRIDGE、ONBOOT需要改,其他的和系统安装时一样"Bridge"BOOTPROTO="static"DEFROUTE="yes"PEERDNS="yes"PEERROUTES="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="是"IPV6_DEFROUTE="是"IPV6_PEERDNS="是"IPV6_PEERROUTES="是"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="br0"UUID="0cd981cd-8d6c-4802-a185-c64770110711"DEVICE="br0"ONBOOT="yes"IPADDR=192.168.1.108PREFIX=16GATEWAY=192.16.1.1DNS1=192.168.1.1其中TYPE,BOOTPROTO,BRIDGE,ONBOOT,NAME,DEVICE,IPADDR,PREFIX,GATEWAY,DNS1需要改,其他复制ifcfg-eth0。上面两个网卡需要说一下,此时只能启动br0。如果ifupeth0,会提示设备p4p1已经是网桥的成员;can'tenslaveittobridgebr0canonlyifupbr0,所以br0的IPADDR之前最好设置eth0获取的ip,网关查询是:netstat-rnorroute-nnetstat-rnKernelIProutingtableDestinationGatewayGenmaskFlagsMSS窗口irttIface0.0.0.0192.168.1.10.0.0.0UG000br0192.168.0.00.0.0.0255.255.0.0U000br0192.168.122.00.0.0.0255.255.255.0br0br00br00Uvir0.0.0.0开头的那一行的Gateway是默认网关)DNS查询是cat/etc/resolv.conf注意,你需要检查你的CPU是否支持虚拟化:egrep'(vmx|svm)'/proc/cpuinfo有vmx(Intel)或svm(AMD)这两个词,意思是支持CPU安装kvm以上准备工作完成后,就可以安装kvm1.安装KVM包及其依赖yuminstallqemu-kvmlibvirtvirt-installbridge-utils-ykvm相关包及其功能:安装包功能qumu-kvmKVM核心模块libvirt虚拟机管理工具,集成各种操作虚拟机的界面库函数的中间件图形化界面管理虚拟机,virt-manager通过libvirt实现对虚拟机的操作和验证安装结果,该命令的输出显示KVM模块已正确加载lsmod|grepkvm3。启动kvm服务,设置为自动启动systemctlstartlibvirtdsystemctlenablelibvirtd4。查看kvm服务运行状态的两种方法systemctlstatuslibvirtdsystemctlis-enabledlibvirtd新建虚拟机1.新建虚拟机命令:virt-install\--virt-type=kvm\--name=centos7A\--vcpus=2\--memory=4096\--location=/root/CentOS-7-x86_64-DVD-1708.iso\--diskpath=/home/vms/centos7A.qcow2,size=40,format=qcow2\--networkbridge=br0\--graphicsnone\--extra-args='console=ttyS0'\--force2。安装过程是centos的命令式安装,和图形界面很相似,都是跳过虚拟机1.退出链接的虚拟机:ctrl+]2。查看虚拟机列表virshlist--all3。链接虚拟机virsh控制台centos7A4。启动虚拟机virshstartcentos7C5。删除虚拟机virshundefinecentos7Arm-rf/home/vms/centos7A.qcow2虚拟机复制KVM虚拟机复制分为两种情况:本机复制1.关闭虚拟机virshshutdowncentos7A2。查看虚拟机镜像文件在哪里virsheditcentos7A下面的标签是文件的路径
