文章简介

前言

每个人都有可能在自己的设备上安装一个 Linux 发行版。不论什么原因,如果你的手头没有 U 盘,或者需要在受限环境(比如说,在 VPS 上安装不被服务商支持的发行版)中安装,那么不妨看一下这篇文章中的解决方案。

不过,也有一个方法是将系统中的其他闲置存储设备(如 CD、空硬盘或 SD 卡)“当作”U 盘刻录进 Live CD,这个本质上还是 U 盘,因此不在本文讨论范围内。

下面的方法可能需要一定的系统维护能力和知识,且很多方法极有可能损坏你本来的系统。如果你不知道你在做什么,请不要继续

PXE

  • 适用情况:在本地电脑上安装。
  • 材料:局域网(如果电脑直连校园网就别想了)、另一台设备(路由器、另一台电脑,或 Android 手机)

概述

PXE(Preboot eXecution Environment)是一套协议,定义了一个计算机该如何从网络下载和运行操作系统。通常来说 PXE 被用在网吧电脑等环境,也会用在企业批量配置(通常称为 Kickstart)新电脑上。

由于该方案需要较强的专业知识和能力,因此,在你走投无路之前,不推荐使用。

操作

下载发行版的网络启动版本,有些会直接提供 PXE 用的文件,并使用路由器或另一台电脑/手机在局域网内架设 PXE 服务器。在你要安装的计算机上使用 PXE 启动,届时它会自动从 PXE 服务器拉取系统文件并最终进入安装程序。

由于 PXE 是一个相当古老通用且广泛使用的东西,具体的操作步骤在网上有很多讲解,我就不再赘述了。

“分区当 U 盘”法

  • 适用情况:目标计算机支持 UEFI 启动,且系统上有一块 GPT 分区表的硬盘。

注意这里的 GPT(GUID 分区表)指的是 UEFI 规范定义的一个硬盘分区表格式,而不是现在常听到的生成式预训练 Transformer 网络。

概述

和以往的 BIOS/CSM 系统相比,UEFI 系统启动时的工作机制不同——它的启动机制完全基于文件系统,可以遍历整个硬盘里的所有 FAT16/FAT32 分区并在从中找到启动文件,而不局限于磁盘的前几千字节。

这为我们的方案提供了可能性:我们可以从已有的文件系统中挤出一个 FAT32 分区,并往里面存放新系统的启动文件,然后就可以直接从本地硬盘启动目标系统。

操作步骤

1. 是不是 UEFI?

首先,需要判断电脑是否支持 UEFI 启动。

  • Windows:按 Win-R,输入 msinfo,查看“系统摘要”中“BIOS 模式”的值。如果你是用 UEFI 启动的 Windows,它应该显示“UEFI”。
  • Linux:运行 ls /sys/firmware/efi,如果没有报错“找不到文件”,说明你是用 UEFI 启动的。
  • 通用:如果开机动画会显示你主板的 Logo,说明是用 UEFI 启动的。

如果上述三个方法表明你的系统不是 UEFI 启动,别急,也还有希望。请你打开 BIOS 设置,并寻找以下字眼:

  • Secure Boot(安全启动)
  • CSM(Compatibility Support Module)(兼容性支持模块)
  • Legacy
  • ...

如果找到了以上字眼,说明你的主板其实是支持 UEFI 启动的,只是你当前运行的 OS 不是 UEFI 启动的而已。

2. 是不是 GPT 硬盘?

UEFI 模式下,固件只支持读取 GPT 硬盘内的分区。因此为了让我们的方法成功,有必要确认硬盘是否是 GPT 格式。

  • 如果你的电脑是 UEFI 启动的,那么恭喜你!你的硬盘一定是 GPT 格式的。
  • 如果你的电脑不是 UEFI 启动,那么你可以打开分区软件查看。

一些网络资料可能会提到,可以从 MBR “无损”转换成 GPT 硬盘。虽然从理论上而言这是可能的,并且 Windows 确实提供执行这一操作的工具(mbr2gpt.exe),但如果你的主板不支持 UEFI,执行转换之后有可能无法启动系统。Legacy+GPT 启动方式需要硬盘中有一个单独的用于存放启动代码的分区,且 Windows Boot Manager 不支持该模式, MBR->GPT 转换工具极有可能无法处理此类情况。因此,请不要随意执行转换。

黑苹果生态中的一些引导加载程序,即 Clover 或 OpenCore,支持在老旧设备上模拟 UEFI 固件,或许可以借助它们完成下面的内容。不过这不在本文的讨论范围之内。

3. 安装 Windows

如果你要用这个方法安装的系统是 Windows 10/Windows 11,那么请跟随以下步骤:

  1. 在 GPT 硬盘里创建两个分区:一个 2GB 的 FAT32,一个 6GB 的 NTFS。
  2. 下载 Windows 安装 ISO。
  3. 把安装 ISO 中的所有文件复制进 NTFS 分区中;把安装 ISO 中除了 sources/install.wim 的文件复制进 FAT32 分区中。
  4. 重启到 BIOS 设置界面,从 FAT32 分区启动。
  5. 打开 cmd.exe,启动 diskpart.exe
  6. 在里面卸载(REMOVE 删除盘符)2GB FAT32 分区,并挂载(ASSIGN 分配盘符)6GB NTFS 分区。
  7. 退出 diskpart.exe
  8. 切换到 NTFS 分区(如,输入 E: 并回车),启动 setup.exe
  9. 按照正常流程安装。注意在 Windows 安装器中分区步骤内对分区表的更改是即时生效的,并且不要删除 6GB NTFS 分区
  10. 进入系统后可以正常删除。

4. 安装 Linux

这里以 Fedora Linux 为例。

核心原理:见Linux 启动过程叙述。通过修改内核命令行参数1,可以介入 initramfs/initrd 寻找根分区的过程并指导它的行为,来让它找到正确的、不在 U 盘上的系统资源文件。

  1. 获取 Fedora 的安装介质 .iso 文件。

附录 1. Linux 启动过程

Linux 发行版, Linux 操作系统, 发行版
以 Linux 内核为核心所构建的一整套宏内核操作系统。
Linux, Linux 内核, 内核
Linux 操作系统的核心程序。x86_64 架构的内核本体大小在 20MB 以下。
根目录
Linux 系统中最外层的目录,一切文件都放在这里。
initramfs, initrd
在系统的主要根目录加载之前的临时微型根目录,其内通常包含一系列文件系统驱动、必要硬件驱动等。它通常会在内核启动前被完全加载进内存,承担着搜索和挂载真实根目录的职责。(initramfs 和 initrd 两个名词在技术上有区别,但从职责来看是相同的)
引导加载程序
运行在 UEFI/BIOS 内的程序,由主板固件直接启动,承担启动操作系统的职责。

市面上主流的 Linux 发行版的启动步骤是这样的:

  1. 主板固件启动引导加载程序。
  2. 引导加载程序将内核和 initramfs/initrd 加载进内存。
  3. 引导加载程序启动内核。
  4. 内核加载驱动并启动 initramfs/initrd 中的初始化程序。(通常是来自 initramfs 打包系统的程序,少数情况下有可能是 systemd
  5. 初始化程序找到根分区并挂载后,switch_root(8) 到真实根分区上,并运行系统实际的 init(PID 1)命令(通常是 systemd)。
  6. init(PID 1)执行系统启动流程。
  1. 内核命令行参数:引导加载程序在启动内核时,向内核传递的字符串。它一般来说可以指定根分区位置、内核开机行为、屏蔽/强制加载某一特定的内核模块等。如果你有一个 Linux 系统,可以查看 /proc/cmdline 来看到内核命令行参数。

无 U 盘安装 Linux 的方法总结 by Enita Nureya
本文以 Creative Commons BY 4.0 协议公开发布并授权。
分享此页面