前言
? ? ? ?最近這段時間又有興趣開始使用Ubuntu系統(tǒng)了酱吝,但之前為了和某些學(xué)長項(xiàng)目統(tǒng)一,使用的是Ubuntu14.04土思。最近Ubuntu18.04出了之后务热,就想著重新裝一個Ubuntu系統(tǒng)(其實(shí)也是之前ubuntu14是剛接觸ubuntu時安裝的,配置很亂想重新開始)己儒,但在安裝完后遇到了啟動就進(jìn)入grub命令行的問題崎岂。按照一些網(wǎng)上的教程安裝Win10,ubuntu16.04 LTS雙系統(tǒng) 莫名進(jìn)入grub命令行 - CSDN博客闪湾,我成功進(jìn)入了ubuntu系統(tǒng)冲甘,但重啟之后發(fā)現(xiàn)又出現(xiàn)了命令行,這與教程中的結(jié)果不一致途样。后來研究了一下江醇,發(fā)現(xiàn)了我的問題,記錄在此何暇,可能會對一些人有幫助陶夜。
安裝過程簡介
? ? ? ?我是采用rufus制作的啟動盤,因?yàn)槲业腂IOS中選擇boot啟動項(xiàng)時裆站,只能添加.efi文件作為啟動項(xiàng)条辟,因此說明主板是支持BIOS的,所以rufus中的分區(qū)方案選擇的是支持GPT分區(qū)遏插。因?yàn)槲业墓P記本是SSD+機(jī)械硬盤捂贿,所以我在機(jī)械硬盤上預(yù)留了80G的空間用來安裝ubuntu纠修。然后就是照常進(jìn)行安裝胳嘲,掛載分區(qū)有/,/home扣草,/boot了牛,交換空間颜屠,這些具體大小按照個人喜好來分配,網(wǎng)上也有很多教程(這步的教程還算靠譜)鹰祸。然后在分配完后甫窟,最底下會提示安裝啟動引導(dǎo)器的設(shè)備:
? ? ? ?在這里粗井,為了防止我以前的windows啟動項(xiàng)被刷掉,我選擇了安裝在掛載/boot的設(shè)備下街图,但與上面這幅圖不同的是浇衬,因?yàn)槲沂菍buntu安裝在機(jī)械硬盤下,所以/boot分區(qū)也會在機(jī)械硬盤中餐济,但它并不是efi類型的分區(qū)耘擂,然而grub因?yàn)檫x擇了是UEFI引導(dǎo),就會安裝到efi分區(qū)絮姆,因此就出現(xiàn)了grub安裝與boot啟動分離的原因醉冤,進(jìn)而grub無法找到啟動項(xiàng)。
問題分析
? ? ????首先要知道為什么會出現(xiàn)這個問題篙悯,否則就會像我一樣在網(wǎng)上找了很多教程結(jié)果卻沒有任何效果蚁阳。根據(jù)安裝過程我們可以知道,問題大概就出在我的硬盤并不能夠支持efi啟動鸽照,但我卻安裝了efi啟動的ubuntu導(dǎo)致韵吨。我在安裝之前就想到了這個問題。
? ? ????根據(jù)Windows10+Ubuntu18.04雙系統(tǒng)安裝成功心得(理清網(wǎng)上雜亂無章的教程) - CSDN博客移宅,可以先對自己的硬盤有初步的印象归粉。我硬盤的情況如下:
可以看到只有SSD才是GPT分區(qū),因此我需要把ubuntu啟動項(xiàng)安裝在此浅乔。進(jìn)入BIOS后也發(fā)現(xiàn)了boot啟動項(xiàng)只能在SSD的范圍內(nèi)找到。所以最簡單的解決辦法就是給SSD中分配一個單獨(dú)的空間靖苇,作為ubuntu啟動點(diǎn),但很可惜我電腦中對C盤的可壓縮空間為0贤壁。
? ? ? ? 那么現(xiàn)在就應(yīng)該能夠理清問題了:
1.BIOS中需要UEFI啟動,并且啟動項(xiàng)只能夠在磁盤0(SSD)中
2.ubuntu安裝在機(jī)械硬盤中脾拆,/boot也被安裝在機(jī)械硬盤中
3.ubuntu自動安裝grub到了efi分區(qū)中馒索,也就是磁盤0,grub無法再磁盤0中找到相應(yīng)啟動項(xiàng)绰上,因此會進(jìn)入rescue模式
????????那為什么在rescue中輸入命令就能夠正常啟動ubuntu呢?這是因?yàn)槿藶榈闹付藛勇窂津诳椋@樣grub就能夠找到啟動點(diǎn)。
????????那么問題又來了百揭,為什么重啟之后就又會重新進(jìn)入rescue模式呢?
? ? ? ? 這就要理解教程每一步的意義了信峻。在最后兩步倦青,我們運(yùn)行了
sudo update-grub
...
sudo grub-install /dev/sdb7
????????因?yàn)槲覍oot掛載在/dev/sdb7中,所以把grub安裝在此盹舞。但是這其實(shí)并沒有更新grub产镐,因?yàn)閯倓傉f到了,BIOS只會找SSD(磁盤0踢步,ubuntu中為sda)中的啟動項(xiàng)癣亚,而sdb是磁盤1,也就是在機(jī)械硬盤中获印,就算寫出花來述雾,BIOS還是找不到改正后的grub.efi,而還是會啟動最原始的存在磁盤0的那個grub兼丰,然后報錯找不到玻孟。
問題解決
? ? ????知道了問題所在,那解決起來就很簡單了鳍征,只要把SSD中的grub.efi換成更新后的efi不就ok了嗎黍翎?事實(shí)也正是如此。不過還是有兩個坑艳丛。
1.efi啟動分區(qū)受系統(tǒng)保護(hù)匣掸,需要使用root掛載這個分區(qū)
2.修改grub.cfg這個文件
????????先說第一個問題。這個問題很簡單氮双,先用sudo passwd命令更改當(dāng)前密碼碰酝,這樣root密碼就和改后密碼一致,然后su root進(jìn)入root用戶戴差,強(qiáng)制掛載efi啟動分區(qū)送爸。我的電腦中,是
mount /dev/sdb1 /boot/efi(某個文件夾)
????????注意這個掛載到哪是無所謂的,不一定非要掛載在/boot下碱璃,完全看個人喜好弄痹。進(jìn)入到掛載路徑后饭入,應(yīng)該能看到一個文件夾叫做EFI嵌器,再打開后:
會看到類似于上面的啟動項(xiàng),那個Microsoft就是win10的啟動項(xiàng)谐丢,ubuntu是我自己建的目錄爽航,那個最原始的就是grub文件夾,為了保險乾忱,我沒有刪除原來的讥珍,而是在自己建的目錄下把原本在/dev/sdb7中更新過的文件拷貝過來:
把x86-64-efi文件夾中與efi啟動有關(guān)的項(xiàng)目拷貝到剛剛說的ubuntu文件夾中窄瘟,這樣更新后的文件就能夠被BIOS找到了衷佃,然后只要在BIOS中添加了這個啟動項(xiàng)(如何在BIOS中添加啟動項(xiàng)每個電腦具體操作不同,所以不提供教程)蹄葱,再重啟后就能正常引導(dǎo)了氏义!
? ? ? ?但等等,為什么有些人還是不能夠成功图云?這就是我剛說了還有第二個問題,我個人覺得比較奇葩克婶,應(yīng)該比較難遇到丹泉。那就是在更新了grub.cfg后(運(yùn)行sudo update-grub就會更新),我打開看了一下其中的內(nèi)容
????????這是就是grub可視化菜單的代碼表示紫岩,注意set root='hd2,msdos7'這行泉蝌,上圖是我更改后的結(jié)果勋陪。在之前默認(rèn)的是'hd1,msdos7'硫兰,但是根據(jù)教程安裝Win10,ubuntu16.04 LTS雙系統(tǒng) 莫名進(jìn)入grub命令行 - CSDN博客违孝,進(jìn)行查詢后,只有hd2有第七個分區(qū)喇喉,說明我的/boot分區(qū)也就是/dev/sdb7在grub中顯示的是(hd2,msdos7)校坑,所以需要把grub.cfg中與ubuntu引導(dǎo)有關(guān)的都改成hd2,msdos7。注意你應(yīng)該用ls命令查到自己/boot對應(yīng)的是哪個分區(qū)膏斤,然后看是否與grub.cfg中設(shè)置一致莫辨。
? ? ? ?至此毅访,就解決了所有問題,我第一次寫博客敞映,可能會寫的不清楚磷斧,如果有疑問或者我寫的不對的地方,可以寫到評論中冕末,也可以直接給我發(fā)郵件:1225775433@qq.com