web-dev-qa-db-ja.com

GRUBエラー:ファイル '/grub/i386-pc/normal.mod'が見つかりませんか?

最近、Archを(うまくいけば)自分のマシンにインストールしました。再起動すると問題が発生しました。画面に黒い画面が表示されました

Grub loading.
Welcome to GRUB!
error: file '/grub/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>

私はそれ以来グーグルで答えを探しています。 Ubuntuフォーラムで1つ here を見つけようとしていましたが、それは真実ではないというコメントの1つを見ました。別の答えもありますが、混乱を避けるためにライブCDからインストールするかどうかはわかりません。

パーティション設定、コマンド、チュートリアル、システムの問題が頻繁に発生した後、これを設定するのに7時間も費やしてしまったら、私の恐れを理解するでしょう。なんという喜びだ。

グラブを動作させる簡単な解決策を知っている人はいますか?

17
Griffin

本当に迷惑なこと...

明らかにディレクトリ/ boot/grub/i386-pcが適切に配置されていなかったので、/ usr/lib/grub/i386-pc全体を/ boot/grubにコピーすることで問題を解決しました。それで全部です。

cp -r /usr/lib/grub/i386-pc /boot/grub
9
flittermice

私は同様の問題の真っ最中です(偶然にもArchにあります)

不正な「プレフィックス」を使用しているため、Grubはこのファイルを見つけて実行できません

これがあなたのやることです。あなたはGRUBレスキューモードで起動し、それからそれを起動させる方法を理解するだけです。

最初にsetを実行すると、変数が一覧表示されます。

cmdpath=(hd0)
prefix=(hd1,msdos3)/boot/grub
root=hd1,msdos3

ここで、プレフィックスは、grubがnormal.modファイルを検索する変数です。私の場合、hd1、msdos3/ dev/sdb3と同じです(同様に、hd0、msdos1は/ dev/sda1になります)有効なパーティションのリストを表示するには、lsと入力します。

さて、私の場合も、grubは/ boot /としてArchパーティションにマウントされた/ dev/sdb1にインストールされたので、正しいプレフィックスは(hd1、msdos1)/ grub

だから私が起動するには、これを行う必要があります:

set prefix=(hd1,msdos1)/grub
insmod normal
normal

あなたの場合、grubをインストールしたパーティションを覚えるか推測する必要があります。あなたは間違っていると思うかもしれませんが、害はありません。insmodコマンドは単に失敗し、別のパーティションで再試行できます。

この後、grubは通常どおりロードされ、起動したいものをリストから選択できます。通常、このような混乱が発生した場合、grubをmbrに再インストールすると(grub-installを使用して)永久に修正されるため、これを実行する必要はありません起動するたびに。しかし、私は かなりの困難 修正がこれほど簡単ではない場合に何をすべきかを見つけています(または私はあなたがすべきことを共有します)。

これが失敗した場合のみ(たとえば、プレフィックスは正しいが起動できない場合)、問題を回避するためにライブCDまたはレスキューCDを使用する必要があります(回避するのが最善です)。

8
Cestarian

Mint 15を新しくインストールした後、この問題が発生しました。

インストーラーが作成した/boot/grub/x86_64-efiモジュールですが、通常ではありません/boot/grub/i386-pcモジュール。

Live CDからGrubを再インストールすると、問題が修正されました。

/ dev/sda/ dev/sda1をブートデバイスとブートパーティションに置き換え、Live CDから次のコマンドを実行します。

Sudo mount /dev/sda1 /mnt
Sudo grub-install --boot-directory=/mnt /dev/sda
Sudo reboot
6
jamesallman

投稿ありがとうございます。 Windows Vistaを搭載した古いDell OptiplexコンピュータにLinux CentOS 5.11を新しくインストールした後、ほぼ同じエラーメッセージ「ファイル '/grub2/i386-pc/normal.mod'が見つかりません」を解決して、デュアルを作成しました-bootシステム。

私の状況を複雑にしたのは、FedoraのデフォルトパーティションにGRUB(LEGACY)ではなくGRUB2を使用する新しいFedora 20ディストリビューションをインストールしようとして失敗したことです。次に、その上にCentOSを直接インストールして、Windowsパーティションを保持し、Fedoraパーティションを上書きしようとしました。

CentOSのインストール中、最初の(Windows)パーティション(hd0,0)はそのままにして、2番目の(boot)パーティション(hd0,1)に/ bootディレクトリを作成しました。次に、その時点でMBRを変更しないことを選択し、代わりに他のオプション(別のパーティションのブートローダー)を選択しました。

インストールが成功したように見えた後、再起動して上記のエラーが発生しました。

最初のパーティションのブート情報がGRUB2の場所をポイントし続けていると思います。以前に作成されたFedora00パーティションが削除されたためか、CPUがnormal.modを見つけることができませんでした。

これが私のステップです:

  1. Centos 5インストールCDからレスキューモード( "linux rescue")で起動します。

  2. ローカルドライブをマウントします。chroot/mnt/sysimage

  3. シングルユーザーモードに切り替えます:su

  4. CentOSインストールを更新します。yumupdate

  5. Emacsエディターを使用して、「Microsoft Windows Vista」をgrub.confファイルに追加します:emacs/boot/grub/grub.conf。VistaをデフォルトのOSにします。

    注:www.cyberciti.biz/faq/grubconf-for-windows-Vista-or-xp-dual-boot/および https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/sn-medialess-editing-grub-conf.html

  6. MBRを更新しようとします:grub-install/dev/hda

  7. 「GRUB」を表示した後にCPUがハングする、不明なGRUBエラーで再起動します。

  8. 元のWindows Vistaインストールディスク(または他のWindows回復ディスク)から再起動し、ディスクを修復するオプションを選択します。 MBRが修復されたというメッセージを受け取ります。

  9. Windows Vistaで正しく再起動します。

よりエレガントなソリューションが存在することは確かですが、これは私にとってはうまくいきました。 http://help.ubuntu.com/community/Grub2/Upgrading で説明されているように、GRUBからGRUB2への移行パッケージをダウンロードすることも試みました。

$ yum install grub-pc

しかし、パッケージを見つけることができませんでした。たぶん私はyum install grubを試してみるべきだったのかもしれません。

1
dkergyl

Ubuntuを再インストールします。 「何か他のことをする」に進みます。ブートローダーをインストールする場所として、Windowsインストールパーティションを選択します。

既存のWindowsインストールがある場合は、同じパーティションにgrubをインストールする必要があります。そうしないと、質問で問題が発生します。

これは、14、15、16、17 Ubuntuのすべてのバージョン、およびおそらく以前のバージョンに関係します。ブートローダーをインストールする場所を尋ねられたら、/ bootパーティションを作成して選択しないでください。代わりに、Windowsパーティションを使用してください。

ありがとうございました。

0
Wolfpack'08

私のCentOS 6.7システムには2つの段階があります。まず、上記のflittermiceのアドバイスに従い、ライブCDから起動し、/ dev/sda2を/ mntとしてマウントし、i386-pcフォルダーを/ mnt/usr/...からコピーしました(どこにあるかを見つけることができます)沿って find /|grep i386)を/ boot/grubに追加して再起動します。

これにより、grub rescue>の代わりにgrub>が得られました> ;-)。

その後、私はここでガイドに従いました[ https://www.linux.com/learn/tutorials/776643-how-to-rescue-a-non-booting-grub-2-on-linux/] パーティションを見つけて起動します。 (hd0,1)がスワップによって取得されたため、(hd0,2)でした。

後で、おそらく/ bootがinodeサイズ256のext4上にあり、古いgrub1が128を必要とするため、このブートを「自動」にすることは不可能であることを理解しました。[ http://kb.kristianreese.com/index.php?View=entry&EntryID=113] インストール前にパーティションを準備します。

0

Flittermiceに追加しています...

uSBから起動し、i386フォルダーがある場合、壊れたパーティションのi386フォルダーをルートとして開き、USBから作業中のi386フォルダーをコピーできます。

ライブgrub cdを試してください: http://ccm.net/faq/2677-super-grub-disk-live-cd 次に、ターミナル:cp -r/usr/lib/grub/i386- pc/boot/grubだけがこの方法でうまくいきました。

0