VMUsage

By Dicaeopolis

虚拟机和操作系统安装入门

什么是虚拟机、虚拟化

图灵机和虚拟化

图灵机是一个抽象计算模型。图灵机是计算机科学的理论基石,它的出现为现代计算机的逻辑和功能提供了数学基础。

一个标准的图灵机由以下几个基本部分组成:

  • 无限长的纸带 (Tape): 这条纸带被划分为一个个连续的单元格 (Cells),每个单元格可以存储一个符号(通常是0、1或者空白)。理论上,这条纸带是无限长的,意味着图灵机拥有无限的存储空间。
  • 读写头 (Head): 读写头可以在纸带上左右移动,并且能够读取或写入当前单元格中的符号。
  • 状态寄存器 (State Register): 图灵机在任何给定时间点都处于一个特定的内部状态 (State)。图灵机的行为取决于其当前状态。
  • 有限的指令集 (Finite Set of Instructions / Transition Function): 这是一组预设的规则,指导图灵机如何操作。每条指令的格式通常是:
    如果机器处于某个当前状态,并且读取到当前单元格的某个符号,
  • 那么机器将写入一个新的符号到当前单元格,移动读写头(向左、向右或不动),并且转换到一个新的状态。

这里手写了一个简单的图灵机,它实质上就可以实现以上提到的所有功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Program tape
size_t *instructions;
// Program Counter (PC)
size_t curr_addr;
// State register
size_t reg;
// Memory
size_t *memory;
while(1)
{
size_t curr_inst = instructions[curr_addr];
switch(curr_inst)
{
case(0x00000000):
// Halt
return 0;
case(0x00000001):
// PC increment (nop)
++curr_inst;
break;
case(0x00000002):
// PC decreament
--curr_inst;
break;
case(0x00000003):
// Load
reg = memory[0x0001];
++curr_inst;
break;
case(0x00000004):
// Save
memory[0x0001] = reg;
++curr_inst;
break;
/* A lot of instructions.*/
default:
break;
}
}

所以对于硬件的实体机,CPU 负责的内容就是从内存中加载程序,根据程序内容在硬件指令集中寻找对应指令,执行指令并更新程序计数器的值。

虚拟机所作的完全是将上面的操作软件化。也就是利用软件模拟一个CPU加载程序和执行程序的过程。这也就是我们常说的虚拟化。

具体而言,虚拟化是一种资源管理技术,它通过软件将物理计算机的各种实体资源(如CPU、内存、存储、网络等)进行抽象和转换,从而创建出一个或多个虚拟的计算环境。简单来说,虚拟化就是让一台物理机器能够模拟并运行多台独立的“虚拟机器”,每台虚拟机器都像一台独立的物理电脑一样,拥有自己的操作系统和应用程序。

常见的虚拟机平台

有两种虚拟化层级:

  • 裸金属虚拟化 (Type-1 Hypervisor):虚拟机管理程序直接安装在物理服务器的硬件之上,没有任何宿主操作系统作为中间层。它直接管理和控制物理硬件资源,并将这些资源分配给在其上运行的各个虚拟机。
    • 比如 Windows Hyper-V。开启Hyper-V之后,开机时Hyper-V先接管全部权限,使整个Windows系统运行在一个最高权限的虚拟机里面。这一技术还可以以极低开销再次创建一个具有低资源占用的Linux内核,再在该内核上运行不同容器来存放诸如Arch, Kali等发行版。这就是WSL2的原理。
    • 一般见于服务器等场景。
  • 寄居虚拟化 (Type-2 Hypervisor):虚拟机管理程序作为应用程序安装在现有的宿主操作系统之上。宿主操作系统负责管理底层的物理硬件资源,而寄居虚拟机系统则在宿主操作系统的基础上创建和运行虚拟机。
    • 常见的有 VMware, VirtualBox 等程序。

思考:为什么在WSL下使用git命令时,会提示I/O效率低?

安装VMware Workstation

这家公司被博通收购之后,虽然软件免费了,但是下载就要按着博通的规矩来,你得找到那个藏得很深的下载地址,注册一个博通账号,打开下载权限,最后才能完成下载。这太难以忍受了。

所以我们提供了下载好的版本。签名如下,你可以校验文件完整性。

1
md5sum: 20c849f6c3d845d6ff4d94fb269ad762

如果你不信任我们提供的文件(这很好),或者想要挑战自己的耐心,就去官网下载一个吧。

当你在安装的时候可能会遇到这个界面:

alt text

这是因为你之前为了启用 WSL2 而开启了 Windows Hyper-v 而这玩意和 VMware 打架导致的。不过你可以选中下面的 “自动安装WHP” 来防止它们打架。

安装完成之后,启动 VMware Workstation。

alt text

你会见到这个界面。这就意味着你安装成功了。

如何安装系统

至少我们不像数十年前的计算机先驱一样在打孔纸带和编织ROM上面字面意义地“编写”一个操作系统,而是利用安装介质

主流的操作系统都是通过类似光盘的形式安装的。这意味着你需要从操作系统的分发商处拿到编译好的操作系统安装光盘。不过现在是互联网时代,我们可以不必拿到实体的光盘,而是其内容的镜像,也就是光盘映像文件(ISO文件)。

当然,你也可以自行编写一个操作系统,或者利用已有的源代码自行编译一个操作系统。这部分内容会在操作系统课上面具体讲解。

我应该在哪里寻找我想要的系统的 ISO 文件?

  • MSDN I tell you: https://next.itellyou.cn/Original/# 收录了大部分 Windows 的 ISO 安装文件,需要使用种子/磁力下载。

  • 各大开源镜像软件站:

  • 当然,你也可以使用 Windows Media Creation Tool 创建不同的安装介质,它的好处是可以一键将ISO文件烧录到U盘成为装机盘,但是它不会缓存ISO文件,所以你需要反复等它走完下载-验证的流程,并且你无法控制下载到的 Windows 版本。

安装前的准备

我们首先需要创建一个虚拟机:
alt text
点击“创建新的虚拟机”。

alt text

为了讲明原理,我们选择自定义创建。

alt text

如果你希望把自己的虚拟机放到更低版本的 VMware 下面运行,或者有这个需求,就把兼容性版本设低一点。如果没有这个需求,一般版本越高越好。

alt text

选中间的,这样第一次打开时就会自动触发安装。 下面的路径填写你之前下好的系统映像文件。 你也可以选择“稍后安装”,然后把你的系统安装映像装进虚拟光驱里面进行手动安装。这对于 Arch 这种无法完全自动化安装的系统是必要的。

alt text

这里的位置需要谨慎填写。这是你的vmdk(虚拟磁盘)文件存放的位置,当你需要分发或者迁移时要能找得到这个目录;另一方面,你需要结合自己磁盘分区的容量来选择存储位置,免得后续担心物理机的磁盘容量不够。

alt text

这里给出的是引导固件的类型。由于电脑硬件在开机时并不知道我们安装了什么操作系统,操作系统安装在哪里,因此需要有一个程序来引导硬件找到系统的位置,这个就叫做引导固件。一般而言,更新的系统选择 UEFI,如果要和老系统兼容,则可以选择 BIOS,但是需要注意传统 BIOS 引导可能被一些新系统弃用。

两者区别如下:

alt text

alt text

建议把处理器数量设置成 1,因为部分系统不能识别多于 1 个的处理器。内核数量可随意设置,但是不要让下面的处理器 内核总数 超过你CPU的 逻辑处理器个数

alt text

宿主机的逻辑处理器个数可以在任务管理器中看到。

alt text

内存和CPU资源的设置并非越大越好。如果设置过大,会导致宿主机过分卡顿,过小则会导致虚拟机性能太低。

alt text

讲一下这几个模式:

  • 桥接:可以理解成虚拟机和宿主机在网络上是两台独立的不同设备,具有不同的IP地址,都能直接访问外部网络的。这个需要先给虚拟机分配一个IP地址。
  • NAT:虚拟机的网络请求经过宿主机代发,虚拟机不直接连接网络,而是通过宿主机间接连接。这个无需提前分配,相当于宿主机连好网,虚拟机就也能上网了。
  • 仅主机:虚拟机不连接外部网络,只和主机进行通信。
  • 不使用网络连接:给虚拟机断网。
  • 怎么选:一般NAT模式即可。

alt text

SCSI控制器用于控制虚拟磁盘,从上到下对应越来越新的控制规范。我们选择推荐的即可。最后的准虚拟化 SCSI 性能更高,但是需要虚拟机内安装 VMware Tools 等辅助软件。

alt text

这个选项页也是一样的。只要系统支持,我们都选择最新的。

alt text

我们选择创建新的虚拟磁盘。这有助于虚拟机和宿主机更好的隔离。毕竟我们配置虚拟机也是为了“零代价折腾”,不希望它破坏我们物理机上已有的数据。

alt text

这里根据你物理机磁盘分区的剩余容量谨慎选择。一般不会对虚拟磁盘进行扩容。所以请一次性多分配一点空间。如果你要制作 Win to go 或者 Linux to go,则一次性分配完。否则还是建议不要一次性分配完。

alt text

保持默认即可。

alt text

这里可以复查你进行的各项设置。

然后一路确定就可以启动我们的虚拟机开始安装系统了。

安装系统

得益于现代技术的进步,我们不必和硬件系统底层做太多斗争使其适应我们的操作系统,而是一键即可安装成功。

我们选择 Windows 10 作为安装示例的理由有二:一是它的安装足够自由,不会像最新的 Windows 11 一样,强制需要一个 MICRO$OFT 账户才能安装成功;二是它的安装足够简单,不必像 Arch Linux 一样定制许多内容。

现在我们启动。启动时会出现这个东西,忽略即可。

alt text

如果你看到了这个,说明可以开始在虚拟磁盘里面安装系统了:

alt text

一路前进,然后你会看到这个:

alt text

大家通过之前在第一讲“如何寻找资源”的方式,八仙过海各显神通吧。

alt text

建议安装专业版。

alt text

这里选择自定义。因为你是完全从0开始安装系统,没有什么需要保留的个人文件。

alt text

这是磁盘分区页面。在机械硬盘时代,通过对一块盘片进行多个分区,可以优化数据的 局部性,防止或者减少产生磁盘碎片,使得机械硬盘的读写性能更高。

但是现在大家都使用固态硬盘,本身就具有非常高的读写速率,因此没必要进行分区,还可能因为给系统盘分区分小了导致后期容量不够。

如果你在实体机上面安装/重装系统,并且CPU是Intel 11代及以后的,那么可能会出现安装系统时无法识别到原有硬盘的情况。这个是因为鸡贼的Intel使用了一个叫做Intel Volume Management Device (VMD)的技术,这个东西没什么卵用,所以为了在原有硬盘上面安装我们的系统,需要进 BIOS 把这个东西关闭,再安装好系统,最后如果发现蓝屏,就得再把这个东西打开才能好

所以我们直接下一步即可。

alt text

Windows 的安装还是相当快的。

alt text

如果你没有/不想使用自己的Microsoft账户,则选择“脱机账户”。并在下一步选择“有限的体验”。

注意:尽量选择英文用户名,因为有的应用安装在home目录下,如果路径名有特殊字符可能会报错。

alt text

酌情关闭。

alt text

一切手续完成后,它就会开始问候你了。

激活系统

你可以向 MICRO$OFT 公司购买许可证然后获取激活码并进行激活,但是我们一般不这么做,尤其是当你的微信/支付宝余额所剩无几的时候。

这里分享一个GitHub项目,至于它有什么用,就请各位尽情探索吧。

项目地址:https://massgrave.dev/

alt text

激活成功后,你可以使用所有的系统功能,比如个性化:

alt text

补充说明

驱动

操作系统并不是万能的,为了正确和硬件交互,需要硬件厂商编写软件告诉操作系统调用硬件的正确方式。这种软件叫做硬件驱动程序。

当然并非所有硬件需要驱动程序。比如USB鼠标/键盘就不需要。

我们推荐在你购买硬件的官方网站上面搜索并下载硬件驱动。

文件系统

硬盘上的数据只是二进制比特流,我们需要对它进行约定,才能有效地从其中读取数据。这一约定就是我们对硬盘进行的“格式化”。这一“格式”指的就是规定好它的文件系统。

在Windows下,最常见的文件系统是 NTFS (New Technology File System)。以及 FAT32(这个常见于刚买的U盘)。需要注意的是 FAT32 利用 32 位无符号整数存储单个文件的大小,因此其最多只支持 4GiB 大小的文件。(顺带一提,带“i”的词头是二进制计数的,也就是 1GB = 1000 MB,但是 1GiB = 1024 MiB)。使用FAT32的理由就是足够古老,所以兼容性最好。因此如果你的新硬盘或者 U 盘使用的 FAT32 文件系统或者 exFAT 文件系统,可以酌情考虑格式化为 NTFS。

想了解诸如 ZFS, Btrfs 等更先进的文件系统吗?来安装一个 Arch Linux,你就什么都会了。

LAB和思考

实操任务

  • 任务1:根据你的能力选择一个任务:

    • (简单) 下载我们提供的 VMware Workstation 安装文件,并安装该软件。
    • (中等) 从官网下载 VMware Workstation 安装文件,并安装该软件。
  • 任务2:根据你的能力选择一个任务:

    • (简单) 下载我们提供的 Windows.iso 文件,并在 VMware 中安装好系统。
    • (中等) 使用微软官方的 Media Creation Tool 获取任意版本的 Windows 系统镜像,并在 VMware 中安装好系统。
    • (中等) 在 MSDN i tell you 中获取任意版本的 Windows 系统镜像,并在 VMware 中安装好系统。
    • (困难) 在 VMware 中安装 Arch Linux。
  • 任务3:激活你刚刚下载好的系统。

  • 任务4:获取我们提供的vmdk文件,进入我们安装好的虚拟机中。(登陆密码:hakurei reimu)

思考题

  • 为什么虚拟机的I/O速率相对于CPU的运算速率,损失更大?
  • 如果要从宿主机往新安装好的虚拟机传输文件,你能想到几种可行的方法?
  • 反过来呢?
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2025 rhzhr's blog
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信