從 chroot 重新安裝內核

從 chroot 重新安裝內核

我錯誤地刪除了目錄vmlinuz中的一個檔案/boot。不過,為了確定起見,我對/boot內部進行了備份。/tmp

因此,我無法啟動,因為我收到丟失 vmlinuz 檔案錯誤。所以我使用即時 USB 啟動,但是當我進入/boot硬碟 (sda5) 中的目錄時,它完全是空的。如果我將文件複製/tmp/boot到該/boot目錄,我仍然無法啟動。

如何將這些文件恢復到適當的目錄?

答案1

vmlinuz是 Linux 核心映像本身(z 表示它是壓縮的)。

重新安裝目前引用的核心包linux-圖像-通用(或你的HWE內核)並且可能linux-singed-image-通用在 UEFI 安全啟動環境中應該可以解決您的問題。

從 chroot 重新安裝內核

最好啟動相同版本的即時媒體並掛載您安裝的分割區(您可以使用 Nautilus 執行此操作,它會像/media/ubuntu/…那時那樣)或您的/boot分割區(這會更複雜一些)。這將${my_installation}在以下說明中進行說明。

查看/lib/modules/您的安裝 ( ${my_installation}/lib/modules/) 中已安裝的特定核心版本,並選擇您可以找到的最新版本號,如下說明所述${kernel_ver},在我的測試 VM 中為 3.16.0-46。

正如我之前在評論中所說,該過程與在 chroot 中重新安裝 Grub 非常相似,所以讓我引用一下這個答案有一些細微的修改:

  1. 綁定掛載一些其他必要的東西:

     for i in /sys /proc /run /dev; do sudo mount --bind "$i" "${my_installation}$i"; done
    
  2. chroot進入你的 Ubuntu 安裝:

     sudo chroot ${my_installation}
    
  3. 此時,您處於安裝狀態,而不是即時會話,並以 root 身分執行。 ……

現在重新安裝你的核心(signed軟體套件用於 UEFI 安全啟動):

apt-get install --reinstall linux-image-${kernel_ver}-generic linux-signed-image-${kernel_ver}-generic

檢查該/boot目錄是否initrd仍缺少該核心的目錄。要手動生成它,請運行:

mkinitramfs -o /boot/initrd.img-${kernel_ver}-generic ${kernel_ver}-generic

我的例子:

mkinitramfs -o /boot/initrd.img-3.16.0-46-generic 3.16.0-46-generic

然後像引用的答案一樣運行update-grub,以便您可以確保包含“新”核心和 initrd 。

如果您還需要重新安裝 Grub,可以按照其餘步驟操作。請記住,這些說明是為 MBR 編寫的,如果您有 UEFI(來自不同作業系統的引導程式不應相互覆蓋),您需要grub-efi-amd64-bin在重新安裝 Grub 之前檢查是否已安裝。


相關內容