/boot を新しいパーティションに移動すると、次のエラーが発生します: ファイル '/boot/grub/i386-pc/normal.mod' が見つかりません

/boot を新しいパーティションに移動すると、次のエラーが発生します: ファイル '/boot/grub/i386-pc/normal.mod' が見つかりません

フォルダーをパーティション/bootから に移動しようとしています。次のスクリプト://dev/sdb

parted -s /dev/sdb mklabel msdos mkpart primary ext2 1M 100% set 1 boot on
mkfs.ext2 /dev/sdb1
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
cd /boot
find . -depth -print0 | \
    cpio --null --sparse --make-directories --pass-through --verbose /mnt/boot
cd /
umount /mnt/boot
mv /boot /boot.orig
mkdir /boot
echo "/dev/sdb1 /boot ext2 ro 0 2" >>/etc/fstab
mount /dev/sdb1 /boot
parted /dev/sda set 1 boot off
grub-install /dev/sdb
update-grub
reboot

次のエラーが発生します:

error: file '/boot/grub/i386-pc/normal.mod' not found.
grub rescue>

何か案は?

編集/boot: 元のディレクトリが別のパーティション ( など) にある場合、上記のスクリプトは正常に動作するようです。パーティション ( )/dev/sda2と同じパーティションにある場合にのみ失敗します。//dev/sda1

私は、Ubuntu 13.04 と Fedora 19 の両方で、上記のスクリプトのさまざまなバリエーションを試しましたが、まだfile '/boot/grub/i386-pc/normal.mod' not foundエラーを回避できません。

他に何かアイデアはありますか?

答え1

問題は、grubが探しているもの/boot/grub/i386-pc/normal.mod 新しいパーティションに。そのパーティションのルートが にマウントされたため/boot、ファイルは現在、/grub/i386-pc/normal.mod新しいパーティションの にあります。grubそのパーティションに再インストールするか、一時的な対策として を呼び出してシンボリックリンクを作成しln -s . /boot/boot、どちらの名前でもファイルを見つけられるようにする必要があります。

答え2

「ls」を実行して、ブート パーティション (つまり新しいパーティション) (hdX,Y) を見つけます。

次にls (hdX,Y)/usr/lib/grub/i386-pcを実行します。

そこにファイルがありますか?

おそらく、レスキュー CD または USB で起動し、GRUB を再インストールする必要があります。何かが壊れています。

答え3

これは、イメージprefixにハードコードされている変数がパーティション レイアウトと一致しなくなったために発生します。レスキュー シェルで次のコマンドを実行すると、この変数を一時的に手動で上書きし、GRUB を一度ロードできます。core.imggrub-install

set prefix=(hd0,1)/boot/grub
insmod normal
normal

プレフィックスは、GRUB のファイル (grub.cfg など) が存在する場所へのパスである必要があります。これは通常、(hdX,Y)/boot/grub単一のルート パーティションの場合、または(hdX,Y)/grub専用パーティションがある場合のようになります/boot。mdadm 管理の RAID の場合、はhdX,Yおそらくmd/xxxまたは になりますmduuid/xxxx...

すべてがうまくいけば、GRUB はモジュールをロードしてgrub.cfgOS を起動できるはずです。起動したら、 を実行して、新しいプレフィックスで (ディスクの MBR に埋め込まれます)grub-installを再生成します。core.img

詳細は(ひどい)ドキュメンテーション

関連情報