chroot からカーネルを再インストールする

chroot からカーネルを再インストールする

vmlinuzディレクトリ内のファイルを誤って 1 つ削除してしまいました。ただし、念のため内部/bootのバックアップを作成しました。/boot/tmp

その結果、vmlinuz ファイルが見つからないというエラーが発生し、起動できません。そこでライブ USB を使用して起動しましたが、ハード ドライブ (sda5) のディレクトリに入ると、完全に空でした。そのディレクトリに/bootファイルをコピーしても、起動できません。/tmp/boot/boot

これらのファイルを適切なディレクトリに復元するにはどうすればよいですか?

答え1

vmlinuzLinux カーネル イメージそのものです (z は圧縮されていることを示します)。

現在参照されているカーネルパッケージを再インストールするLinux イメージ ジェネリック(またはあなたのHWEカーネル)そしておそらくLinux 署名済みイメージ汎用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. chrootUbuntu のインストールに以下を追加します:

     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 (異なる OS のブートローダーが互いに上書きしてはならない) を使用している場合は、grub-efi-amd64-binGrub を再インストールする前に、インストールされていることを確認する必要があります。


関連情報