問題產(chǎn)生的原因:
某一天心血來潮想要把kali系統(tǒng)裝到U盤里亭枷,這樣方便與隨身攜帶學(xué)習(xí)用冰垄。剛開始還是好好的洛波,從U盤啟動(dòng)到使用都是極好的。后來換了一臺(tái)筆記本册舞,就突然產(chǎn)生了Grub Rescue這個(gè)問題蕴掏,上面一個(gè)提示是:invalid arch independent ELF magic。
在網(wǎng)上查找了一下原因,發(fā)現(xiàn)可能是由于主板支持 UEFI BIOS(可擴(kuò)展固件接口)盛杰,是用來替代傳統(tǒng)的BIOS的挽荡,很多的Grub都支持。所以存在幾種可能的原因:
主板沒有開啟UEFI引導(dǎo)(BIOS設(shè)置里面UEFI Shell還沒有安裝)
系統(tǒng)的安裝已經(jīng)檢測到UEFI的啟動(dòng)即供,因此自動(dòng)將Grub配置為UEFI定拟,因而導(dǎo)致Grub無法正常啟動(dòng)
U盤質(zhì)量不過關(guān),導(dǎo)致引導(dǎo)失敗
將系統(tǒng)安裝到U盤里時(shí)逗嫡,由于選擇分區(qū)安裝青自,導(dǎo)致系統(tǒng)找不到引導(dǎo)。
1.問題現(xiàn)象
2.解決步驟
一般使用平常Grub Rescue模式下的基本操作驱证,輸入下面的命令
先使用ls命令延窜,找到Ubuntu的安裝在哪個(gè)分區(qū):
grub rescue>ls
會(huì)羅列所有的磁盤分區(qū)信息,比方說:
(hd0),(hd0,msdos3),(hd0,msdos2),(hd0,msdos1)
然后依次調(diào)用如下命令: msdosX表示各個(gè)分區(qū)抹锄,注意 msdos 與 數(shù)字 之間沒有空格逆瑞!
grub rescue>ls (hd0,msdosX)/boot/grub
如果都找不到的話,需要查一下是否因?yàn)長inux版本差異伙单,造成grub的路徑不對获高,
例如直接ls(hd0,X)/grub等等。
假設(shè)找到(hd0,msdos3)時(shí)吻育,顯示了文件夾中的文件念秧,則表示 Linux 安裝在這個(gè)分區(qū)。調(diào)用如下命令:
grub rescue>set root=(hd0,msdos3)
grub rescue>set prefix=(hd0,msdos3)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
然后調(diào)用如下命令布疼,就可以顯示出丟失的grub菜單了摊趾。
grub rescue>normal
如果出現(xiàn)前面的錯(cuò)誤:invalid arch independent ELF magic。(這里引入的是用U盤裝系統(tǒng)時(shí)的解決方法缎除,然而并不適用我把系統(tǒng)裝在U盤里严就,很糾結(jié))
接下來就考慮要使用Live CD总寻,嘗試著把Grub配置為普通版本進(jìn)行還原器罐。首先查看分區(qū)信息如下:
sudo fdisk -lu /dev/sda
復(fù)制代碼
顯示分區(qū)為:
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0fba0fb9
Device Boot????? Start???????? End????? Blocks?? Id? System
/dev/sda1?? *????????? 63?? 409593239?? 204796588+?? 7? HPFS/NTFS/exFAT
/dev/sda2?????? 409593301? 1953523711?? 771965205+?? f? W95 Ext'd (LBA)
/dev/sda5?????? 409593303?? 929520899?? 259963798+?? 7? HPFS/NTFS/exFAT
/dev/sda6?????? 929521664?? 960770047??? 15624192?? 82? Linux swap / Solaris
/dev/sda7?????? 960772096? 1953523711?? 496375808?? 83? Linux
注意我這里是將整個(gè)根目錄/安裝在/dev/sda7上面的。因此可執(zhí)行操作如下(#后的內(nèi)容為注釋):
sudo apt-get remove grub-efi-amd64?? #移除grub-efi
sudo apt-get install grub-pc? #安裝普通grub
sudo mount /dev/sda7 /mnt??? #掛載引導(dǎo)分區(qū)
sudo grub-install --root-directory=/mnt /dev/sda
復(fù)制代碼
這里如果你的引導(dǎo)分區(qū)位于單獨(dú)的分區(qū)上渐行,還需要掛載至/mnt/boot目錄上轰坊。在執(zhí)行完最后一條grub-install命令后,如果安裝成功會(huì)給出沒有錯(cuò)誤的提示祟印,這樣就把Grub切換回來了肴沫,重啟就可以看到熟悉的Grub菜單了。
不過不要高興蕴忆,如果這時(shí)重啟颤芬,問題依舊存在,我們需要進(jìn)入Linux中,對grub進(jìn)行修復(fù)站蝠。
進(jìn)入Linux之后汰具,在命令行執(zhí)行:
sudo update-grub
sudo grub-install /dev/sda
(sda是你的硬盤號碼,千萬不要指定分區(qū)號碼菱魔,例如sda1留荔,sda5等都不對)
重啟測試是否已經(jīng)恢復(fù)了grub的啟動(dòng)菜單
3.解決結(jié)果
從網(wǎng)上查了半天一直沒能成功解決,綜合多個(gè)帖子的答案算是勉強(qiáng)確定了問題原因澜倦,真的是勸大家以后換個(gè)好點(diǎn)的U盤聚蝶,在不明白linux系統(tǒng)的情況下不要隨便對安裝系統(tǒng)進(jìn)行分區(qū)。
4.參考
[1] CSDNwoty123
[2] 百度經(jīng)驗(yàn)
[3] Linux社區(qū)? 作者:wzhnsc