更新管理器卸載了 GRUB - 如何返回 Ubuntu?

更新管理器卸載了 GRUB - 如何返回 Ubuntu?

我運行 Ubuntu 14.04 並且總是定期更新(幾乎每天)。今天,7 月 8 日,Ubuntu 更新的表現與平常不同。它說“並非所有更新都可以安裝”並建議“部分更新”。從未嘗試過,但我相信 Ubuntu。我在更新清單中註意到的一件事是引導程式 GRUB,但是嘿,我信任 Ubuntu。

完成後,它要求我重新啟動,當我這樣做時,它會直接啟動到 Windows。也就是說,GRUB 已被有效卸載,我現在無法選擇是否要啟動到 Ubuntu。我對 Linux 或 Windows 都不是一個狂熱的人,但我覺得 Windows 8 更不利(它只是捆綁在一起的)。

Ubuntu 仍然存在於筆記型電腦上嗎?如果是的話,我該如何盡快恢復? (我週末要做一個演示,設定一個新系統並且取得備份資料很慢)。


依照 Christian Benke 的回答無法安裝 grub


我現在正在使用 ubuntu USB 棒探測系統。

ubuntu@ubuntu:~$ sudo parted -l
Model: ATA TOSHIBA THNSNJ25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name                  Flags
 1      1049kB  1075MB  1074MB  ntfs            Basic data partition  hidden, diag
 2      1075MB  1180MB  105MB   fat32           Basic data partition  boot
 3      1180MB  1314MB  134MB   ntfs            Basic data partition  msftres
 4      1314MB  44.7GB  43.4GB  ntfs            Basic data partition  msftdata
 6      44.7GB  46.7GB  2000MB  linux-swap(v1)
 7      46.7GB  244GB   197GB   ext4
 5      244GB   256GB   12.1GB  ntfs            Basic data partition  hidden, diag

快速「sudo mkdir /media/[mountpoint]」後面接著「sudo mount /dev/sda[X] /media/[mountpoint]」允許檢查分區:

/dev/sda1  Windows boot files
/dev/sda2  EFI files
/dev/sda3  Empty
/dev/sda4  Windows system
/dev/sda5  Toshiba recovery
/dev/sda6  Ubuntu swap partition (not mountable)
/dev/sda7  Ubuntu system

顯然,/dev/sda7 是我想繼續的。

ubuntu@ubuntu:~$ sudo mkdir /media/oldroot
ubuntu@ubuntu:~$ sudo mount /dev/sda7 /media/oldroot
ubuntu@ubuntu:~$ sudo mount --bind /dev /media/oldroot/dev
ubuntu@ubuntu:~$ sudo mount --bind /proc /media/oldroot/proc
ubuntu@ubuntu:~$ sudo mount --bind /sys /media/oldroot/sys
ubuntu@ubuntu:~$ sudo chroot /media/oldroot /bin/sh 
# lsb_release -d
Description:    Ubuntu 14.04.2 LTS
# grub-install /dev/sda
Installing for x86_64-efi platform.
grub-install: error: cannot find EFI directory.
# exit

顯然,grub-install 沒有在 /dev/sda2 找到 EFI 文件,但預先將其安裝在 /media/oldroot/boot/efi 似乎運作得很好:

ubuntu@ubuntu:~$ sudo mount /dev/sda2 /media/oldroot/boot/efi
ubuntu@ubuntu:~$ sudo chroot /media/oldroot /bin/sh 
# lsb_release -d
Description:    Ubuntu 14.04.2 LTS
# grub-install /dev/sda
Installing for x86_64-efi platform.
Installation finished. No error reported.
# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.16.0-43-generic
Found initrd image: /boot/initrd.img-3.16.0-43-generic
Found linux image: /boot/vmlinuz-3.16.0-41-generic
Found initrd image: /boot/initrd.img-3.16.0-41-generic
Found linux image: /boot/vmlinuz-3.16.0-40-generic
Found initrd image: /boot/initrd.img-3.16.0-40-generic
Found linux image: /boot/vmlinuz-3.16.0-39-generic
Found initrd image: /boot/initrd.img-3.16.0-39-generic
Found linux image: /boot/vmlinuz-3.16.0-38-generic
Found initrd image: /boot/initrd.img-3.16.0-38-generic
Found linux image: /boot/vmlinuz-3.16.0-37-generic
Found initrd image: /boot/initrd.img-3.16.0-37-generic
Found linux image: /boot/vmlinuz-3.16.0-36-generic
Found initrd image: /boot/initrd.img-3.16.0-36-generic
Found linux image: /boot/vmlinuz-3.16.0-34-generic
Found initrd image: /boot/initrd.img-3.16.0-34-generic
Found linux image: /boot/vmlinuz-3.16.0-33-generic
Found initrd image: /boot/initrd.img-3.16.0-33-generic
Adding boot menu entry for EFI firmware configuration
done
# exit    

然而,這並沒有解決問題。重開機後,GRUB沒有出現,又直接進入Windows?到目前為止謝謝你,這次好像是什麼問題?


無法重新安裝受影響的軟體包


按照建議,我查看 apt/history.log 文件,看看「部分更新」期間發生了什麼,導致 GRUB 無法運作。不幸的是,它不包含 7 月 8 日更新的條目:

ubuntu@ubuntu:~$ cat /media/summer7/var/log/apt/history.log

Start-Date: 2015-07-03  09:32:40
Commandline: aptdaemon role='role-commit-packages' sender=':1.79'
Upgrade: lightdm:amd64 (1.10.5-0ubuntu1, 1.10.5-0ubuntu1.1), liblightdm-gobject-1-0:amd64 (1.10.5-0ubuntu1, 1.10.5-0ubuntu1.1)
End-Date: 2015-07-03  09:32:42

Start-Date: 2015-07-05  20:02:01
Commandline: aptdaemon role='role-commit-packages' sender=':1.85'
Upgrade: libxcomp3:amd64 (3.5.0.31-0~605~ubuntu14.04.1, 3.5.0.32-0~668~ubuntu14.04.1), nxproxy:amd64 (3.5.0.31-0~605~ubuntu14.04.1, 3.5.0.32-0~668~ubuntu14.04.1), irqbalance:amd64 (1.0.6-2ubuntu0.14.04.1, 1.0.6-2ubuntu0.14.04.2)
End-Date: 2015-07-05  20:02:04

Start-Date: 2015-07-07  20:00:24
Commandline: aptdaemon role='role-commit-packages' sender=':1.81'
Install: linux-image-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-headers-3.16.0-43:amd64 (3.16.0-43.58~14.04.1), linux-headers-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-image-extra-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-signed-image-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1)
Upgrade: linux-signed-image-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), libfontembed1:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), linux-image-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), cups-browsed:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), linux-signed-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), cups-filters-core-drivers:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), cups-filters:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), libgtksourceview2.0-0:amd64 (2.10.5-1ubuntu2, 2.10.5-1ubuntu2.14.04.1), linux-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), linux-libc-dev:amd64 (3.13.0-55.94, 3.13.0-57.95), libgtksourceview2.0-common:amd64 (2.10.5-1ubuntu2, 2.10.5-1ubuntu2.14.04.1), linux-headers-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), libcupsfilters1:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5)
End-Date: 2015-07-07  20:01:11

事實上,它的長度似乎有點小不是嗎?此外,與上次觸及文件的時間相比,最後一個條目是在未來 2 小時之後:

ubuntu@ubuntu:~$ ls -l /media/summer7/var/log/apt/history.log
-rw-r--r-- 1 root root 1925 Jul  7 18:01 /media/summer7/var/log/apt/history.log

那麼也許我們在這裡看到的是檔案損壞?哦,好吧,我嘗試了 apt-get update 但它不起作用:

ubuntu@ubuntu:~$ sudo mount --bind /dev /media/oldroot/dev
ubuntu@ubuntu:~$ sudo mount --bind /proc /media/oldroot/proc
ubuntu@ubuntu:~$ sudo mount --bind /sys /media/oldroot/sys
ubuntu@ubuntu:~$ sudo chroot /media/oldroot apt-get update

一切都無法獲取,並出現“無法解析”錯誤,就像這個問題。以下失敗

ubuntu@ubuntu:~$ sudo chroot /media/oldroot ping dk.archive.ubuntu.com
ping: unknown host dk.archive.ubuntu.com

並且 /media/oldroot/etc/resolv.conf 檔案完全是空的。這是一個壞兆頭嗎?

答案1

我和你同一天也遇到了同樣的問題。我正在處理一些事情,ubuntu 建議進行部分更新,我同意了,然後昨天花了大部分時間嘗試重新安裝 grub(無濟於事)。

我的安裝是 Windows 8.1 雙重啟動,因此除了 Windows 分割區之外,我還有三個 Linux 分割區:一個用於系統(“/”),一個用於家庭(“/home”),一個用於交換。我無法使用啟動修復重新安裝 grub,因此我使用 ubuntu 拇指驅動器啟動,並啟動了安裝程式。

當它問我想做什麼時,我選擇了別的東西。然後,我將原始系統目錄“/”設為根分割區,並告訴安裝程式對其進行格式化,將交換設為交換,並將主目錄設為“/home”,但我告訴安裝程式不要格式化主目錄。

我還告訴安裝程式將引導程式安裝在磁碟上(在我的例子中是/dev/sda)而不是分割區上。安裝完成,重新啟動時出現 grub,我能夠重新啟動進入 ubuntu 和 windows 8.1。

我的主目錄完好無損,我的桌面背景和 .bashrc 自動加載,一旦我開始重新安裝程序,我就會自動重新登入 teamviewer、chrome 等。

如果您有單獨的 /home 和系統分割區,這可能是最好的修復方法。不會遺失數據,重新安裝不會花費太長時間。

答案2

您可以使用小型可啟動即時系統,例如葛米爾和命令chroot返回舊系統以修復損壞的引導程式。

從 live-cd 啟動後,您想要存取已安裝的 Linux 系統的檔案系統。因此,您要做的第一件事就是掛載已安裝的 Linux 的根分割區(作為 live-cd 環境中的 root 使用者):

# mkdir /media/oldroot
# mount /dev/sda1 /media/oldroot

如果您不確定您的 Linux 分割區是哪一個,請掛載所有可用分割區並檢查哪一個是您的根分割區。

取得功能性 chroot 環境的下一步是掛載偽檔案系統 (/dev,/行程,/系統)從我們剛安裝的根分割區內的 live-cd-環境:

# mount --bind /dev /media/oldroot/dev
# mount --bind /proc /media/oldroot/proc
# mount --bind /sys /media/oldroot/sys

現在我們的系統已準備好進行 chroot,這意味著您可以用已安裝的系統「替換」live-cd 的環境(我們也告訴它使用/bin/sh作為安裝環境中的命令提示字元:

# chroot /media/oldroot /bin/sh
# 

驗證您是否在舊安裝的 Linux 中:

# lsb_release -d
Description:    Ubuntu 14.04.2 LTS

從 chroot 嘗試運行

# grub-install /dev/sda

在硬碟的主開機記錄中重新安裝 grub-bootloader。

如果 grub2 確實已被卸載且 grub-install 不存在,您可以透過將 grub2-package 複製到 USB 來重新安裝它:

從以下位置下載 deb 文件http://packages.ubuntu.com/trusty/grub2並將其複製到 USB 隨身碟。將 USB 記憶棒安裝到 chroot 中(使用 Alt-F2 在 live-cd 環境中取得第二個 tty 以安裝 USB 記憶棒,然後使用 Alt-F1 切換回 chroot 環境):

-- Press <Alt-F2> to get to the second tty of the live-cd-env
# mkdir /media/oldroot/media/<yourusername>/usb_stick
# mount /dev/sdb1 /media/oldroot/media/<youruser>/usb_stick

-- Press <Alt-F1> to get back to the first tty to our chroot
# cd /media/<yourusername>/usb_stick
# ls
dpkg -i grub2_2.02~beta2-9_amd64.de
# dpkg -i grub2_2.02~beta2-9_amd64.deb

之後,繼續grub 安裝

相關內容