系統(tǒng): ubuntu12.04 beta (development version) 環(huán)境: 這臺是測試機(jī),多系統(tǒng)并存在一枚硬盤上(ubunntu12.04/10.04/debian 6/win7/Xen server等等)
幾天前通過apt 把ubuntu12.04 beta2升級軟件到ubuntu 12.04LTS。升級時,在apt的輸出中,看到grub軟件包更新有warning,寫著“…not a good choice..”,有不詳預(yù)感,grub的升級一定出了問題。果然,升級后,啟動時,進(jìn)入grub菜單選擇后提示:
grub error: no such partition
于是有了這篇短文,此方法對 grub rescue 同樣有效
出錯原因
grub2在升級過程中出錯,重新install一遍即可。問題是,連系統(tǒng)都進(jìn)入不了,如何reinstall呢?
解決方法
使用u盤或cd等外部系統(tǒng)啟動,chroot到原系統(tǒng)后 re-install grub。
步驟
找一張liveCD的linux系統(tǒng),發(fā)行版任意,ubuntu/fedora/等等,都行。目的是用它啟動機(jī)器,掛載硬盤,然后chroot回到原來的系統(tǒng)路徑。筆者是使用SD卡中的tinycore linux啟動機(jī)器。
啟動后,檢查分區(qū)情況,定位你升級失敗的ubuntu12.04的根目錄安裝在哪個分區(qū)。
sudo fdisk -l
掛載、綁定所需要的系統(tǒng)設(shè)備到原ubuntu12.04系統(tǒng)的分區(qū)下
# 例如,我的ubuntu12.04的根目錄是在/dev/sda6下。 sudo mkdir /mnt/sda6 sudo mount /dev/sda6 /mnt/sda6 sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys
一切就緒后,chroot到原系統(tǒng)下
sudo chroot /mnt/sda6 /bin/bash # 若這里提示不能chroot,請看下面的注1
執(zhí)行g(shù)rub的恢復(fù) (reinstall)
grub-install /dev/sda # 安裝到MBR 或者 grub-install /dev/sda6 # 把grub安裝到分區(qū)
安裝好后,請退出chroot的環(huán)境
logout 或者 exit 或者 CTRL-D
退出掛載的設(shè)備和分區(qū)
sudo umount /mnt/sda6/sys sudo umount /mnt/sda6/proc sudo umount /mnt/sda6/dev sudo umount /mnt/sda6
至此,重啟即可。
注1:這個過程中,請注意liveCD運行環(huán)境和已安裝linux版本的兼容性問題,32bit的要使用32bit的liveCD,64bit的要使用64bit的liveCD,否則在chroot時會出現(xiàn)提示:
can't execute 'bin/bash': Exec format error
----------------------------------------------------------------------------
自從ubuntu 9.10開始,ubuntu正式開始使用grub2作為引導(dǎo)程序。對于多系統(tǒng)用戶,可能有時候會將引導(dǎo)搞丟了(比如雙系統(tǒng)下重新安裝windows系統(tǒng)等),下面奶牛來介紹下ubuntu等linux系統(tǒng)的grub2的修復(fù)。
1.需要一張可以引導(dǎo)的ubuntu live-cd,并且版本在9.10+
用live-cd引導(dǎo)進(jìn)入系統(tǒng),然后在mnt目錄下掛載分區(qū)。
首先我們需要確定一個問題,你的/boot是否單獨分區(qū)了,如果單獨分區(qū)了請按照方法A進(jìn)行,如果/boot沒有單獨分區(qū),可以按照B來進(jìn)行。
A:以/boot為sda8,/為sda9為例,如果還有其它linux分區(qū)也用同樣的方法掛上來就可以了。
打開終端,
sudo su
fdisk -l (查看分區(qū)內(nèi)容,并且確定硬盤為sda啊還是sdb,或者h(yuǎn)da還是sda)
mount /dev/sda9 /mnt
mount /dev/sda8 /mnt/boot
mount –bind /dev /mnt/dev
mount –bind /proc /mnt/proc
如果還有其它linux分區(qū),用同樣的方法掛載上
chroot /mnt
這時沒有意外的話我們就已經(jīng)進(jìn)入了ubuntu的系統(tǒng)了
sudo grub-install /dev/sda
sudo update-grub
完工,重啟,linux系統(tǒng)應(yīng)該可以進(jìn)入了。
B:方法與A類似,但是不用掛載/boot分區(qū),所以mount /dev/sda8 /mnt/boot可以省略。其它操作一樣。
如果在sudo update-grub后出現(xiàn)提示
Cannot find list of partitions!
請不要慌張,因為在多系統(tǒng)的環(huán)境下會出現(xiàn)這個提示,告訴我們無法識別linux之外的windows系統(tǒng),正常重啟還是可以進(jìn)入linux的,進(jìn)入系統(tǒng)后就啥都好說了,繼續(xù)多來一次update-grub就可以了。
-------------------------------------------------------------
由于寒假,本站已經(jīng)相當(dāng)長時間沒有更新了。如今開學(xué)自然可充分利用時間,所以現(xiàn)在就講下我前段時間碰到的一個問題:前陣子我硬盤分區(qū)失誤,導(dǎo)致系統(tǒng)啟動時自動進(jìn)入rescue模式。
當(dāng)時折騰了好些時間,都解決不了,現(xiàn)在就將解決辦法曬出來。
首先聲明一下,要解決此問題必須保證grub核心文件core.img還在分區(qū)內(nèi),然后通過:set,ls,insmod,root,prefix等命令解決。
此問題還需要分類解決,分為兩種情況:1. /boot 沒有單獨分區(qū),默認(rèn)包含在 / 分區(qū);2. /boot 分區(qū)有單獨分區(qū)。
第一種情況:
先確定grub核心文件所在分區(qū)
ls (hd0,x)/查看(hd0,x)分區(qū)目錄的文件。(##x為未知數(shù),假如我的grub核心文件在(hd0,9),就輸入ls (hd0,9))
ls (hd0,x)/boot/grub/ 查看(hd0,x)分區(qū)/boot/grub目錄下文件
ls (hd0,x)/boot/ 查看(hd0,x)分區(qū)的/boot目錄下文件ls (hd0,x)/boot/grub/ 查看(hd0,x)分區(qū)/boot/grub目錄下文件
確定分區(qū)之后,執(zhí)行下列命令:
grub rescue>root=(hd0,x)
grub rescue>prefix=/boot/grub
grub rescue>set root=(hd0,x)
grub rescue>set prefix=(hd0,x)/boot/grub
grub rescue>insmod normal
rescue>normal ——–>若出現(xiàn)啟動菜單,按c進(jìn)入命令行模式
rescue>linux /boot/vmlinuz-xxx-xxx root=/dev/sdax
rescue>initrd /boot/initrd.img-xxx-xxx
rescue>boot
內(nèi)核版本號 -xxx-xxx可以按Tab鍵查看后再手動補(bǔ)全。
第二種情況:
首先用同樣的方法找出 /boot 獨立分區(qū)(hd0,x)和 / 分區(qū)(hd0,y),然后執(zhí)行下列命令:
grub rescue>root=(hd0,x)
grub rescue>prefix=/grub
grub rescue>set root=(hd0,x)
grub rescue>set prefix=(hd0,x)/grub
grub rescue>insmod normal
rescue>normal ——–>若出現(xiàn)啟動菜單,按c進(jìn)入命令行模式
rescue>linux /vmlinuz-xxx-xxx root=/dev/sday
rescue>initrd /initrd.img-xxx-xxx
rescue>boot
boot啟動系統(tǒng)后,再在系統(tǒng)下打開終端,執(zhí)行命令修復(fù)grub 重建配置文件grub.cfg
sudo update-grub
重建grub到第一硬盤mbr
sudo grub-install /dev/sda
本文大部分?jǐn)?shù)據(jù)來源于網(wǎng)絡(luò),由于時間已久,來源已無處可尋,如有侵犯到您的著作權(quán),請告知,本站將立即刪除!