系统 | 把 Grub 安装到 U 盘上 / 重建 Grub 引导

这篇文章同样适用于重建 Grub 引导。

熟悉我写作风格的小伙伴都应该知道,我的文章,只放干货。
但是,不把背景交代清楚也不行,干货就容易噎着。
不喜欢的可以直接跳到分割线以后,直接看干货。

最近,因为一些原因,用 Windows 比较多,就重装了一下,就把 Grub 引导覆盖掉了。

吐槽:Windows 就是这么专横,这也是我不喜欢它的原因之一。
也可能是我还不会装 Windows [尴尬]

喜欢 Linux 的原因之一,就是因为它可以 DIY,把你自己的电脑打造成你想要的样子。
比如:

  • 我想把它装到 U 盘中;
  • 我想让它和其他 OS 并存;
  • 我想把它 “阉割”,只保留我想要的功能......

——它都可以!

---------------------我是分割线---------------------

我的需求

  • 当我想打开 Linux 的时候,正常选择想要打开的操作系统;
  • 当我不用的时候,让其他人打开 Windows,不想在引导界面看到一大堆操作系统的菜单。就好像 Linux 不存在一样。

许多装双系统的小伙伴应该都有这样的经历。尤其是像我这样的狂热的软件试用者 DB,我在我的 1 个 G的硬盘上装了 10 个操作系统(包括 Win)。

那么,如何实现呢?

示例说明

目标 U 盘:/dev/sdb1 # 你的可能是其他的

错误的示例

# 错误的示例
grub-install --target=i386-pc /dev/sdb
grub-mkconfig -o /boot/grub/grub.cfg

得到错误:
error: failed to get canonical path of `overlay'.

正确的做法是:

如果你的 Grub 分区(就是你想把 Grub 安装到的那个分区)包含完整的操作系统安装

sudo mount /dev/sdb1 /mnt
sudo chroot /mnt
sudo update-grub2
grub-install --target=i386-pc /dev/sdb # 注意:不是 'sdb1',没有这个 '1'。
grub-mkconfig -o /boot/grub/grub.cfg

如果 Grub 分区(在这里是我的目标 U 盘)是空的

我不得不首先将大部分系统引入 chroot 环境:

#!/bin/bash
mkdir /mnt/chrootdir
mount /dev/sdb1 /mnt/chrootdir
for dir in proc dev sys etc bin sbin var usr lib lib64 tmp; do
    mkdir /mnt/chrootdir/$dir && mount --bind /$dir /mnt/chrootdir/$dir
    # 你要是不嫌麻烦,一个一个创建,一个一个 mount 也是可以的.
done
chroot /mnt/chrootdir
grub-install --target=i386-pc /dev/sdb # 注意:不是 'sdb1',没有这个 '1'。
grub-mkconfig -o /boot/grub/grub.cfg
# 你要是 **确定** 你的操作参数,直接在上面这段代码中更改,复制粘贴创建一个脚本,一键完成,也是可以的。
# 像我们这些新手还是建议一行一行敲代码,掌握的实在。

用法:

  • 插上 U 盘,打开你想要的系统;
  • 拔掉 U 盘,其他用户感觉不到 Linux 的存在。

但是,你的电脑可能还达不到这样的效果,因为,你的双系统的 Grub 引导还在你的硬盘上。其他用户打开的时候,还是会看到原来的引导界面。
如果你想达到这样的效果,也不是不可以,那就是用 Windows 引导修复工具‘修复’ Windows 引导(也就是用 Windows 引导把 Grub 引导覆盖掉),这样的工具很多,比如:某毛桃,某度。

GoodLuck!

参考链接
Grub 官网
某百科

你可能感兴趣的:(系统 | 把 Grub 安装到 U 盘上 / 重建 Grub 引导)