我有一台 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 安装)并手动指定以下内容:
/boot
作为挂载点/dev/sda3
/
作为我的 LVM 组中主 ext4 分区的挂载点- 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。以下是我所做的:
我将 /dev/sda3 格式化为 ext2。(不确定这是否重要。)
在安装时,我指定应安装引导加载程序,
/dev/sda
以免/dev/sda3
我指定
/dev/sda1
为 EFI 启动分区安装成功完成后,我告诉它不要重新启动,然后在终端中执行以下操作:
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
现在我
chroot
已进入安装,我编辑/etc/default/grub
并添加了以下行:GRUB_ENABLE_CRYPTODISK=y
使用以下方法获取各个分区的 UUID:
blkid
添加了一行到
/etc/crypttab
:my_luks_partition_name UUID=<UUID of /dev/sda4> none luks,discard
sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck
sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
sudo update-initramfs -c -k all
我注意到正确获取 LUKS 分区的名称非常重要,否则运行时会出现错误update-initramfs
。
我花了整整两天的时间才弄明白,真是郁闷至极。我只希望这些信息能帮助其他人也做到这一点,而不用经历这么多痛苦。