Linux 在虚拟机和裸机上的优缺点
1. 概述
在本文中,我们将了解在虚拟机和裸机上运行 Linux 之间的区别。我们将讨论这两种方法的优缺点。
最后,我们将讨论容器化作为虚拟化替代方案的主题。
2. 虚拟机上的 Linux
虚拟机是模仿实际计算机系统的硬件和软件的系统软件,可以运行不想直接在我们系统上运行的特定软件。例如,虚拟机将允许我们使用 Linux 发行版而无需将其安装在本机硬件上。 当今使用的一些流行虚拟机是Oracle VM VirtualBox 、Dell VMware 、Qemu 、Parallels Desktop 和Microsoft Hyper-V 。
2.1. 优点
虚拟机具有弹性。它允许我们运行专为旧硬件设计的操作系统。不仅如此,我们还可以在较新的硬件上运行较旧的操作系统。它在我们无法访问所需硬件的软件测试中很有用。这大大减少了我们的开支和努力。
除此之外,虚拟机使我们能够同时运行多个 Linux 发行版,从而减少安装和维护开销。因此,如果我们重视效率和减少停机时间,虚拟环境可以证明是一个非常可靠的选择。
2.2. 缺点
一些虚拟机可能缺少一些功能。例如,VirtualBox 不支持开箱即用的 USB 3.0。因此,我们可能需要为某些功能安装额外的扩展。除此之外,我们还会遇到有关屏幕尺寸、颜色深度、不正确的日期/时间和硬件加速的问题。
对于较旧的 AMD 和 Intel CPU,运行虚拟机可能是个问题,因为虚拟机依赖于 称为硬件虚拟化的技术。当然,一些虚拟机仍然会运行软件虚拟化,但用户体验会受到影响。尽管如此,几乎所有现代 CPU 都支持硬件虚拟化,例如Intel-VT 和AMD-V 。
还需要注意的一件事是,由于大多数无线设备不支持桥接,因此可能无法在来宾操作系统上设置无线网络。但是,有一些扩展和解决方法可以使无线接口正常工作。
由于额外的间接层,在虚拟机中运行 Linux 操作系统可能会非常慢。虽然固态硬盘肯定有帮助,但它仍然不如在裸机上运行那么流畅。因此,虚拟机不是运行视频游戏和密集磁盘 I/O 操作的理想平台。
在虚拟机中运行的操作系统依赖于主机操作系统。因此,如果主机操作系统出现问题,那么它也会影响来宾操作系统。大多数情况下,影响客户操作系统的问题都与硬件有关。例如,机器可能会耗尽内存并导致未定义的行为。
3. 本地硬件上的 Linux
3.1. 硬件支持
裸机上的 Linux 具有支持更多硬件的优势。它支持开箱即用的大多数现代硬件,无需安装第三方驱动程序。不仅如此,我们还可以降级内核和固件以支持遗留系统。因此,我们可以很方便地使用某些虚拟机无法虚拟化的PCI设备。
此外,VMWare 和 Virtualbox 等虚拟机将虚拟卷的创建限制为最大 2 TB 的容量,而本机硬件则没有限制。
3.2. Linux 服务器
如果我们要创建一个 Linux 服务器,我们会将其安装在裸机上,因为它允许更多的自由、安全性和稳定性。Linux 作为虚拟机上的服务器是完全可行的,但是在处理 I/O 密集型请求时会有巨大的性能损失。
3.3. 软件开发
由于灵活的环境和数以千计的开源软件包的可用性,使用 Linux 作为我们的主要开发平台可能会非常有益。我们可以通过脚本和开源插件根据自己的喜好配置环境。
另一方面,如果我们要为基于 Linux 的系统开发系统软件,我们需要在运行于真实硬件上的 Linux 上对其进行测试。例如,开发视频游戏并在虚拟机中运行的 Linux 上对其进行测试与在裸机上本机运行的 Linux 上的表现不同。
4.容器化
有时,我们可能需要在一台机器上运行多个服务器,我们需要为每个服务器提供一个整洁的环境。环境包括基本实用程序、依赖项、库、可执行文件和环境变量。因此,运行多台服务器可能会在环境中产生冲突,例如一台服务器依赖于比已安装的库更新的库。因此,维护变得既昂贵又费时。
正如我们之前看到的,一个虚拟机中的一个 Linux 服务器并不是一个最优的解决方案,更不用说多个虚拟机中的多个 Linux 服务器了。为了克服这个问题,我们可以通过容器来进行操作系统级别的虚拟化。
容器是一个用户空间,其中服务器或应用程序及其环境与所需的依赖项一起驻留。打包应用程序的过程称为容器化。简而言之,容器提供了多个隔离的用户空间,而虚拟机则提供了完整的操作系统。一些提供容器化的流行平台包括Docker 、Azure Container Registry 和Podman 。
我们可以在一台 Linux 机器上运行多个容器,而无需在服务器上安装多个虚拟机。因此,对于面向服务的软件,比如微服务,使用容器是一种有效的解决方案。
5. 什么时候使用什么?
正如我们所见,每种方法都有不同的用例。让我们简要介绍一下最常见的用例,其中每种方法最有意义。
5.1. 本地硬件上的 Linux
- 主要桌面操作系统
- 服务器部署
- 软件开发与测试
- 游戏和媒体编码
- 嵌入式系统
- 关键任务系统
5.2. 虚拟机中的 Linux
- 用于测试 Linux 发行版
- 使用一些特定于基于 Linux 的发行版(例如 Android)的软件应用程序
- 使用较旧的操作系统
5.3. 容器
- 微服务
- DevOps 支持持续集成和部署