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-d6e90804c659sudo 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}/bootsudo chroot /media/${SYS_UUID}
# たとえば/dev/sdeに grub をインストールしたい時
grub-install /dev/sde
update-grub
exitsudo 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 先にアクセスできるようにするためのものです.