GRUBを飛ばしてしまいシステムが起動しなくなったときの救出方法

(Last Updated On: 2011年12月21日)

GRUB のアップデートをした後や,Linux のインストール直後にGRUB Error が出てシステムが起動しないことがあります.そんなときの対処法を書いておきます.
なお,GRUBの設定ファイルは,GRUB2では/boot/grub/menu.lst が廃止され,/etc/default/grub# grub-install を実行したあとに生成される/boot/grub/grub.cfg になったようです.

まず,システムをLiveCDから起動するか,母艦のUSBにレスキューしたいハードディスクを繋ぎます.
/boot パーティションが/ と分けられている場合は別途mount してあげる必要がありますが,流れは全く同じです.
パーティションのUUIDは$ blkid で調べられます.よく分からなければgparted を使うといいかもしれません.
今回は/media/UUID に自動でmount されていることを仮定しています.

母艦の/ /boot と,レスキュー対象の/ /boot を混同しないように気を付けましょう.

# /boot パーティションのUUID./ 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
BOOT_UUID=0e0670da-9711-4eab-8025-b26dba90d576

# 救出先システム上 / のUUID
SYS_UUID=21427729-aef2-4a52-8d28-d6e90804c659

sudo mount --bind /proc /media/${SYS_UUID}/proc
sudo mount --bind /sys /media/${SYS_UUID}/sys
sudo mount --bind /dev /media/${SYS_UUID}/dev
# / 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
sudo mount --bind /media/${BOOT_UUID} /media/${SYS_UUID}/boot

sudo chroot /media/${SYS_UUID}
# たとえば/dev/sdeに grub をインストールしたい時
grub-install /dev/sde
update-grub
exit

sudo umount /media/${SYS_UUID}/proc
sudo umount /media/${SYS_UUID}/sys
sudo umount /media/${SYS_UUID}/dev
# / 上に/boot がある(救出先のシステムで/boot を切り分けてない)なら省略
sudo umount /media/${SYS_UUID}/boot

/media/${SYS_UUID}chroot を設定し,# update-grub を実行しています.
ただし,その為には(CHROOT_DIR 下に)/proc/sys/dev が必要なので,動いているシステムのものをそのままmount しています.ですので,LiveCDから起動した方がより堅実かもしれません ((そこまで気にすることもないと思いますが,AMD64の環境をIA-32のシステムでmount したらどうなるのだろう・・・試してないので分かりません)).
mount--bind オプションは,chroot 下でもmount 先にアクセスできるようにするためのものです.

コメントを残す

メールアドレスが公開されることはありません。