这篇文章同样适用于重建 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 引导覆盖掉),这样的工具很多,比如:某毛桃,某度。
网友评论