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

を入力して、次回以降は自動で起動できるように修正します。

作成日: 20th August 2018