Linuxのパーテーション移動後のGRUBトラブル解決の作業メモ
概要
仮想マシン上で動作するLinuxに新しく開発ソフトウェアを導入しようとしたら、容量が足りなくなりました。そこで内容をコピーした新しいパーテーションから起動しようととしたら、GRUBプロンプトが出て止まりました。久しぶりにGRUBで苦しみましたので、その解決方法のメモを残します。
旧パーテーションから新パーテーションへのコピー
rsyncを活用します。旧パーテションが/dev/sda1、新パーテーションが/dev/sdb1であるとし、新パーテーションはフォーマット済みであることを仮定します。私の場合、150 MB程度しかない/bootパーテーションはカーネル・アップデートのたびに膨らんですぐに溢れますので、この際にルートパーテーション/に統合することにしました。
はじめに、新パーテーション用のマウントポイントを作り、そこに新パーテーションをマウントします。以下は全て管理者アカウント(root)で作業します。
# mkdir /mnt/1
# mount /dev/sdb1 /mnt/1
次に、現在のルートパーテーションの内容を(必要に応じて/bootパーテーションの内容も)新パーテーションにコピーします。現在のパーテーションには/procや/mnt/1がマウントされていて、tarでコピーするのはやや面倒ですが、rsyncならば簡単です。
# rsync -Hax / /mnt/1
# rsync -Hax /boot /mnt/1
# vi /mnt/1/etc/fstab .... fstabを新しい設定で起動できるように修正する
# umount /mnt/1
2行目の/bootパーテーションのコピーで、bootの後にスラッシュ (/) をつけないのがポイントです。rsyncの有名なはまりどころです。そして新しいパーテーションをアンマウントしました。
Linuxを起動可能にする
ここからが本題です。いままでの/dev/sdaを外し、/dev/sdbを/dev/sdaに付け替えます。そして起動すると、パーテーション構成が変わったためにGRUB起動画面で止まります。そこで C キーを押してGRUBプロンプトを出します。そして次のコマンドを入力します。ファイル名やパラメータ hd0, vmlinuz などはTabキーを押すと補完されますので、間違い防止のためにも有効に活用します。もちろんこれらのパラメータは皆様のものに合わせて変更してください。
GRUB> set root=(hd0,1)
GRUB> linux /linuz root=/dev/sda1
GRUB> initrd /initrd.img
GRUB > boot
起動したら、
# grub-mkconfig -o /boot/grub/grub.cfg
を入力して、次回以降は自動で起動できるように修正します。