web-dev-qa-db-ja.com

Grub2が2つのWindows 7(ローダー)エントリを検出

これは、私がUbuntuコミュニティに聞いた最初の質問です。

私はUbuntuにはかなり慣れていませんが、基本を理解し、ターミナルの操作方法を知っています。また、助けを求める前に既存のソリューションを検索する方法も知っています。私はインターネットの高低を精査し、Grub2がどのように機能するかについて多くを学びました。しかし、私の問題を解決する助けにはなりませんでした。

私の問題はこれです。3台のハードドライブを搭載したコンピューターがあります。以前はWindows XPでしたが、Windows 7にアップグレードしました。Ubuntu12.04 LTS(Precise Pangolin)もインストールしました。

Windows 7のインストール中にエラーが発生したため、インストールを再開する必要がありました。その後、Ubuntuをインストールしました。 XP OS(Ubuntuは自動検出しましたが、Windows 7ではありません)のすべてのトレースを削除するのに苦労した後、2つのOSが問題なく動作するようになりました。または、ほとんど。

起動時に、Grub2はUbuntu、Ubuntu Recovery Mode、Linuxのその他のバージョン、memtestを表示し、その後にWindows 7 (loader) on /dev/sda1およびWindows 7 (loader) on /dev/sdb1が表示されていました。

最終的に、リカバリモード、その他のバージョン、Memtestを削除しました。今、私が実行すると:

Sudo update-grub

私はこの印刷物を得ます:

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-26-generic
Found initrd image: /boot/initrd.img-3.2.0-26-generic
Found Windows 7 (loader) on /dev/sda1
Found Windows 7 (loader) on /dev/sdb1

「/ dev/sda1上のWindows 7(ローダー)」は削除する必要があります。これは存在しないはずの壊れたエントリであり、最初のWindows 7の試行中にインストールされている必要があります。

/etc/grub.dフォルダにWindows 7エントリが見つかりません。また、どこを探すべきかわかりません。

ハードドライブのレイアウトは次のとおりです。

/dev/sda1/ (1.82 TiB), NTFS ("Media")

/dev/sdb1/ (100 Mib), NTFS ("System Reserved")
/dev/sdb2/ (149 GiB), NTFS ("Windows 7")
/dev/sdb3/ (149 GiB), Extended (" ")
    /dev/sdb4/ (145 GiB), ext4 (" ")
    /dev/sdb5/ (4 GiB), linux-swap (" ")

/dev/sdc1/ (488.28 GiB), NTFS ("Downloads")
/dev/sdc2/ (488.28 GiB), NTFS ("AltMedia") 
/dev/sdc3/ (886.45 GiB), NTFS ("Personal")
unallocated (2.09 MiB), unallocated

何が起こったと思いますか:Windows 7が最初にインストールされ、ひどくインストールされました。再度インストールしました。最初に、ブートローダーの行き先をガイドするWindows XPがあり、/dev/sdb1/に置かれました。しかし、2回目はそのようなガイドが存在しなかったため、マシンは/dev/sda1/に別のブートローダーを配置しました。ちなみに、sda1は2TBドライブ上の唯一のパーティションです。 geditによると、ブートレコードパーティションは存在しないようです。 Grub2がこの情報をどこから取得しているかはわかりません。しかし、そこにあります。

誰かが私を助けるためにできることはありますか?または、追加する必要のある情報はありますか?

6
jwarner112

Sdaが外付けドライブの場合の迅速な解決策

/dev/sdaハードドライブが内部ドライブであるか外部ドライブであるかはわかりません。外部ドライブの場合は、update-grub2コマンドを実行する前に外部ドライブを取り外してください。これはすぐに役立つはずです。

解決:

/dev/sda1ドライブをマウントします。 (これは非常に簡単にできると思います)。次に、そのドライブでBootという名前のフォルダーとbootmgrという名前のファイルを探します。フォルダーとファイルの両方を削除します。次に、update-grub2コマンドを再度実行します。

Grub2を再度インストールすることもできます。 Ubuntuのインストールが/dev/sdbにあるのを見ると、コマンドは

Sudo grub-install /dev/sdb
Sudo update-grub 

問題の原因は何ですか:

Grub2は、Windowsエントリを検出するためにWindowsブートファイルを探します。 Windows 7を削除しても、Windows 7のブートファイルは削除されません( "Boot"フォルダーと "bootmgr"ファイル)。また、Windows 7のブートファイルがあるため、grub2はWindows 7のインストールもあると単純に想定しています。したがって、デュアルエントリ。

8
Anwar

/boot/grub/grub.cfg内で探しているものを見つける必要があります。このファイルは、update-grub2によって動的に生成されます。 Ubuntu 32ビットと64ビットをデュアルブートしています。削除したい場合は、このファイルからそのセクションを削除するだけです。これが私のエントリの1つがどのように見えるかです-

menuentry 'Ubuntu, with Linux 3.2.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos2)'
    search --no-floppy --fs-uuid --set=root 94916094-afe9-4b74-9413-a3c54b39eb91
    linux   /boot/vmlinuz-3.2.0-23-generic root=UUID=94916094-afe9-4b74-9413-a3c54b39eb91 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-23-generic
}

変更はすぐに有効になるはずなので、バックアップを作成して注意してください。また、update-grub2を再度実行すると、このファイルで変更した内容は完全に上書きされます。

1
Sepero