动机
想把Ubuntu装到移动硬盘里
环境
支持UEFI和GPT的电脑
一些问题及其解决
启动盘(bootable USB stick)进不去
症状:在选择引导项的界面选择启动盘的时候,闪一下之后,又回到选择界面
解决:需要在BIOS里面关闭安全启动(secure boot)
可能引发的问题:再次进入Windows的时候需要输入Bitlocker密码,所以建议安装之前暂时把BitLocker禁用了
如何实现双系统之间完全独立(即插即用)
症状:在安装Ubuntu的时候,虽然有新建、选择EFI分区的选项,但是实际安装的时候会无视这个选项,并把启动项安装到检索到的第一个EFI分区(原本Windows用的EFI分区),于是实际上两个系统共用了一个EFI分区:当你在开机并选择Ubuntu启动项的时候,实际上是从你的C盘的EFI分区引导到移动硬盘里面的Ubuntu,如果你换一台电脑,就看不见这个启动项了,自然也不能引导到移动硬盘里面的Ubuntu
解决:在安装Ubuntu的时候,先在Try Ubuntu环境下把除了移动硬盘以外的硬盘都禁用掉,再安装,就能把Ubuntu的启动项装到移动硬盘的EFI分区里了
具体操作如下
# SATA硬盘
echo 0 | sudo tee /sys/block/<如sda>/device/delete
# NVME硬盘
# 查看设备的PCI路径
realpath /sys/block/<如nvme0n1>
# 输出结果应该大致为 /sys/devices/pci0000:00/0000:00:0e.0/nvme/nvme0/nvme0n1
# 然后根据输出结果,将对应的NVME设备移除
echo 1 | sudo tee /sys/devices/pci0000:00/0000:00:0e.0/remove
亡羊补牢:如果你已经把Ubuntu按上去了,两个系统正在共用一个EFI分区怎么办?
在移动硬盘里面的空的EFI分区中新建引导文件
- 进入刚刚装好的Ubuntu
- 找到记下移动硬盘里面的EFI分区的UUID:
sudo blkid | grep /dev/<移动硬盘里面的EFI分区>
,或者用系统自带的Disk软件,找到对应的硬盘的分区的UUID - 修改
/etc/fstab
文件中挂载点/boot/efi
对应的UUID至刚刚记下的移动硬盘的EFI分区的UUID:sudo nano /etc/fstab
- 取消挂载Windows的EFI分区并挂载移动硬盘中空的EFI分区:
sudo umount /boot/efi && sudo mount /boot/efi
- 检查
/boot/efi
是否已经挂载到正确的分区(/dev/<移动硬盘里面的EFI分区>
):lsblk | grep /boot/efi
- 在移动硬盘(是设备!不是分区!)上安装grub:
sudo grub-install --removable /dev/<移动硬盘>
- 生成initramfs镜像:
sudo update-initramfs -u -k all
- 生成grub2配置文档:
sudo update-grub
- 重启
- 检查挂载点
/boot/efi
是否挂载到了正确的分区:lsblk | grep /boot/efi
确认新的启动项能正确引导到Ubuntu后,复原旧的EFI分区
- 如果第一个系统是同版本ubuntu,那么需要修正旧的EFI分区下的
\EFI\UBUNTU\grub.cfg
文件中的UUID即可,把它改回去指向第一个系统的根目录 - 如果是其他的Linux系统,可以重启回第一个操作系统后使用
grub-install
重构它的EFI分区 - 如果第一个系统是Windows,那么应该删除EFI分区下的整
ubuntu
目录和BOOT
目录下的所有子文件,并把\EFI\Microsoft\Boot\bootmgfw.efi
复制到\EFI\BOOT\Bootx64.efi
(EFI文件系统不分文件名大小写)
参见:https://i-m.dev/posts/20200808-135558.html,https://askubuntu.com/questions/1250199/move-bootloader-or-remove-efi-partition-in-second-drive
如何在Windows中访问EFI分区?请看下面文章中的删除Ubuntu开机引导部分
安装好之后,启动项中并没有Ubuntu
症状:把Ubuntu正确装进移动硬盘之后(EFI分区也在移动硬盘里),发现启动的时候选择界面并没有出现Ubuntu的启动项
解决:UEFI仅支持特定类型接口的硬盘(IDE、SATA、NVMe、virtio),请检查你的移动硬盘接口类型