首页 > 其他分享 >基础知识-虚拟化(Virtualization)技术

基础知识-虚拟化(Virtualization)技术

时间:2025-01-06 14:23:50浏览次数:1  
标签:虚拟化 hypervisor 虚拟机 系统 基础知识 Virtualization 我们 模拟器

(250106)

参考资料

KVM 虚拟化技术 | cnblogs | 惨绿少年@clsn.io
虚拟化介绍 | cnblogs | 休耕
云计算与虚拟化技术发展编年史 | cnblogs | 云物互联
nova系列二:kvm介绍 | cnblogs | linhaifeng
虚拟化与容器 | cnblogs | marility
《LPIC-3-Virtualization-and-Containerization-Study-Guide-Certification-Companion-for-the-LPIC-3-305-Exam-(Certification-Study...-(Antonio-Vazquez)》(只翻译理论内容,实操部分因于各种问题无法复刻。)

虚拟化概念

  • 虚拟化的术语
  • 虚拟化的优缺点
  • 各种虚拟机监控程序(hypervisor)和虚拟机监视器的变体
  • 物理机到虚拟机的迁移
  • 虚拟机在主机系统间的迁移 还会介绍这些术语和工具:hypervisor、硬件虚拟机(HVM)、半虚拟化(PV)、模拟与仿真、CPU标志、/proc/cpuinfo、以及迁移。

引言

说到虚拟化,大家通常想到的是运行一个虚拟的(而非实际的)机器。但虚拟化这个概念,不仅适用于机器,还能用在存储设备、网络等等上。用“虚拟化”这个广义的术语,我们可以通过软件模拟、硬件虚拟化、容器等多种方式来实现“虚拟化”。在书里,我们会学习主要概念,并通过实例来加深理解。

仿真化(emulation)

image
图1-1. DOSBox

我们可以用软件来模拟另一个系统,从而创建一个“虚拟”机器。比如,用来模拟基于Z80的经典个人电脑,像Spectrum、Amstrad、Commodore等。MAME(多街机模拟器)是个著名的例子,用来模拟经典街机。DOSBox(图1-1)是另一个模拟器例子,常用于玩老式的DOS游戏和其他程序。最后,我们还会提到QEMU(快速模拟器),这将在第2章详细讨论。

所有这些程序都使用软件来模拟原始机器中每个硬件组件的行为。让我们更详细地看看什么是模拟。
我们可以将模拟器定义为一种硬件或软件,它使一个计算机系统表现得像另一个系统。很多时候,模拟器只是模拟硬件架构;如果需要特定的固件或操作系统,也需要提供或模拟。你可能熟悉一些需要用户提供ROM文件才能工作的计算机模拟器。根据用途不同,有几种类型的模拟器。我们将列举其中一些。

游戏机模拟器
这是我们之前提到的第一种模拟器。针对不同平台有许多模拟器,例如Fuse用于Spectrum,Caprice用于Amstrad,Retro Virtual Machine用于Spectrum和Amstrad(图1-2),PPSSPP用于PlayStation Portable,PCSXR用于PlayStation 1等等。
image
图1-2. Retro Virtual Machine

终端模拟器
在过去,通常有一台大型主机和几个“哑”终端。这些终端只有键盘和显示器,连接到主机,主机负责执行实际的计算。如今,现代计算机使用终端模拟器远程连接到其他系统。你可能熟悉像PuTTY(图1-3)这样的程序,它是一个多平台终端模拟器。
image
图1-3. PuTTY

打印机模拟器
当应用程序想要打印文档时,应用程序需要使用页面描述语言(PDL)将适当的信息发送到打印机。两种最常用的PDL是Postscript和PCL。打印机命令语言(PCL)由惠普开发。许多不同制造商的打印机使用模拟来支持PCL语言。

网络模拟器
网络模拟器旨在测试应用程序在真实网络中的性能。它们允许测试路由器和交换机的配置。一些最著名的是GNS3(图1-4)和Cisco Packet Tracer。
image
图1-4. GNS3

系统模拟器
还有一些程序模拟完整系统,如QEMU,我们将在下一章详细讨论,以及PearPC。PearPC在x86主机上模拟PowerPC系统。

模拟化(simulation)

与模拟非常相似的概念是仿真;尽管在某些情况下这两个术语可以互换使用,但它们之间还是有一些区别。在仿真器中,主要目标是使仿真器的行为尽可能接近原始系统。
例如,模拟器可以模仿另一个系统的工作方式,但在较高层次上,不会深入到低层次的细节。另一方面,仿真器应尝试在所有层次上模仿原始系统的工作方式。
还有另一个区别,模拟器的主要目标是提供与原始系统相同的功能,但不一定以与原始系统相同的方式工作。也就是说,模拟器通常可以执行为原始系统设计的任何程序。然而,正如我们之前提到的,仿真器更感兴趣的是模仿原始系统的工作方式,而不是提供功能。因此,为原始系统设计的程序在仿真器中通常表现较差,甚至根本无法工作。

虚拟化(Virtualization)

正如我们之前所说,最初“虚拟”机器仅通过软件实现,但很快英特尔和AMD分别在他们的处理器中加入了称为Intel VT-x和AMD-V的新扩展。这种硬件辅助虚拟化提供了比纯软件解决方案更好的性能。在Linux系统中,我们可以检查/proc/cpuinfo文件以查看处理器的特性:速度、型号、CPU标志等。如果处理器支持硬件辅助虚拟化,相应的标志将会出现。

如果我们有一个英特尔CPU,我们会寻找vmx标志。

grep vmx /proc/cpuinfo
flags           : ... vmx ...

如果我们有一个AMD CPU,我们应该寻找svm标志。

grep svm /proc/cpuinfo
flags           : ... svm ...

我们可以使用lscpu命令获得大致相同的信息。
lscpu

当一个系统的CPU启用了这些标志时,它可以轻松地执行虚拟机。托管虚拟机的软件称为hypervisor(“超级监督者”)。有时,使用术语“虚拟机监视器”而不是hypervisor。在这种情况下,我们可以恰当地谈论“虚拟化”。
hypervisor管理虚拟机,分配它们正常运行所需的资源。有两种不同类型的hypervisor:

  • 类型I hypervisor,也称为“裸机”hypervisor:在这种情况下,hypervisor直接运行在系统硬件上。这种类型的hypervisor的例子有VMware ESXi、Microsoft Hyper-V或Xen。
  • 类型II hypervisor:这些hypervisor作为操作系统上的应用程序运行。一些例子包括VMware Workstation、Oracle VirtualBox(图1-5)或Microsoft Virtual PC。
    image
    图1-5. Oracle VirtualBox

虚拟化类型
我们之前已经看到,我们可以广义地谈论“虚拟化”,这包括软件模拟和仿真。但只有当存在硬件虚拟化时,我们才能恰当地谈论“虚拟化”。
从这个起点出发,我们可以根据使用的标准区分许多类型的虚拟化。最初我们可以列举这两种虚拟化类型:

  • 完全虚拟化:hypervisor几乎重新创建了原始系统的每个组件,使得客户操作系统无需修改即可运行。
  • 半虚拟化:通过特殊接口提供对硬件资源的访问。这更高效,因为hypervisor不需要执行完全虚拟化中所需的许多高成本操作。然而,客户操作系统需要修改,以便它可以在半虚拟化环境中执行。
    还有其他结合了完全虚拟化和半虚拟化特性的解决方案,如PVHVM或PVH。由于这是入门内容,我们不会深入细节,但我们将在第3章中看到这些其他虚拟化类型。
    当使用半虚拟化时,我们将谈论半虚拟化虚拟机。当使用完全虚拟化时,我们将谈论硬件虚拟机,或HVM。
    我们还应该在这里提到另一个概念,操作系统级虚拟化。在这种情况下,内核允许多个用户空间实例完全隔离地存在。这些实例在Linux环境中通常称为容器,尽管在其他操作系统中使用不同的术语来表示相同的概念,如FreeBSD中的jails或Solaris中的zones。

虚拟化的优缺点
使用虚拟化有许多优点。我们可以列举以下内容:

  • 成本效益:硬件使用效率更高;我们不再需要为每个逻辑服务器配备专用的物理服务器。
  • 管理更简单:通过使用虚拟化,我们可以使用快照在需要时回滚更改;我们还可以通过使用编排自动化许多任务。
  • 能源使用效率高:通过使用更少的硬件,需要更少的能源,从而降低成本。

不幸的是,在考虑虚拟化时,我们还需要了解一些缺点:

  • 并非所有软件和/或硬件都可以轻松虚拟化。
  • 硬件访问是间接的,因此效率较低。

物理机到虚拟机的迁移
通过虚拟化现有的物理机,我们可以从虚拟化的优势中受益。简化备份和恢复操作。这个过程通常被称为物理到虚拟迁移,简称P2V。我们可以使用不同的工具进行P2V。我们将列举其中一些。

VMware Converter
目前用于执行P2V迁移的最常用工具之一是VMware独立转换器。这是一个非常易于使用的商业工具。

virt-p2v
virt-p2v将物理机转换为由KVM管理的虚拟机。在本书的后面,我们将更详细地研究KVM和这个工具,并看到一个例子。

openQRM
openQRM是一个用于异构数据中心基础设施的管理平台,具有许多有趣的功能,其中包括P2V和V2V转换。

Clonezilla
另一种可能性,虽然不像我们之前看到的那么容易,是克隆我们计划虚拟化的服务器的磁盘。我们可以使用的一个非常好的工具是Clonezilla(图1-6)。之后,我们应该将磁盘映像文件转换为我们的hypervisor识别的格式。我们可以在他们的官方网站上看到一个完整的例子。
image
图1-6. 启动Clonezilla Live

在系统之间迁移虚拟机
除了将物理机转换为虚拟机外,有时我们可能需要将虚拟机从某个hypervisor迁移到另一个;这简称为V2V。我们将在接下来的章节中看到几个实际例子。

容器虚拟化概念

在本章中,我们将涵盖以下概念:

  • 理解系统和应用程序容器的概念
  • 理解并分析内核命名空间(kernel namespaces)
  • 理解并分析控制组(control groups,cgroups)
  • 理解并分析能力(capabilities)
  • 理解seccomp、SELinux和AppArmor在容器虚拟化中的作用

我们还将介绍以下术语和工具:nsenter、unshare、ip、capsh、/sys/fs/cgroups、/proc/[0-9]+/ns和/proc/[0-9]+/status。

系统容器与应用程序容器

容器本质上是一系列被隔离的系统进程。它依赖于主机操作系统的一系列特性来提供这种隔离,主要是命名空间(namespaces)和控制组(cgroups)。在某些文档中,容器化也被称为操作系统级虚拟化。

  • 系统容器:运行完整操作系统的容器。
  • 应用程序容器:一个最小化的独立包,包含运行特定应用程序所需的一切,仅此而已。

内核命名空间(Kernel Namespaces)

Linux命名空间是Linux内核的一项功能,用于分区内核资源。通过命名空间,一个进程或一组进程只能看到特定的资源,而另一个进程或组进程看到的是不同的资源。根据隔离的资源类型,命名空间有多种类型,并且随着内核的发展,可能会添加更多类型。常见的命名空间包括:

  • 挂载命名空间(Mount)
  • 进程ID命名空间(Process ID,pid)
  • 网络命名空间(Network,net)
  • 进程间通信命名空间(Inter-process communication,ipc)
  • UTS命名空间(Unix time sharing)
  • 用户ID命名空间(User ID,user)
  • cgroup命名空间(cgroup namespace)
  • 时间命名空间(Time namespace)

查看系统中的命名空间

要列出当前系统中正在使用的命名空间,可以使用lsns命令。

虚拟化与容器详细内容

KVM 虚拟化技术 | cnblogs | 惨绿少年@clsn.io
nova系列二:kvm介绍 | cnblogs | linhaifeng
虚拟化与容器 | cnblogs | marility

标签:虚拟化,hypervisor,虚拟机,系统,基础知识,Virtualization,我们,模拟器
From: https://www.cnblogs.com/mugetsukun/p/18653433

相关文章

  • 前端基础知识:浏览器的进程与线程
    白话文先总结把浏览器想象成一栋楼,每家就是一个进程,家里的每个人就是线程,每个进程有一块独立的区域也就是内存,每个进程可以有多个线程同时工作可以互不干扰。1.什么是进程与线程?进程定义:进程是计算机操作系统中资源分配的最小单位。特点:每个进程有独立的内存空间......
  • 【计算机二级】计算机等级考试公共基础知识——计算机系统
    目录一、计算机的发展二、计算机硬件系统1.中央处理器2.存储器3.输入设备和输出设备4.总线三、信息的表示与存储1.存储单位2.二进制与十进制的转换3.字符编码四、操作系统1.操作系统的发展2.进程管理3.存储管理4.文件管理5.I/O设备管理特别鸣谢......
  • vue3-openlayers基础知识简介
    vue3-openlayers基础知识简介OpenLayers3Primeropenlayers6:入门基础(一)openlayers入门教程一、基础概念介绍地图(Map)OpenLayers的核心部件是Map(ol.Map)。它被呈现到对象target容器(例如,网页上的div元素)。所有地图的属性可以在构造时进行配置。ol/Map类是OpenLayers......
  • tryhackme-Cyber Security 101-Exploitation Basics(漏洞利用基础知识)-Blue(蓝)
    利用常见的错误配置问题,部署并入侵Windows机器。这个房间有个教学视频。可以根据这个视频复现。任务1:侦察按下面的 启动机器 按钮。按此页面顶部的 StartAttackBox按钮启动AttackBox。AttackBox机器将在分屏视图中启动。如果它不可见,请使用页面顶部的蓝色 Show......
  • Linux Shell 脚本编程基础知识篇—awk的条件判断(3)
    ℹ️大家好,我是练小杰,今天周五了,又是一周过去了......
  • tryhackme-Cyber Security 101-Cryptography-John the Ripper: The Basics(开膛手约翰:
    了解如何使用JohntheRipper,这是一款功能强大且适应性强的哈希破解工具。任务1:介绍JohntheRipper 是一个众所周知的、深受喜爱的、多功能的哈希破解工具。它结合了快速的破解速度和非凡的兼容哈希类型。学习先决条件为了获得最大的收益,我们建议您在前三个关于密码学......
  • 【Java 温故而知新系列】基础知识-04 重点关键字(面试经常遇到的)
    1、final 在Java中,final关键字可以用于变量、方法和类,分别赋予它们不同的语义和行为。以下是final关键字的主要作用修饰变量当final修饰一个变量时,表示该变量的值一旦初始化后就不能再被改变。这适用于基本类型和引用类型。基本类型:对于基本类型(如 int, double 等......
  • Python 基础知识点!assert 断言及其应用场景最全汇总
    在编程中,断言(Assertion)是一种检查条件是否为真的语句,如果条件不为真,则会引发异常。断言通常用于验证程序中的假设,确保代码在预期的条件下运行。在Python中,断言使用assert关键字,其语法如下:assertcondition,[error_message]condition是一个表达式,如果该表达式为False,......
  • 【Java 温故而知新系列】基础知识-03 基本类型对应之包装类
    1、包装类都有哪些?基本类型都有对应的包装类型,这些包装类提供了一种面向对象的方式来处理基本数据类型,允许它们被用于需要对象的场景,如集合框架、泛型等。对应关系:基本类型包装类型booleanBooleanbyteBytecharCharacterfloatFloatintIntegerlongLong......
  • I2C通信协议基础知识
    I2C(Inter-IntegratedCircuit)是一种串行通信协议,最初由飞利浦公司(现为NXP半导体)在1980年代初期提出,广泛用于微控制器(MCU)与外部设备之间的低速通信。I2C协议的主要特点是其简洁的硬件设计,只需要两条线就可以进行数据通信,这使得它在很多嵌入式系统中得到了广泛应用。1.I2C协议......