如何在可启动 EFI 和传统模式的 USB 记忆棒上安装 Linux 发行版(最好是 Ubuntu)?

如何在可启动 EFI 和传统模式的 USB 记忆棒上安装 Linux 发行版(最好是 Ubuntu)?

我正在尝试实现一些具有挑战性的事情。我有一个相当快且容量大的 USB 棒(SanDisk Ultra USB 3.0 16GB),我想以一种非常规的方式使用它:

  1. 我需要一个大小约为 1 GB 的分区,Windows 和 Linux 都可以读取该分区(您可能知道,以前版本的 Windows 与多分区 USB 驱动器配合得不是很好。或者我应该说,根本不能?它们只读取第一个分区而忽略其余部分)
  2. 我需要在设备上安装 Linux 发行版(最好是 Ubuntu)
  3. 我需要这根棒子能够在启用 EFI 的机器和传统的机器上启动。

将 Ubuntu 安装到磁盘非常简单,而且该驱动器的速度比我预期的要快。但我无法从非 UEFI 机器启动该驱动器。机器根本无法读取该驱动器,并且一直停留在全黑屏幕上。

所以,我的问题是:

  • 我所尝试实现的目标有可能实现吗?

  • 如果是的话,我需要特殊的分区方案吗?我可以进行全新安装。

  • 我可以在 UEFI 和传统模式下安装 grub 吗?如果可以,该怎么做?

答案1

我所尝试实现的目标有可能实现吗?

是的!

如果是的话,我需要特殊的分区方案吗?我可以进行全新安装。

您将需要一个特殊的分区方案。您可以修改现有的方案以适应(您只需添加一个很小的 ​​1MiB BIOS 启动分区),但我将在下面概述必要的分区方案。

我可以在 UEFI 和传统模式下安装 grub 吗?如果可以,该怎么做?

您只需为每种模式安装 GRUB。以下是针对 Ubuntu 和 Debian 的说明。


设置

以下是在 UEFI 和传统启动模式下安装 Ubuntu 的从头说明。这些说明适用于任何磁盘,而不仅仅是 USB 磁盘。

本指南假设你想从头开始您的磁盘为/dev/sdX。请将其替换/dev/sdX为您的磁盘块设备。

  1. 删除所有分区以获得干净的状态:

    sgdisk --zap-all /dev/sdX
    
  2. 在您的磁盘上创建 GPT 分区表:

    sgdisk --mbrtogpt /dev/sdX
    
  3. 您需要在闪存驱动器的开头创建一个 1GB 的分区,因此下面是创建 1GiB 分区的命令(注意:吉布而不是 GB):

    sgdisk --new 3::+1G --typecode 3:0700 /dev/sdX
    
  4. 创建 BIOS 启动分区。这对于在传统启动中添加 EFI 支持是必要的。

    sgdisk --new 1::+1M --typecode 1:ef02 /dev/sdX
    
  5. 创建 EFI 系统分区:

    sgdisk --new 2::+50M --typecode 2:ef00 /dev/sdX
    
  6. 创建将安装 Ubuntu 的数据分区:

    sgdisk --new 4::+ --typecode 4:8300 /dev/sdX
    
  7. 使用上面已设置的分区方案在闪存驱动器上安装 Ubuntu。

    如果您不想使用图形化 Ubuntu 安装程序,才可以继续下一步。

    如果您确实想使用图形化 Ubuntu 安装程序,请立即使用已创建的分区方案,然后返回此处并运行以下命令:

    mount /dev/sdX4 /mnt
    mount --rbind /dev  /mnt/dev
    mount --rbind /proc /mnt/proc
    mount --rbind /sys  /mnt/sys
    chroot /mnt /bin/bash --login
    

    由于您使用了图形安装程序,请跳至步骤 17。

  8. /dev/sdX4在我们刚刚创建的数据分区上为 Ubuntu 创建文件系统:

    mkfs.ext4 /dev/sdX4
    
  9. 将新的文件系统挂载到临时路径:

    mount /dev/sdX4 /mnt
    
  10. 安装基本的 Ubuntu(替换bionic为您要安装的 Ubuntu 版本的代号):

    debootstrap bionic /mnt
    
  11. 设置新安装的 Ubuntu 的主机名(替换HOSTNAME为您想要的主机名):

    echo HOSTNAME > /mnt/etc/hostname
    
  12. 配置包源,写入以下内容/mnt/etc/apt/sources.list(替换bionic为您安装的 Ubuntu 版本的代号):

    deb http://archive.ubuntu.com/ubuntu bionic main universe
    deb-src http://archive.ubuntu.com/ubuntu bionic main universe
    
    deb http://security.ubuntu.com/ubuntu bionic-security main universe
    deb-src http://security.ubuntu.com/ubuntu bionic-security main universe
    
    deb http://archive.ubuntu.com/ubuntu bionic-updates main universe
    deb-src http://archive.ubuntu.com/ubuntu bionic-updates main universe
    
  13. 准备登录新的Ubuntu系统:

    mount --rbind /dev  /mnt/dev
    mount --rbind /proc /mnt/proc
    mount --rbind /sys  /mnt/sys
    
  14. 登录到您的新 Ubuntu 系统:

    chroot /mnt /bin/bash --login
    
  15. 配置区域设置(根据需要修改):

    locale-gen en_US.UTF-8
    echo LANG=en_US.UTF-8 > /etc/default/locale
    
  16. 安装 Ubuntu 桌面的其余部分(ubuntu-desktop如果您不想要 Ubuntu 桌面,请用您想要的版本替换):

    dpkg-reconfigure tzdata
    ln -s /proc/self/mounts /etc/mtab
    apt update
    apt install -y ubuntu-desktop
    
  17. 安装 GRUB 以进行传统启动:

    apt install -y grub-pc
    
  18. 设置 EFI 文件系统并安装 GRUB 以实现 EFI 启动:

    apt install -y dosfstools
    mkdosfs -F 32 -n EFI /dev/sdX2
    mkdir /boot/efi
    echo PARTUUID=$(blkid -s PARTUUID -o value /dev/sdX2) /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1 >> /etc/fstab
    mount /boot/efi
    apt install -y grub-efi-amd64
    
  19. 配置 GRUB 以进行传统启动:

    grub-install --target=i386-pc /dev/sdX
    
  20. 配置 GRUB 以进行 EFI 启动:

    grub-install --target=x86_64-efi /dev/sdX
    
  21. 更新 initrd 文件:

    update-initramfs -ckall
    
  22. 更新 GRUB 启动配置:

    update-grub
    
  23. 通过退出 chroot 并卸载进行清理:

    exit
    umount -R /mnt
    

现在,您应该已经在磁盘上安装了 Ubuntu,并且能够以 EFI 模式或传统模式启动。

/dev/sdX3是您请求的数据分区。您可以根据需要使用与 Windows 兼容的文件系统对其进行格式化。


致谢

我从两个不同的来源整理出了本指南:

相关内容