這篇文章同樣適用于重建 Grub 引導(dǎo)。
熟悉我寫作風(fēng)格的小伙伴都應(yīng)該知道惠猿,我的文章羔砾,只放干貨。
但是偶妖,不把背景交代清楚也不行姜凄,干貨就容易噎著。
不喜歡的可以直接跳到分割線以后餐屎,直接看干貨檀葛。
最近,因為一些原因腹缩,用 Windows 比較多,就重裝了一下空扎,就把 Grub 引導(dǎo)覆蓋掉了藏鹊。
吐槽:Windows 就是這么專橫,這也是我不喜歡它的原因之一转锈。
也可能是我還不會裝 Windows [尷尬]
喜歡 Linux 的原因之一盘寡,就是因為它可以 DIY,把你自己的電腦打造成你想要的樣子撮慨。
比如:
- 我想把它裝到 U 盤中竿痰;
- 我想讓它和其他 OS 并存;
- 我想把它 “閹割”砌溺,只保留我想要的功能......
——它都可以影涉!
---------------------我是分割線---------------------
我的需求
- 當(dāng)我想打開 Linux 的時候,正常選擇想要打開的操作系統(tǒng)规伐;
- 當(dāng)我不用的時候蟹倾,讓其他人打開 Windows,不想在引導(dǎo)界面看到一大堆操作系統(tǒng)的菜單猖闪。就好像 Linux 不存在一樣鲜棠。
許多裝雙系統(tǒng)的小伙伴應(yīng)該都有這樣的經(jīng)歷。尤其是像我這樣的狂熱的軟件試用者 DB培慌,我在我的 1 個 G的硬盤上裝了 10 個操作系統(tǒng)(包括 Win)豁陆。
那么,如何實現(xiàn)呢吵护?
示例說明
目標(biāo) 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 分區(qū)(就是你想把 Grub 安裝到的那個分區(qū))包含完整的操作系統(tǒng)安裝
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 分區(qū)(在這里是我的目標(biāo) U 盤)是空的
我不得不首先將大部分系統(tǒng)引入 chroot
環(huán)境:
#!/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
# 你要是不嫌麻煩,一個一個創(chuàng)建里逆,一個一個 mount 也是可以的.
done
chroot /mnt/chrootdir
grub-install --target=i386-pc /dev/sdb # 注意:不是 'sdb1'进胯,沒有這個 '1'。
grub-mkconfig -o /boot/grub/grub.cfg
# 你要是 **確定** 你的操作參數(shù)原押,直接在上面這段代碼中更改胁镐,復(fù)制粘貼創(chuàng)建一個腳本,一鍵完成诸衔,也是可以的盯漂。
# 像我們這些新手還是建議一行一行敲代碼,掌握的實在笨农。
用法:
- 插上 U 盤就缆,打開你想要的系統(tǒng);
- 拔掉 U 盤谒亦,其他用戶感覺不到 Linux 的存在竭宰。
但是,你的電腦可能還達(dá)不到這樣的效果份招,因為切揭,你的雙系統(tǒng)的 Grub 引導(dǎo)還在你的硬盤上。其他用戶打開的時候锁摔,還是會看到原來的引導(dǎo)界面廓旬。
如果你想達(dá)到這樣的效果,也不是不可以谐腰,那就是用 Windows 引導(dǎo)修復(fù)工具‘修復(fù)’ Windows 引導(dǎo)(也就是用 Windows 引導(dǎo)把 Grub 引導(dǎo)覆蓋掉)孕豹,這樣的工具很多,比如:某毛桃十气,某度励背。