Ubuntu のブートローダ及び/boot パーティションを再インストールする
Ubuntu のパッケージアップデート時やオペレーションミス等でLinux が起動しなくなってしまうような状況に陥ってしまった時、諦めてUbuntu を再インストール…ということは無いでしょうか。
その環境、まだ直るかもしれません。
今回はUbuntu16.04 LTS で検証しました。
前提条件
前提条件としてルート("/")のファイルシステムは壊れていないことが前提です。
今回はUbuntu16.04 LTS で以下のデバイス構成でEFI ブートで起動していたものを実際に復旧してみましょう。
/dev/sda1 /boot/efi
/dev/sda2 /boot
/dev/sda3 /
なお、BIOS ブートな環境では/boot/efi
のデバイスがありませんが、基本的にEFI のときと同じ手順で実施可能です。
Live USB の作成
Ubuntu16.04 LTS のデスクトップ版(今回はubuntu-14.04.5-desktop-amd64.iso)をダウンロードしてUSB 等のメディアに焼いてください。本手順は説明を割愛します。
USB をマシンに挿したら、マシンの電源を入れてUSB からUbuntu を起動するようにしてください。
Live USB からUbuntu desktop の起動
Live USB から起動したらTry Ubuntu (without installing) を選択してください。
そこからターミナルを開いてroot ユーザにて作業をしていきます。
$ sudo su -
デバイスのマウント
復旧したいOS がインストールされているデバイスをマウントしていきます。
# mount /dev/sda3 /mnt
# mount /dev/sda2 /mnt/boot
# mount /dev/sda1 /mnt/boot/efi
その他クリティカルな部分もマウントしていきます。
# for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
マウントが完了したらマウントしたディレクトリにchroot で入っていきます。
# chroot /mnt
Linux kernel のインストール
インストールされていたkernel を確認します。
$ dpkg --list | grep linux-image
ii linux-image-4.4.0-116-generic 4.4.0-116.140 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-116-generic 4.4.0-116.140 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
今回再インストールするkernel は4.4.0-116 で行っていきます。
kernel を確認したら/boot 領域を一旦全部削除します。
$ rm -rf /boot/*
// @lunablanca さんのコメントより注釈追記。
// aptの管理外でファイルを削除することになるので、この方法だと、/boot/grub以下に存在する必要な構成ファイル(テーマなど)まで消してしまいます。
// このため、特定のファイルのみ消すか、aptで不要なカーネルなどを削除するようにすべきです。
// もし、それらも削除してしまった場合は、reinstall お願いします。
kernel を再インストールします。
# apt-get install --reinstall linux-image-4.4.0-116-generic
grub ローダをインストールします。
# grub-install --recheck /dev/sda
# update-grub
以上で完了です。
# exit # <- chroot を抜ける
# shutdown -h now
chroot を抜けてシャットダウンして、USB ディスクを抜いてマシンの電源を入れてみましょう。
ubuntu が起動してくるはずです。
参考
-
How do I recreate a wiped /boot filesystem in Ubuntu
-
How can I reinstall GRUB to the EFI partition?