如何在外置硬盘中安装Grub?
所以,我在Windows 8的双启动中使用了Ubuntu一两个月,看起来并且运行正常,但由于某种原因它崩溃了,我不得不恢复整个PC。 由于这种糟糕的体验,我决定在与我的主Windows机器分开的外部硬盘驱动器上重新安装Ubuntu。 这个选项似乎对两个操作系统都有好处。
但是,在安装Ubuntu时,由于某种原因,引导程序Grub没有安装在外部驱动器上,而同时,“旧”Grub引导程序从未从PC内部硬盘驱动器中删除。 结果,我处于一个奇怪的境地:当我想运行Windows时,我只需启动电脑就可以了。 当我想运行Linux时,我必须插入外部驱动器,进入启动菜单,然后将引导加载程序从Windows更改为Grub。 外部硬盘驱动器不可引导(例如usb棒),每次都需要重复这一长时间的操作。
快速回顾:
- PC内部硬盘驱动器包含旧的Linux安装中的Windows操作系统,Windows引导程序和Grub。
- 外部硬盘包含Ubuntu 15.10,可能是Grub,但不能像USB记忆棒那样可启动。
- 每次我想切换操作系统时,我都需要在启动菜单中手动更改引导加载程序,这很繁琐。
- 引导设备按如下方式排序:1。USB 2.外部驱动器3.内部驱动器
我的问题:如何使外部驱动器可启动,以便当我想从Windows切换到Linux时,我只需关闭电脑,插上USB,打开电脑即可开始使用? (没有丢失我已存储在其上的数据和所有首选项)
PS。 由于某些原因,当通过内部驱动器中提供的Grub引导加载程序加载时,Windows非常慢。 此外,如果未插入外部硬盘驱动器,Grub引导加载程序仅显示Grub救援面板。 因此,使用已安装的Grub作为唯一的引导程序不是一个选项。
这就是我如何安装grub到安装了Ubuntu 17.04的外置硬盘(GPT)。 当你这样做时,它允许你在任何支持UEFI的PC上启动你的Ubuntu,使用外部的grub而不依赖于PC grub。 它还可以作为备份grub,以防Windows的EFI出现问题。
将Grub安装到安装了Ubuntu的外部硬盘驱动器上
-
启动到Ubuntu live USB并连接外部硬盘。
-
列出所有设备的分区:
lsblk
-
根据
lsblk
的结果,lsblk
识别linux分区和外部硬盘的efi分区,即/dev/sdXY1
和/dev/sdXY2
。 用您自己的分区名称替换XY1
和XY1
。 -
特殊挂载linux分区:
sudo mount /dev/sdXY1 /mnt
-
挂载关键虚拟文件系统:
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
-
chroot
到你挂载的Linux分区:sudo chroot /mnt
您现在位于外部硬盘驱动器的linux文件系统中。
-
创建grub将安装其文件的目录:
mkdir -p /boot/efi
如果已存在,则跳到步骤8。
-
从步骤3安装efi分区:
mount /dev/sdXY2 /boot/efi
-
将grub安装到外部硬盘驱动器:
grub-install /dev/sdX
-
更新grub:
update-grub
-
找到efi分区的UUID(又名’vfat’)并记下它:
blkid
要么
ls -l /dev/disk/by-uuid
-
现在我们需要告诉fstab在启动时挂载该efi分区:
cp /etc/fstab /etc/fstab.bak sudo nano /etc/fstab
将以下两行添加到fstab,用步骤11中的UUID替换xxxx-xxxx:
#my modified fstab to mount external hard drive's esp UUID=xxxx-xxxx /boot/efi vfat umask=0077 0 1
确保注释掉Windows esp的fstab条目,这样它就不会发生冲突。
-
退出chroot:
exit
-
重启PC:
sudo reboot
此时,当您重新启动并从EFI启动管理器中选择外部设备时,它将启动到grub。
要在插入外部设备时使Ubuntu自动启动,而在未插入外部设备时自动启动,则必须为Ubuntu创建一个自定义启动项,以指向外部驱动器上的efi:
为Ubuntu创建自定义引导条目以指向外部HD上的efi
从Windows EasyUEFI可以添加或删除引导条目。
从Linux efibootmgr可以添加或删除引导条目。
备选方案#1 – 使用EasyUEFI
-
在Windows下载EasyUEFI,安装并运行。
-
选择EFI选项管理器
-
选择使用+号创建“新条目”
-
选择Linux或其他操作系统,并在描述框中为其命名
-
在包含grub引导加载程序的外部驱动器上选择FAT32 EFI分区
-
选择浏览
-
导航到/efi/ubuntu/shimx64.efi或/ efi / ubuntu / grubx64
-
保存
-
将其移至引导条目列表的顶部
-
重新开始
备选方案#2 – 使用efibootmgr
-
列出启动菜单条目:
efibootmgr
-
创建启动条目:
efibootmgr -c [-L label] [-d /dev/sdX]
例如:
efibootmgr -c -L myubuntu -d /dev/sdX
此引导条目将自动成为第一个条目。
/dev/sdX
是带grub引导程序的外部硬盘驱动器。 -
您现在可以重新启动而无需干预Ubuntu会在插入外部硬盘时自动启动。当没有插入外部硬盘时,PC会跳过我们的Ubuntu启动项进入下一个可能是Windows启动管理器的条目。
我最终找到了解决问题的方法。 我会在这里发布,万一有人可能需要它。 此外,我不完全确定什么有效,如果我采取的所有步骤都是必要的,但这是有效的。
- 确保使用gparted或类似的东西在外部驱动器上有EFI分区。 分区应为FAT32,具有引导和esp标志,并安装在/ boot / efi。 尺寸应该至少为200 Mb,虽然我已经制作了1Gb,因为我的HD上有可用的空间。 如果你没有这个分区,那就去做吧。
- 检查外部硬盘驱动器上的EFI BOOT分区的UUID是否与fstab文件中的UUID匹配。
检查分区的UUID只需键入终端
ls -l /dev/disk/by-uuid
在编辑fstab文件时
sudo nano /etc/fstab
-
现在安装Grub。 (您也可以尝试将grub从内部驱动器复制到外部驱动器分区,但它对我不起作用)。
sudo grub-install / dev / sdX
用实际驱动器替换sdX。
- 如果您还没有这样做,请从USB驱动器启用启动,并确保在UEFI设置菜单中的内部启动之前加载外部启动加载程序。 现在,您的计算机应首先从USB启动,然后从内部硬盘启动(如果未找到启动加载程序)。