我尝试制作一个便携式 USB(我可以将 Ubuntu 安装到我的 32 GB USB 笔式驱动器吗?) 并按照这些步骤操作,但我认为在选择引导加载程序的位置时出现了问题,因为即使我选择了我的 32GB USB 驱动器,它也将引导加载程序安装到了我的硬盘驱动器上,而我无法在另一台电脑上启动 USB。
有没有办法来解决这个问题?
答案1
我按照以下步骤重新安装https://www.dionysopoulos.me/253-portable-ubuntu-on-usb-hdd.html并且成功了...不过还是要谢谢你
你需要什么
- 一个空的外部 (USB) 硬盘。我使用了一个 USB 3 驱动器外壳和一个便宜的 256Gb SSD。对于那些担心性能的人来说,USB 3.0 端口比我迄今为止见过的任何 SSD 的最大传输速率都快。
- Ubuntu Linux 可启动 USB 驱动器。使用 Windows 上的 Rufus 创建非常容易。我使用了便宜的促销闪存驱动器。减少、重复使用、回收 FTW。
- Windows 系统修复光盘(可启动的 USB 驱动器,带有 Windows 恢复工具,您可以自己制作)或 Windows 安装或救援 CD-ROM / DVD-ROM。我使用了另一个促销闪存驱动器。
继续操作之前,请记住备份所有重要文件和文件夹。您将对计算机进行更改。如果它坏了,不要哭,我警告过您。还要测试您的两个可启动媒体。两次。您将需要它们!
注意事项
拥有双启动或多启动系统并不像十年前那么简单。如今,出于安全、性能和向后兼容性的考虑,有许多半隐藏的选项和功能可能会妨碍您。只要有足够的经验和耐心,您就可以解决这些问题。下面是一些让我在安装过程中遇到的问题。
安全启动警告
我只在关闭安全启动的情况下测试了这些说明。尽管 Ubuntu 确实支持安全启动(它附带签名的引导加载程序),但我不知道我的方法是否使用签名的引导加载程序。我建议尽可能关闭安全启动。
FastBoot 注意事项
许多主板都带有某种“快速启动”或“启动优化”选项。例如,我的 Intel NUC 有一个名为“快速启动”的选项,它不允许我在启动时选择备用启动设备。它还有一个支持 Intel 快速启动技术的选项,但这确实妨碍了启动多个操作系统。我不得不禁用这两个选项。
值得注意的是,Windows 8 和 Windows 10 具有快速启动或快速引导功能。此功能在启动时会走一些捷径,还会使 NTFS 文件系统保持脏状态,使其无法从 Linux 写入。如果您计划从 Linux 写入 Windows 驱动器,最好了解它的作用并禁用它。
USB 主控制器警告
某些固件会在启动时将 USB 主机控制器显示为 UHCI (USB 1.1)。当 Linux 在启动过程中探测 xHCI (USB 3) 主机控制器时,它们会做出积极响应。此时 Linux 会加载 xHCI 驱动程序,USB 主机控制器会自行重置。
但是,您的根文件系统位于连接到此 USB 控制器的设备内。因此,控制器重置意味着 Linux 无法再与连接到 USB 的硬盘驱动器通信。因此,Linux 启动将永远挂起,而不会出现任何有关哪里出错的进一步迹象。
大多数受影响的主板(包括我的 Intel NUC)都有一个默认启用 xHCI 主机控制器接口的选项。在 BIOS 中启用 xHCI 选项可解决启动挂起问题。如果您仅使用支持 USB 3 的现代操作系统(任何比 Windows 8.1 和 Ubuntu Linux 15.04 更新的操作系统),则可以安全地启用该选项。
安装 Linux
从 Ubuntu Linux 可启动 USB 驱动器启动您的计算机。请记住,您可能需要进入计算机的启动管理器才能执行此操作(在我的 Intel NUC 上,我必须按 F10;在我见过的大多数其他 BIOS 上,它是 F9;请查阅您的 BIOS 文档)。
定期安装 Ubuntu Linux。当系统提示您有关磁盘布局时,请选择 Something Else,然后按您想要的方式对外部硬盘进行分区。我选择创建一个大小适中的根分区(大约 40Gb),一个交换分区,该分区的大小与我将在此安装中使用的最大 RAM 配置一样大,再加上 1 Gb(我的计算机最大为 16Gb,因此我创建了一个 17Gb 交换分区),其余磁盘则进入一个巨大的 /home 分区。
警告:我选择使用 btrfs — — 正如我一路走来所了解到的 — — 这使得事情变得有点复杂。为了您的理智起见,我建议使用 ext4。本指南假设使用 btrfs,并将指出这种方法的注意事项。
修复 Windows 10 启动问题
不幸的是,Ubuntu 安装程序假定您想要在 Windows 之外使用双启动配置。因此,它会将自身(实际上是它使用的引导加载程序 GRUB2)添加到您计算机的 UEFI 配置中。这会导致两个问题。首先,外部硬盘不可移植,因为您无法在另一台计算机上使用它进行启动。
其次,如果你移除这个外部硬盘,你的 Windows 将无法启动。真糟糕。我们必须解决这个问题。
- 关闭计算机。
- 断开 Ubuntu HDD
- 从 Windows 系统修复光盘 USB 驱动器(或 Windows 安装或救援 CD-ROM/DVD-ROM)启动。
- 选择修复你的计算机。
- 选择操作系统并单击下一个。
- 选择命令提示符。
在命令提示符中运行
diskpart sel disk 0 list vol
验证 EFI 分区是否使用 FAT32 文件系统。它将有一个卷 ID,比如说 99。现在我们需要为其分配一个驱动器号。返回命令提示符输入:
sel vol 99 assign letter=z: exit
现在我们需要修复引导记录。再次在命令提示符中输入:
z: cd EFI/Microsoft/Boot bootrec /FixBoot
最后,我们需要重新创建 BCD 存储,它告诉 Microsoft 引导加载程序在哪里找到 Windows,以便可以启动它。从我们信任的命令提示符:
ren BCD BCD.old bcdboot c:\Windows /l en-us /s z: All
如果这不起作用请尝试:
ren BCD BCD.old bootrec /RebuildBcd
此时退出命令提示符并关闭计算机。
在 Ubuntu HDD 上创建 ESP
除非硬盘有 ESP(EFI 系统分区),否则硬盘无法通过 UEFI 启动。ESP 只是一个 FAT32 分区,带有一个特殊标志,可告诉 EFI BIOS 在其中查找启动信息。我们必须在您的硬盘上创建一个。
- 插入您的外部硬盘和 Ubuntu Linux 可启动 USB 棒。
- 使用安装前尝试 Ubuntu 的选项,通过 Ubuntu Linux 可启动 USB 棒进行启动。
- 打开终端( Ctrl++ Alt)T
- 运行
sudo fdisk -l
以获取分区列表。- 从中识别出具有 Linux 分区的驱动器,就我而言。从现在开始
/dev/sdb
我将调用它。/dev/sd<b>X</b>
- 还要确定包含根文件系统的分区。从现在起,我将把它称为 /dev/sdXY。
从终端启动 GParted:
sudo gparted /dev/sdX
为什么不直接点击桌面上的 GParted?好吧,我一直收到有关 Ubuntu Linux 可启动 USB 棒的错误,因为它已被使用。当然,我正在使用它来运行计算机,呵呵!
调整磁盘上第一个分区的大小,使其后有另外 200 Mb 的可用空间。
- 在可用空间上创建一个新的分区,并将文件系统更改为 fat32。
- 应用操作。您需要立即执行此操作,以便进行下一步。
- 右键单击新分区。
- 单击“管理标志”。
- 设置 boot 和 esp 标志。这使得该分区对于 EFI BIOS 来说“特殊”。
- 还有一件事!记下包含 ESP 文件系统的分区。我将其命名为 /dev/sd西泽今后。
确保外部硬盘上的 Ubuntu 安装可以看到 ESP
外部驱动器上的新 ESP 必须对 HDD 中的 Ubuntu 安装可见。否则 Linux 引导加载程序 GRUB2 将无法自行更新,最迟在下一次内核更新后会导致您的系统无法启动。
正如我们上面看到的,从终端启动 GParted:
sudo gparted /dev/sdX
双击外部硬盘上包含 Linux 根 (/) 文件系统的分区
- 记下 UUID,例如
01234567-89ab-cdef-0123-4567890abcde
- 双击新的 FAT32 分区并记下 UUID,例如
0123-ABCD
- 关闭 GParted
- 打开终端
根据外部硬盘上根分区的格式,该过程会有所不同。
如果你没有使用 btrfs(例如你使用了 ext4)
sudo umount /media/ubuntu/01234567-89ab-cdef-0123-4567890abcde sudo mount /dev/sdXY /mnt
如果你确实使用了 btrfs
如果您确实使用了 btrfs,那么您的生活就会变得复杂。我们需要挂载包含根分区的 btrfs 子卷,而不是整个分区。否则,您将永远无法安装 GRUB,并且可能会像我一样浪费一整天的时间。
btrfs subvolume list /media/ubuntu/01234567-89ab-cdef-0123-4567890abcde
这将为您提供一个带有数字 ID 的行。假设为 123。记下来。
umount /media/ubuntu/01234567-89ab-cdef-0123-4567890abcde mount /dev/sdXY -o subvolid=123 /mnt
其余指令都是通用的,无论使用 btrfs、ext4 还是其他
sudo nano /mnt/etc/fstab
/boot/efi
此文件中已有一行。#
在其前面添加 以对其进行注释。添加以下行:
UUID=0123-ABCD /boot/efi vfat defaults 0 1
在外部驱动器的 EFI 系统分区上安装 GRUB2
现在我们的外部驱动器有一个空的 ESP。我们需要在其中放入引导加载程序,使其真正可启动。
第一个警告:您在网上找到的所有说明都假设您使用的是 Windows 或 macOS 的双启动系统。当您有外部驱动器时,使用
--removable
最后一步中的选项至关重要。这会将 EFI 引导加载程序安装在 ESP 中的特殊“后备路径”EFI\Boot\bootx64.efi 下。通常,这不应该用于永久安装的操作系统。这是 EFI BIOS 用于引导任意外部媒体的机制。从技术上讲,这正是我们的外部硬盘驱动器:任意外部媒体!第二个警告:安装引导加载程序只能从我们要启动的 Linux 安装内部进行。但是,我们需要引导加载程序来启动该安装,这会导致 Catch-22 问题。解决方案是通过 chroot jail 运行引导加载程序安装。让我困惑了一天的实际警告来自我正在使用 btrfs(因为它对 SSD 更好!)。btrfs 有子卷。如果您安装整个分区而不是子卷,grub-install 脚本将无法确定路径和设备之间的映射,因此无法在 ESP 上安装自身,并返回神秘错误:
/usr/sbin/grub-probe: error: cannot find a device for / (is /dev mounted?).
如果您按照下面的说明操作,则错误是误导性的!
/dev
已安装。据我所知,实际问题是安装的设备和 chroot 根的路径之间存在差异。这就是为什么我让您在上面的步骤中仅安装包含根文件系统的子卷。如果您没有注意,没有逐步遵循说明,您在此步骤之前重新启动,或者只是直接来这里寻找有关 GRUB 未安装问题的解决方案,请查看上面的说明以了解如何安装正确的 btrfs 子卷。
我们需要准备 chroot 环境。ESP 必须安装在正确的位置,并且我们必须为一些特殊树(最明显的是 /dev)绑定系统挂载点。此外,我们将复制 resolv.conf 文件,以便 chroot 环境在需要时具有网络访问权限。
mount /dev/sdXZ /mnt/boot/efi for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt/$i; done cp /etc/resolv.conf /mnt/etc/ modprobe efivars
最后我们进入 chroot 环境并以适合可移动设备的方式安装 Grub(参见上面的第一个警告)。
sudo chroot /mnt grub-install -d /usr/lib/grub/x86_64-efi --efi-directory=/boot/efi/ --removable /dev/sdX
现在您的外部硬盘可以启动了。重新启动计算机,从 UEFI BIOS 的启动媒体选择中选择它,您就大功告成了!