コミュニティ

Ubuntu でboot ローダを再インストールする

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 ユーザにて作業をしていきます。

rootユーザになる
$ sudo su -

デバイスのマウント

復旧したいOS がインストールされているデバイスをマウントしていきます。

mount
# mount /dev/sda3 /mnt
# mount /dev/sda2 /mnt/boot
# mount /dev/sda1 /mnt/boot/efi

その他クリティカルな部分もマウントしていきます。

/dev/dev/pts/proc/sys/runのマウント
# for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

マウントが完了したらマウントしたディレクトリにchroot で入っていきます。

chroot
# chroot /mnt

Linux kernel のインストール

インストールされていたkernel を確認します。

dpkg
$ 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 領域を一旦全部削除します。

/bootの削除
$ rm -rf /boot/*

// @lunablanca さんのコメントより注釈追記。
// aptの管理外でファイルを削除することになるので、この方法だと、/boot/grub以下に存在する必要な構成ファイル(テーマなど)まで消してしまいます。
// このため、特定のファイルのみ消すか、aptで不要なカーネルなどを削除するようにすべきです。
// もし、それらも削除してしまった場合は、reinstall お願いします。

kernel を再インストールします。

kernelの再インストール
# apt-get install --reinstall linux-image-4.4.0-116-generic

grub ローダをインストールします。

grub-install
# grub-install --recheck /dev/sda
# update-grub

以上で完了です。

# exit      # <- chroot を抜ける
# shutdown -h now

chroot を抜けてシャットダウンして、USB ディスクを抜いてマシンの電源を入れてみましょう。
ubuntu が起動してくるはずです。

参考

TsutomuNakamura
Linux 好きなプログラマです。 コミュニケーションはお気軽にしていただけると幸いです。
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
この記事は以下の記事からリンクされています
コメント

とても有用な記事をありがとうございます。デュアルブートでパーティション構成を変えた場合などよく復旧が必要になるため、助かっています。

一点なのですが、この手順はまずいと思いました。
$ rm -rf /boot/*
aptの管理外でファイルを削除することになりますし、/boot/grub以下に存在する必要な構成ファイル(テーマなど)まで消してしまいreinstallが必要でした。
このため、特定のファイルのみ消すか、aptで不要なカーネルなどを削除するようにすべきかと思います。
参考にしていただければ幸いです。

@lunablanca さん。コメントありがとうございます。
grub 以下に存在する構成ファイルについて、確かに考慮がぬけていました。。
今、手元に検証する環境がなくなってしまっているので、一旦@lunablanca さんの言葉をお借りして、注釈として入れさせていただきたいです。
次、検証する機会に出くわしたときに、コマンドを試して追記したいと考えています:pray:

あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした