我在 VirtualBox 中有一个非常基本的 ArchLinux 设置,我经常将其复制到 USB 上以便在真机上启动。过去几个月它运行良好,但在上次更新(2018 年 10 月 8 日)后,从 USB 启动时,GRUB2 不再识别我的 LUKS 加密系统分区,并将我带入紧急 shell。blkid
在该 shell 中运行发现,GRUB2 甚至无法识别加载它的 USB 盘。
这里对可以工作和不工作的情况做了一些总结,表明问题既不是我的电脑,也不是我的 USB 驱动器,而是我的 Arch 系统:
| ArchLinux | Fresh install of
| before update | after update | fresh reinstall | Ubuntu 18.04.1
--------------------------+-----------------+----------------+------------------+--------------------
Booting from virtual hard | worked | works | works | works*
disk in VirtualBox | | | |
--------------------------+-----------------+----------------+------------------+--------------------
Booting from USB | worked | NOT WORKING | NOT WORKING | works*
in VirtualBox | | | |
--------------------------+-----------------+----------------+------------------+--------------------
Booting from USB | worked | NOT WORKING | NOT WORKING | works*
on a computer | | | |
* with and without full disk encryption (LVM on LUKS)
当然,我尝试通过启动 Arch-iso、安装所有分区(USB 棒)、arch-chroot
进入系统、检查/etc/mkinitcpio.conf
以及/etc/default/grub
运行来mkinitcpio -p linux
修复此问题grub-mkconfig -o /boot/grub/grub.cfg
。仍然无法启动... 我还尝试使用虚拟硬盘中更新的且仍在运行的系统覆盖 USB 棒,但同样没有成功。
有谁知道可能导致这种行为的原因是什么,或者有什么提示我需要在哪里寻找问题?这不可能是磁盘加密,因为虚拟硬盘上的系统在更新后仍然有效(遗憾的是我没有更新前的备份)。
更新:在所有情况下(vbox、vbox 中的 usb、机器上的 usb),使用 fallback initramfs 启动都可以正常工作。mkinitcpio.conf 中可能缺少一些钩子。
以下是关于我的 Arch 系统的一些细节:它是一个 EFI 系统,带有一个 GPT 格式的磁盘,其中只包含两个分区,一个 200 MiB 的 FAT32 分区,上面有 GRUB2,还有一个 15.8 GiB 的 LUKS 容器,里面装有 ext4 系统分区,不涉及 LVM。以下是配置文件的摘要。如果您需要更多信息,请告诉我。
# /etc/mkinitcpio.conf
[...]
HOOKS=(base udev autodetect keyboard keymap modconf block encrypt filesystems fsck)
[...]
# /etc/default/grub
[...]
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=/dev/disk/by-uuid/UUID_OF_LUKS_CONTAINER:cryptosystem"
GRUB_CMDLINE_LINUX=""
[...]
#GRUB_DISABLE_LINUX_UUID=true
[...]
#GRUB_ENABLE_CRYPTODISK=y
[...]
# /boot/grub/grub.cfg
[...]
linux /vmlinuz-linux root=UUID=UUID_OF_FS_INSIDE_LUKS rw cryptdevice=/dev/disk/by-uuid/UUID_OF_LUKS_FS:cryptosystem quiet
[...]
标签:usb、arch-linux、grub2
答案1
删除autodetect
挂钩解决了该问题,现在我可以不使用后备映像来启动系统。