跳过正文

Archlinux的杂技启动方法

·2007 字·
目录

手里头有块500G的便携式SSD,之前制作过Ubuntu to Go,体验还行,但更换Manjaro后却发现貌似不能从其他电脑上直接启动。后来,笔者还是感觉WSL2比较香,于是就把这块移动硬盘解放了出来。但最近心血来潮,觉得只要拿块硬盘就可以直接启动熟悉的系统,实在是有诱惑,于是决定将该移动硬盘再次启用,并装上Archlinux体验一波。 本文将介绍笔者的踩坑经历及解决方案。 本文的结果:

  • Secure Boot 共存(主板限定)
  • 网络引导安装
  • 移动硬盘引导Archlinux

1. Hyper-V 的努力并非全部白费
#

由于手头没有u盘,笔者最先想到使用虚拟机替身进行安装,以避免已安装的Windows系统的硬盘的干扰,造成启动引导方面的问题。笔者的Ubuntu to go亦采用该方法制作。其主要流程为:

  1. 将待用硬盘脱机(Hyper-V强制,VMware不需要)
  2. 虚拟机中选择该物理硬盘
  3. 使用安装镜像,完成安装流程
  4. 物理重启电脑,并在BIOS中选择该硬盘引导项

笔者先前主要是用VMware,但想到还有微软自家的Hyper-V,便决定一试。 使用Hyper-V制作Archlinux系统盘并不顺利。笔者将简要介绍流程。

  1. Windows 11家庭版需要手动安装Hyper-V,幸运的是网络上有很多教程,直接运行其提供的脚本即可。
  2. 在安装完成后,重启一次电脑,随后搜索Hyper-V,进入Hyper-V管理器。
  3. 简单创建一个虚拟机后,在设置中将虚拟硬盘改为物理硬盘。注意:该物理硬盘必须处于脱机状态。可以直接使用Windows自带的DISKPART工具进行操作:
    • DISKPART 在Windows终端中输入该指令,进入工具
    • LIST DISK 显示当前所有硬盘
    • SELECT DISK 硬盘序号 根据上一步显示的,选择需要操作的硬盘
    • OFFLINE DISK 对选择的硬盘进行脱机操作
  4. 根据网上的教程安装Archlinux。笔者参考的是 https://arch.icekylin.online/guide 。在安装引导程序,完成安装后,重启虚拟机,可以进入系统。随后笔者将物理机重启,但在主板BIOS的引导选项中并无该硬盘。
    • 初步调查后发现,可能是因为主板的UEFI固件未识别到引导文件。解决方法也很简单,只需要在运行grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH 这条指令时,后面加上--removable即可。即
    grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH --removable
    
  5. 然而,此时虽能成功引导,但无法挂载硬盘,直接卡死在了第一步,虽然自动进入了紧急模式,但不知道为何键盘按了也没反应,无法进行进一步操作。笔者尝试过不使用uuid的方式定位硬盘,而是直接使用sda1这种形式,但是依然没用。

2. 我的U盘很少
#

恰巧,我爸搞来来一个来历不明的U盘。这个U盘虽然标称64GB,但谁也不清楚是不是虚标。由于Hyper-V制作失败,笔者将安装镜像刻录进U盘,并尝试直接使用U盘的Live系统对移动硬盘上的系统进行调试。 然而,U盘引导出现了上一模一样的问题,无法挂载硬盘。此时笔者怀疑可能是主板问题,也可能这个U盘本身是坏的。

3. 天降之NetBoot
#

在搜索解决方案的过程中,笔者偶然想到了还有网络引导的方式。然而,这种方法需要在局域网搭建一个PXE服务器,笔者尝试过,但太菜了,对这方面没啥了解,看教程都看不懂。好在天无绝人之路,笔者又想到曾在哪个论坛上看到过还有Boot from FAT32的方式。FAT32格式的U盘可以直接引导启动,于是笔者直接将该U盘格式化为FAT32,并创建文件夹 /EFI/BOOT 。随后,在 https://archlinux.org/releng/netboot 中下载ipxe-arch.efi 文件,并改名为BOOTX64.EFI,放入之前创建过的文件夹中。最终路径为 /EFI/BOOT/BOOTX64.EFI。这里如果不改名,笔者的主板将无法成功引导,但或许并不是所有主板都是如此。这个EFI文件很小,相信这个U盘再怎么虚标,存一个1M的文件应该也不成问题。同时,笔者的主机正插着网线,因此不必担心网络问题。

  • 此时,笔者怀疑也可能是因为开着Secure Boot的问题,导致无法挂载硬盘。网上搜索资料后确实发现Archlinux不支持Secure Boot(但是不是这个原因造成的不好说)。然而,直接将Secure Boot关闭并不符合笔者的美学。笔者使用的主板为技嘉B650M,在探索了一番后,发现该主板可以在Secure Boot相关设置中自定义信任引导程序的签名,于是二话不说,直接添加上了上述网络启动用到的EFI文件和移动硬盘中Archlinux系统的EFI文件签名。

在BIOS中选择该U盘引导后,成功进入Archlinux安装环境。在Archlinux安装环境中,笔者重新进行了pacstrap,以及安装grub步骤。重启后成功通过移动硬盘进入Archlinux系统。

4. 我独自启动
#

到目前为止只是成功将Archlinux安装进了移动硬盘,并不确定能不能直接在不同的计算机上直接启动。特别是笔者是AMD CPU,所以安装阶段安装了AMD的微码,在INTEL的CPU上可能会出现问题。不过,Ubuntu不用担心这个问题,笔者之前带着装了Ubuntu的硬盘在学校机房里直接借尸还魂,笔记本都不用带,甚是方便😁。