我目前有一台笔记本电脑,上面装有 2TB 内置硬盘和 Windows 10。出于编码原因,如果需要,我想从 USB 驱动器运行 Ubuntu,但仍保留我的 Windows 硬盘,不以任何方式对其进行修改。我已经制作了一个带有 ISO Ubuntu 17.04 映像的 USB 记忆棒,但关闭 PC 后,我在上面执行的任何操作都不会保留;因此,我怀疑我需要将其完全安装到存储设备上,但我不想冒意外擦除内置硬盘的风险……我该怎么做?
任何帮助都值得赞赏;提前致谢。
答案1
使用另一个 USB 安装介质将 UEFI 完整安装到 USB。
表面上与在目标 USB 上添加 EFI 分区的传统安装相同,但存在一些问题,可能会导致目标甚至主机无法启动。
首先确定您是否希望在目标 USB 上进行 MSDOS 或 GPT 分区。如果某些(较旧的)机器无法使用 GPT USB 启动,您可能需要 MSDOS 分区。GPT 可能是这里的默认设置。无论哪种情况,您的第一个分区将是 300M EFI 分区。它将具有 FAT32 文件系统和启动标志。
接下来,决定是否希望目标 USB 同时使用 UEFI 和传统 MBR 引导加载程序进行引导。这取决于您想如何使用 USB。这需要多做一些工作,但确实可以提高可移植性。如果您使用的是 GPT 分区,则需要包含一个没有文件系统的 1M 分区,并带有 grub-bios 标志。您现在可以添加 1M 分区,并在以后的项目中将传统 grub-pc 引导加载程序添加到您的 UEFI 棒。
在 UEFI 设置(以前称为 BIOS)中选择允许您的安装 USB 以 UEFI 模式启动的设置。安装介质可以在两种模式下启动,因此要创建 UEFI 目标,它需要在 UEFI 模式下启动。
USB 目标的其余部分可能是您的根 (/) 文件系统。不要使用交换,它会慢得令人难以忍受,如果使用,会导致更快的磨损。对于文件系统,请避免使用日志,这也可能导致过度磨损 - ext2 或不带日志的 ext4。您可能需要在运行安装程序之前设置“不带日志的 ext4”,这可能不是一个选择。
启动安装介质,如果您设置了分区,请选择“其他”选项,然后确定根 (/) 和 EFI 系统分区 (ESP)。您想要作为目标 USB 的引导加载程序位置(例如 /dev/sdc),但无论您输入什么,都将被忽略。运行安装,然后开始处理问题。
问题 1) 您为目标输入的引导加载程序位置被忽略,引导加载程序被复制到 sda 的 ESP。
错误 1173457
修复:将 sda EFI 分区中的所有内容复制到目标的 EFI 分区。这些只是文件,您可以以任何您喜欢的方式复制它们,保留目录结构。
2) 错误复制到 sda 的其中一个引导加载程序文件 grub.cfg 引用了目标 USB。此文件会覆盖主机 EFI 分区中的 grub.cfg,因此如果没有目标 USB,主机将无法启动。Bug
113457
修复:安装前,将主机的 /boot/efi/EFI/ubuntu/grub.cfg 备份到 .../grub.cfg.good,以便在被覆盖后轻松恢复。
3) 假设您将主机 ESP 中的所有文件复制到目标 ESP,引导加载程序仍然位于可移动媒体的错误位置。
错误 1173457
修复:可移动媒体从 /EFI/Boot/bootx64.efi 启动,因此将 grubx64.efi 和 shimx64.efi(如果存在)从 /EFI/ubuntu 复制到 /EFI/Boot,然后将 shimx64.efi(如果存在)重命名为 bootx64.efi。如果 shimx64.efi 不存在,则将 grubx64.efi 重命名为 bootx64.efi。
4)如果您的主机在启用安全启动的情况下运行,则您的 nvram 启动项为 shimx64.efi。安装到 USB 可能已将其更改为 grubx64.efi。Bug
1229488
修复:使用 efibootmgr 恢复 nvram 项。在这种情况下(第一个启动项启动失败),某些机器可能会在尝试启动顺序中的第二项之前尝试回退到可移动媒体引导加载程序 /EFI/Boot/bootx64.efi。出于这个原因,我建议像设置 USB 目标一样设置主机的 /EFI/Boot,并使用 bootx64.efi,它是 shimx64.efi 或 grubx64.efi 的副本。
还有一个简单的替代方案,以传统模式安装到 USB 目标,稍后再添加 UEFI 引导加载程序。使用 MSDOS 分区,有一个 300M FAT32 EFI 分区和一个根 (/) 分区。选择 UEFI 设置以传统模式启动安装媒体。在安装程序中选择“其他”,然后在目标上选择您的根。这是一个正常的传统安装,不会造成任何问题。
安装完成后,将主机 ESP 中的所有内容复制到目标 ESP。这将带来 Windows 引导加载程序和 /EFI/Boot 目录。
使用以下命令查找目标 USB 的 UUID:
sudo blkid
在 EFI 分区上创建一个目录 /EFI/ubuntu
在 EFI/ubuntu 目录中,使用根分区的 UUID、磁盘和分区创建一个名为 grub.cfg 的文件:
search.fs_uuid YourUUID root hd1,gpt2
set prefix=($root)/boot/grub
configfile $prefix/grub.cfg
将 shimx64.efi 和 grubx64.efi 的副本放入 /EFI/Boot,并将 shimx64.efi 重命名为 bootx64.efi。这些文件可以在安装介质的 /EFI/BOOT 下找到,重命名已完成。
目标现在应该能够在 UEFI 模式下启动!或者,您可以在目标上创建 ESP 挂载点 /boot/efi,并在目标的 /etc/fstab 上添加一行以将 EFI 分区挂载在那里。如果您安装了 grub-efi 包,您可能需要这样做,这可能会偶尔更新引导加载程序,但如果它们有效,那么这样做的唯一原因是安全更新。
传统安装和 UEFI 安装之间实际上没有太大区别,只是引导加载程序不同。