web-dev-qa-db-ja.com

/ 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)と同じパーティションにある場合にのみ失敗します。

Ubuntu13.04とFedora19の両方で、上記のスクリプトの多くのバリエーションを試しましたが、まだfile '/boot/grub/i386-pc/normal.mod' not foundエラーを回避していません。

他のアイデアはありますか?

3
Ross Smith II

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

6
Jonathan Callen

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

次に、ls(hdX、Y)/ usr/lib/grub/i386-pc

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

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

3
johnshen64

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

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.cfgをロードでき、OSを起動できるはずです。起動したらgrub-installを実行してcore.imgを再生成します(これは埋め込まれます)ディスクのMBR内)に新しいプレフィックスを付けます。

彼らの(ひどい) ドキュメント の詳細情報。

0
user67289