无法使用 refind 从 iMac 上的外部驱动器上的 LUKS/LVM 组启动 Ubuntu

无法使用 refind 从 iMac 上的外部驱动器上的 LUKS/LVM 组启动 Ubuntu

我有一台 2017 iMac,正在尝试在外部 USB3 驱动器上安装 Ubuntu。外部驱动器有一个 GPT 分区表(没有混合 MBR),分区方式如下:

/dev/sda1: EFI partition
/dev/sda2: Windows-To-Go partition
/dev/sda3: ext4 Linux boot partition
/dev/sda4: LUKS / LVM partition
/dev/sda5: extra partition, not currently being used

LUKS 分区解密后可用的 LVM 组包含一个 ext4 分区(用作我的 Linux 系统的主分区)和一个交换分区。

我在我的 Mac 上使用 refind 来方便启动这些不同的操作系统。

当我安装 Ubuntu 时,我确保我的所有分区都已解密并安装,我在安装程序中选择了手动磁盘设置(因为我不想它烧掉我的整个外部磁盘,包括 Windows 安装)并手动指定以下内容:

  1. /boot作为挂载点/dev/sda3
  2. /作为我的 LVM 组中主 ext4 分区的挂载点
  3. grub 应该安装到/dev/sda3

安装程序顺利完成。但是,当我重新启动时,我有两个启动此 Ubuntu 安装的选项,但都不起作用。

我可以从安装在内置硬盘 EFI 分区中的 grub 引导加载程序启动。请注意,我不是希望 Linux 或任何其他操作系统将其引导加载程序添加到此驱动器。我只希望它仍然是一个普通的 macOS 驱动器,并添加 refind。尽管如此,如果我使用 refind 从它启动,它会显示 Ubuntu 徽标,然后让我进入提示符(initramfs),没有任何错误消息。

如果我选择我指定应该安装到的引导加载程序/dev/sda3,它会开始加载,但失败并出现以下错误:

mount: can't find /root in /etc/fstab
...
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /run on /root/run failed: No such file or directory
run-init: current directory on the same filesystem as the root: error 0
Target file system doesn't have requested /sbin/init
run-init: current directory on the same filesystem as the root: error 0
(repeats four more times)
No init found. Try passing init= bootarg.

...然后给我一个(initramfs)提示。

我不知道该如何修复它!我试过使用 Boot-Repair,但没有任何效果。救命!

答案1

我终于让它工作了!非常感谢这是另一个与加密相关的问题的答案。我最终没有加密我的启动分区,因为我认为没有必要,但我做了一些与上述不同的关键事情。似乎主要问题是 Ubuntu 安装程序无法准确确定我的分区是如何设置的,因此有必要进入chroot新的 Linux 安装,进行一些更改以指示正在发生的事情,然后重新安装 grub。以下是我所做的:

  1. 我将 /dev/sda3 格式化为 ext2。(不确定这是否重要。)

  2. 在安装时,我指定应安装引导加载程序,/dev/sda以免/dev/sda3

  3. 我指定/dev/sda1为 EFI 启动分区

  4. 安装成功完成后,我告诉它不要重新启动,然后在终端中执行以下操作:

    sudo mount /dev/mapper/my_linux_lvm_partition /target
    sudo mount /dev/sda3 /target/boot
    sudo mount /dev/sda1 /target/boot/efi
    sudo mount --bind /dev /target/dev
    sudo mount --bind /proc /target/proc
    sudo mount --bind /sys /target/sys
    sudo chroot /target
    
  5. 现在我chroot已进入安装,我编辑/etc/default/grub并添加了以下行:

    GRUB_ENABLE_CRYPTODISK=y
    
  6. 使用以下方法获取各个分区的 UUID:blkid

  7. 添加了一行到/etc/crypttab

    my_luks_partition_name UUID=<UUID of /dev/sda4> none luks,discard
    
  8. sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck

  9. sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

  10. sudo update-initramfs -c -k all

我注意到正确获取 LUKS 分区的名称非常重要,否则运行时会出现错误update-initramfs

我花了整整两天的时间才弄明白,真是郁闷至极。我只希望这些信息能帮助其他人也做到这一点,而不用经历这么多痛苦。

相关内容