
我錯誤地刪除了目錄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 非常相似,所以讓我引用一下這個答案有一些細微的修改:
綁定掛載一些其他必要的東西:
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "${my_installation}$i"; done
chroot
進入你的 Ubuntu 安裝:sudo chroot ${my_installation}
此時,您處於安裝狀態,而不是即時會話,並以 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 之前檢查是否已安裝。