web-dev-qa-db-ja.com

GRUB "no such device"エラーのため、Linuxインストールが起動しません

知っていることをすべて使い果たしたと思うので、フレアを送ります。すべてを(バラバラにではありますが)カバーするように努めますので、しばらくお待ちください。

以前Ubuntu10.10を使用していた場所にLinuxMint11をインストールすることにしました。このインストールの前に、私はWindows XPのパーティションを持っていました。これは、遠い昔に、デュアルブートしていたものです。このインストールでパーティションを削除しました。

インストール後、システムは起動に失敗します。 CD/DVDのチェック後、次のように印刷されます。

error: no such device: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
GRUB rescue>

Ubuntuの起動に問題はありませんでした。前回Ubuntuに(アップグレードではなく)インストールしたときに、同様の問題を思い出したようです。しばらく経ちましたが、XP CDからFIXMBRおよび/またはFIXBOOTを使用して修正したと思いました。今回は機能しませんでした。

GRUB rescue>プロンプトが壊れているようです。 helpでさえ機能しません。 lsを実行できます。これにより、次の結果が得られます。

GRUB rescue> ls
(hd0) (hd0,msdos1) (hd1) (hd1,msdos1) (hd2) (hd2,msdos5) (hd2,msdos3) (hd2,msdos2) (hd2,msdos1)

さらに、私はこのデバイスが何であるかを知りません。 /dev/disk/by-uuidの下に一致するUUIDが見つかりません。さらに言えば、起動するハードドライブ用のUUIDはありません(sda、以下)。私のセットアップはフランケンボックスです。このような組み合わせでデバイスの列挙に依存しないことは知っていますが、簡単に説明できるように以下に示します。

  • Ch 0マスター:250GB PATA(sda)
    • sda1
  • Ch 0スレーブ:なし
  • Ch 1マスター:80GB SATA(sdb)
    • sdb1:/
    • sdb2:/ home
    • sdb3:スワップ
  • Ch 1スレーブ:DVD SATA
  • SATA拡張カード:250GB SATA(sdc)
    • sdc1

Sdaで長引く(そして混乱する)RAIDメタデータを発見したとき、私は金を打ったと思いました。ドライブは以前はLinuxインストールに表示されていませんでしたが、dmraid -r -E /dev/sdaを使用した後に表示されました。ただし、起動の失敗は続きました。

今までは、MintインストールCDを使用して「ローカルドライブから起動」することができました。これにより、実際にsdb1へのインストールに移動しました。 CDを使用してドライブを起動し、以下を実行した後、ドライブを起動する代わりにGRUB>プロンプトを表示することで問題が悪化しました。

# GRUB-install --no-floppy /dev/sdb1
# update-GRUB
GRUB> find /boot/GRUB/stage1
GRUB> root (hd1,0) # result of above
GRUB> setup (hd0)

3つのパーティションを持つsdbは、(hd2)プロンプトではGRUB rescue>のように見えますが、実際に起動すると(hd1)になるため、間違いなく不一致があります。ただし、UUIDを使用したことがある場合(そして使用していると思います)、これは問題にはなりません。ライブCDを使用すると、sdb1:/boot/GRUB/menu.listに含まれていることがわかります。

# kopt=root=UUID=[UUID of sdb1]
...
# groot=[UUID of sdb1]

根本的な問題は、私が理解しているように、GRUBは、何らかの理由で、存在しないデバイスを起動しようとしていることです。方法がわかりません。与えられたUUIDによって何を探しているのかを判断します。sdaには何のUUIDも表示されません。

そして今、私はCDを使ってドライブを起動することさえできません。

更新:

/bootパーティションをMBRと同じドライブに配置すると役立つと思ったので、sda2を追加し、bootフラグを設定して、再インストールしました(これはおそらくやり過ぎです)。

再びgrub rescue>プロンプトが表示されますが、lsを実行すると、

grub rescue> ls
(hd0) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1) (hd2) (hd2,msdos3) (hd2,msdos2) (hd2,msdos1)

したがって、このプロンプトでは、sdbは(hd1)よりもsdaは(hd0)ではありません。なぜそれがそれほどずれているのか、なぜそれが重要なのかはわかりません。 sdc /(hd0)に/bootを付けて、もう一度やり直してください。

2
nshew

解決策は、GRUBローダー(MBR?)を正しいドライブに配置することでした。この場合、Linuxに/ dev/sdcとしてロードされ、(hd2)がGRUBに(hd0)としてロードされたもの。

2
nshew

ブートローダーでUUIDとマークされていないために同じエラーが発生し、 この男 はgrubリカバリモードで これらの使用可能なコマンド と一緒に答えを持っていました。

基本的に最初に、通常/ boot/grubにあるgrubメニューファイルがあるドライブとパーティションを特定する必要があります。

ls [to identify your drive and partition options]
ls (hdx,p)/ [to identify which partition has the /boot folder]

次に、上記で見つけたドライブとパーティションから手動でブートメニューをロードできます。

set prefix="(hdx,p)/boot/grub"
set root="(hdx,p)"
insmod normal
normal

私の場合、ブートドライブのUUIDを手動で意図的に変更し、grubメニューとfstabを更新しましたが、新しいブートローダーをロードして、ブートローダーのUUIDやドライブを更新するのを忘れました。次に、ドライブはgrubで期待される順序ではなく、上記ですべてが処理されました。メニューが戻ってきたので、戻ってブートローダーを新しいUUID情報で更新できました

4
Damon