/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

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

答え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/xxxmduuid/xxxx...

すべてが順調に進んでいる場合は、GRUBはモジュールをロードしてロードでき、オペレーティングシステムをgrub.cfg起動できる必要があります。起動後、grub-install新しいプレフィックスcore.img(ディスクのMBRに組み込まれる)を使用してRebuildを実行します。

彼らの(恐ろしい)の詳細文書

関連情報