使用debootstrap/chroot安装Ubuntu Server 23.10后启动时无法挂载正确根分区的问题求助
debootstrap/chroot安装Ubuntu Server 23.10后启动时无法挂载正确根分区的问题求助
嘿,你这套远程安装Ubuntu Server的流程已经搭得相当完整了,遇到的这个启动时根分区UUID错误的问题,我大概率能猜出来原因——systemd-boot生成的启动配置还在引用安装U盘的根分区信息,完全没指向你新部署的加密LVM根。下面给你一步步拆解修复方案:
1. 重新修正systemd-boot的启动项配置
你之前用bootctl install自动生成启动项,但它没正确识别加密+LVM的复杂环境,得手动改:
- 先重新chroot到你的新系统(如果已经退出的话):
sudo arch-chroot mnt - 进入systemd-boot的启动项目录:
cd /boot/efi/loader/entries - 这里应该有个类似
ubuntu.conf的文件,用编辑器打开它,重点看options那一行。你会发现里面的root=参数指向的是安装U盘的UUID,把它替换成你LVM根分区/dev/mapper/vgroot-vroot的UUID(可以用blkid /dev/mapper/vgroot-vroot查看)。
正确的options行应该包含加密设备的参数,比如:
这里的root=UUID=<你的vgroot-vroot的UUID> cryptdevice=UUID=<你的crypt_root的UUID>:crypt_root ro quiet splashcryptdevice必须加上,告诉initramfs先解密哪个分区才能找到根。
2. 确保initramfs包含加密和LVM/RAID的必要模块
虽然你已经跑了update-initramfs -u,但保险起见,确认关键模块都被包含:
- 编辑
/etc/initramfs-tools/modules文件,检查是否有这些条目:
如果没有,把它们加进去,然后重新生成initramfs:dm-crypt dm-mod raid1 lvm2update-initramfs -u -k all
3. 重新配置bootctl并更新启动项缓存
有时候自动生成的启动项缓存会有问题,手动重置一下:
- 在chroot环境里,先设置默认启动项:
bootctl set-default ubuntu.conf - 然后更新启动项缓存:
bootctl update
4. 检查EFI分区克隆后的启动项配置
你用dd克隆EFI分区是没问题的,但每个EFI分区应该有独立的启动项,确保BIOS能识别三个盘的EFI引导:
- 用
blkid查看sda1、sdb1、sdc1的UUID,然后用efibootmgr分别给每个盘添加启动项,比如给sdb1加:
同理给sdc1也加一个,最后删除原来指向U盘的启动项(用efibootmgr -c -d /dev/sdb -p 1 -L "Ubuntu Server (sdb)" -l "\EFI\ubuntu\systemd-bootx64.efi"efibootmgr查看编号,然后用efibootmgr -b <编号> -B删除)。
最后收尾验证
做完这些后,退出chroot,依次卸载挂载的分区:
umount /mnt/boot/efi umount /mnt/boot umount /mnt
然后重启系统,应该就能正常弹出加密分区的密码提示,之后顺利加载你的LVM根分区了。
另外提个小细节:你生成fstab的时候用了/home/installer/mnt,chroot后记得确认/etc/fstab里的路径都是正确的,没有残留安装环境的路径哦。
备注:内容来源于stack exchange,提问作者Jon Hulka
相关产品推荐
相关产品推荐

