如何從 chroot 內“更新 GRUB”

如何從 chroot 內“更新 GRUB”

我正在雙重啟動 Windows 10 和 Ubuntu 18.04。我最近更新了 Windows 10,從那時起我就無法啟動進入 Linux。有時,更新會擾亂 linux 分割區的啟動,但我總是能夠透過 grub 命令列修復該問題。這似乎是一個完全不同的問題。

如果這是重複的,我深表歉意 - 在我見過的所有相關問題中,詢問者通常能夠到達恢復選單,或者可以正常啟動但不能進入恢復模式。

我可以從 grub 成功啟動引導過程,但之後我無法到達 Ubuntu 的登入畫面。輸入 grub (2.02) 後,我導航到“Ubuntu”或“Ubuntu 的高級選項”,我有四個選項:

Ubuntu, with Linux  4.18.0-21-generic
Ubuntu, with Linux  4.18.0-21-generic (recovery mode)
Ubuntu, with Linux  4.18.0-20-generic
Ubuntu, with Linux  4.18.0-20-generic (recovery mode)

啟動四個中的任何一個都會成功退出 grub 並啟動一系列螢幕輸出。但是,我從未出現過圖形登入視窗、登入提示或任何互動式內容。我將在這裡輸入最後五行:

[   OK   ] Reached target Local Encrypted Volumes.
[   OK   ] Reached target Local File Systems (Pre).
[   OK   ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch
[   OK   ] Reached target Sound Card.
[   OK   ] Found device WDC_WDBNCE5000PNC SSD.

然後,什麼事也沒有發生。我必須按住電源按鈕六秒鐘才能再次啟動電腦。缺少全新安裝,有人有什麼想法嗎?

如果有人想知道早期的台詞,我很樂意在這裡轉錄它們。我很感激我能得到的任何幫助。

編輯:這就是我聽從@K9spud 的建議時發生的事情。 fsck乾淨地回來了,這才鬆了一口氣。我曾經chroot使用linux安裝作為根目錄,發現/var/boot.log比最初列出的要遠得多。我注意到的一件事是,我發布的日誌末尾的裝置無法安裝,可能是因為我設定/etc/fstab錯誤。日誌中的最後一條訊息是

[  OK   ] Started Show Plymouth Boot Screen

從 /etc/fstab 中刪除有問題的行後,系統正常啟動。

TL;DR :設定不正確/etc/fstab會導致登入畫面無法顯示。

答案1

這可能是一個很難回答的問題。最簡單的答案是全新安裝,但如果您在舊安裝中已經投入了大量數據/定制,那就很糟糕了。

如果是我的機器,我會從 Ubuntu USB 安裝拇指驅動器以即時模式啟動 Ubuntu,然後開始檢查硬碟,嘗試找出問題所在並嘗試修復它。

您可能要做的第一件事就是為所有內容建立備份映像,因為您第一次嘗試修復問題時可能會讓事情變得更糟。

接下來,我將在 Linux 分割區上執行 fsck 以確保沒有任何內容損壞該分割區。如果 fsck 返回乾淨,那就太好了,您的所有資料仍然存在,並且可以在必要時以一種或另一種方式恢復。如果 fsck 返回一堆錯誤,我會說安裝已經失敗,分區已損壞,並且除了您在進行全新安裝之前可能能夠檢索到的任何自訂資料之外不值得挽救。

fsck 通過後,我可能會掛載 Linux 分割區並使用「chroot」從 Linux 安裝中開始工作,就像從 Linux 安裝中啟動一樣。您必須在 chroot 環境中擺弄安裝 dev、sys、proc 等,然後您可以執行「update-grub」來嘗試重新安裝 grub。執行“update-grub”可能會顯示一些錯誤,這些錯誤可以解釋為什麼您無法啟動。

如果「update-grub」工作時沒有透露任何重要訊息,則可以嘗試在 /var/log 下查看是否有任何日誌檔案顯示任何可能表明系統無法啟動的錯誤。

除此之外,如果沒有親自看到所有錯誤訊息並嘗試評估哪些內容已損壞,哪些內容未損壞,我不確定還有什麼建議。

非常令人沮喪的是,Windows 很少考慮 Linux 安裝,有時會導致 Linux 無法啟動——這讓我想完全避免 Windows 的雙啟動系統。希望微軟能夠改進並在未來開始更加小心地避免搞亂 Linux 安裝。

答案2

如何從 chroot 內“更新 GRUB”

  1. 在 Linux Live 模式下從 Ubuntu USB 拇指驅動器啟動。確保您的 BIOS 以適合您的系統的正確模式(UEFI 與 Legacy/MBR)啟動 USB 驅動器,否則您將在使 update-grub 正常工作時遇到重大問題。

  2. 啟動進入即時 Linux 後,打開終端機並開始執行以下命令:

mkdir linux

sudo mount /dev/sdXX linux

(將“/dev/sdXX”替換為適合硬碟上 Linux 分割區的任何裝置/分割區號碼。您可能需要執行「gparted」來查看分割區表以找出分割區表)

sudo chroot linux /bin/bash

mount -t devtmpfs udev /dev

mount -t proc proc /proc

mount -t sysfs sysfs /sys

update-grub

(某些系統可能需要一些針對 /boot 和/或 /boot/efi 的額外「掛載」命令——請參閱系統的 /etc/fstab 檔案以協助確定如何在需要時掛載這些命令)

如果一切正常,「update-grub」應該會顯示以下內容:

Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-48-generic
Found initrd image: /boot/initrd.img-4.15.0-48-generic
Adding boot menu entry for EFI firmware configuration
done

對我來說,update-grub 是讓我的系統再次啟動所需的一切,但對於某些人來說,如果grub 已完全從MBR 或任何UEFI 使用的東西中消失,您可能還需要使用「grub -install」。

一旦完成所有操作且沒有錯誤,您必須在退出之前卸載我們之前從 chroot 環境中安裝的所有內容。否則,Ubuntu 在關機時將很難徹底卸載 Linux 分割區。

umount /sys

umount /proc

umount /dev

exit

sudo umount linux

sync

相關內容