GRUBを修復するにはどうすればよいですか?(Windowsのインストール後にUbuntuを元に戻す方法は?)


344

Ubuntuのブートファイルを食べたWindows 7をインストールしました。コンピューターを起動すると、Ubuntuを起動するオプションを表示せずに、Windowsに直接移動します。

Ubuntuを元に戻すにはどうすればよいですか?


私はそれが一般的なタスクだと思います、私は2台のHDDとUbuntu + Windowsも持っています。正しい方法で修理できるといいのですが。このチュートリアルに従っください。ご質問は、私に聞いてください!
antivirtel

1
関連(GRUBが間違ったドライブのMBRにインストールされた場合):ubuntuをインストールした後の
エリアカガン

はい、できます。通常のブートを実行してWindowsでインストールするだけで、コンピューターの起動時にGrubブートメニューに表示されます。
Rampoo1208

これが古いスレッドであることは知っていますが、BIOSのブートモードをUEFIからレガシーに変更することで問題を修正しました。

1
注:受け入れられる答えは、grubの修復方法に関する一般的な指示です。また、GRUBがインストーラーによって誤って書き込まれた(ユビキタス)さまざまな状況にも適用できます。
ダナテラ

回答:


348

Windowsをインストールすると、Windowsは、それがマシン上の唯一のオペレーティングシステム(OS)であるか、少なくともLinuxを考慮しないと想定します。そのため、GRUBを独自のブートローダーに置き換えます。必要なことは、WindowsブートローダーをGRUBに置き換えることです。GRUBコマンドなどをいじってGRUBを置き換えるためのさまざまな指示を見てきましたが、私にとって最も簡単な方法は、単にchrootインストールして実行することupdate-grubです。chrootこれは、あちこちに物事をリダイレクトしようとする代わりに、実際のインストールに取り組むことができるので素晴らしいです。本当にきれいです。

方法は次のとおりです。

  1. 「Try Ubuntu」モードで、ライブCDまたはライブUSBから起動します。
  2. メインパーティションのパーティション番号を決定します。sudo fdisk -lsudo blkidまたはGParted(デフォルトでライブセッションに既にインストールされているはずです)がここで役立ちます。私はそれがだ、この答えに仮定するつもりです/dev/sda2が、お使いのシステムのための正しいパーティション番号を使用してください!

    メインパーティションがLVMにある場合、デバイスは代わりにに配置されます/dev/mapper/。ほとんどの/dev/mapper/{volume}--{os}-root場合{volume}、LVMボリューム名と{os}オペレーティングシステムです。ls /dev/mapper正確な名前で実行します。

  3. パーティションをマウントします。

    sudo mount /dev/sda2 /mnt  #Replace sda2 with the partition from step 2
    

    別の/boot/varまたは/usrパーティションがある場合は、手順2と3を繰り返して/mnt/boot、これらのパーティションを、/mnt/varおよびに/mnt/usrそれぞれマウントします。例えば、

    sudo mount /dev/sdXW /mnt/boot
    sudo mount /dev/sdXY /mnt/var
    sudo mount /dev/sdXZ /mnt/usr
    

    交換sdXWsdXYおよびsdXZそれぞれのパーティション番号を持ちます。

  4. 他の必要なものをバインドマウントします。

    for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
    
  5. UbuntuがEFIモードでインストールされている場合(不明な場合はこの回答を参照してください)、sudo fdisk -l | grep -i efiまたはGPartedを使用してEFIパーティションを見つけます。のラベルが付けられEFIます。このパーティションをマウントsdXYし、システムの実際のパーティション番号に置き換えます。

    sudo mount /dev/sdXY /mnt/boot/efi
    
  6. chroot Ubuntuのインストールに:

    sudo chroot /mnt
    
  7. この時点で、ライブセッションではなくインストールを実行しており、rootとして実行しています。GRUBを更新します。

    update-grub
    

    エラーが発生した場合、または手順7に進んでも問題が解決しない場合は、手順8に進みます(それ以外の場合はオプションです)。

  8. 状況に応じて、grubを再インストールする必要があります。

    grub-install /dev/sda
    update-grub # In order to find and add windows to grub menu.
    
  9. UbuntuがEFIモードでインストールされていて、EFIパーティションのUUIDが変更されている場合は、で更新する必要があります/etc/fstab。比較してください:

    blkid | grep -i efi
    grep -i efi /etc/fstab
    

    現在のEFIパーティションのUUID(from blkid)がのものと異なる場合、現在のUUID /etc/fstabで更新/etc/fstabします。

  10. すべてがエラーなく動作した場合、すべての設定は完了です。

    exit
    sudo reboot
    
  11. この時点で、正常に起動できるはずです。

正常に起動できず、エラーメッセージがなかったために手順8を実行しなかった場合は、手順8で再試行します。

  • GRUB2にパーティションの正しい構成を与えるだけでは不十分な場合があり、実際にマスターブートレコードにインストール(または再インストール)する必要があります(ステップ8を参照)。チャットでユーザーを支援した経験から、エラーメッセージが表示されない場合でも手順8が必要になることがあることが示されています。

1
コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
トーマスウォード

WindowsをプライマリブートOSにしたいのです。これはまだ正しい修正ですか?起動するOSを選択するにはどうすればよいですか?F11?
ジェフ

1
@ScottSeveranceあなたのプロフィールから、DFWに住んでいることがわかりました。Linuxを深く理解するために、クラスやライブチュートリアルを提供することを検討しましたか?
モハメッドジョレイド

1
これらの問題は古くなりません:D – EFIを扱う場合、インストールが必要になる場合がありgrub-efi-amd64ますgrub-install --uefi-secure-boot。セキュアブートを使用する場合は、使用することをお勧めします。これは、superuser.com
a / 376471/197980

1
このソリューションは、BIOSを搭載したコンピューター(つまりUEFIではない)上のWindows 10にも適用できます。あなたが持っているものについての質問は、このヒント-thewindowsclub.com/check-if-uefi-or-biosで答えることができます。
okolnost

115

Windowsインストーラーは、システム内の他のOSを気にしません。そのため、マスターブートレコードに独自のコードを書き込みます。幸いなことに、ソリューションも簡単です。

MBRを修復する必要があります。以下をせよ

UbuntuのライブUSB / CDを使用して起動します。boot-repair問題を修正するために使用します。

ライブusb / cdで起動した後、ターミナルで次のコマンドを実行します。

sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

を使用しRecomended Repairます。

ここに画像の説明を入力してください

詳細-https ://help.ubuntu.com/community/Boot-Repair


2
マイクロソフトの人々が意図的に言っているのですか?? また、デュアルブートはWindows 7でも機能したため、「Windowsインストーラーはシステム内の他のOSを気にしない」という最初の行と矛盾しません。
シャグンソダーニ

Windowsブレイクは常に非常に一般的な問題であり、1つのアイブは自分自身に対処しなければなりませんでした。答えはまだ良好であり、問​​題を解決するはずです。
ダミアン

6
まずWindows 7をインストールしてから、Linuxをインストールしました。したがって、LinuxはWindowsが認識したLinuxではなくWindowsを認識します。windows7を再インストールしてみてください、私が意味するものが表示されます。
Web-E

暗号化されたパーティション(luks)がある場合はこれを行わないでください。また、apt-getを使用してGRUBを再インストールします。なぜそれを行うのかわかりません。
蒙恬

1
ブート修復はレガシーモードを非常によくサポートしています。おそらく、ライブcd / usbもレガシーモードで起動する必要があります@fuzzyanalysis :)
Web-E

25

ライブのUbuntu USBペンドライブまたはCDから起動し、
次の手順でubuntuにBoot-Repairをインストールします

ターミナルを開き、次のコマンドを実行します

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair

インストールが完了したら、Gnomeを使用する場合は[システム]-> [管理]-> [ブート修復]メニューから起動できます。Unityを使用する場合はダッシュで「ブート修復」を検索できます。次に、次のスクリーンショットに従います。

方法1

  • 詳細オプションをクリックします

初期画面

  • 以下に示すオプションにチェックマークを付けます

高度なオプション

  • タブを[Grub Location]タブに変更し、図に示されているオプションにチェックマークを付けます。

ここに画像の説明を入力してください

[適用]を押してシステムを再起動します

方法2

  • 最初のスクリーンショットに示すように、推奨されるブート修復オプションを選択します

ドキュメンテーション :


Web-Eはすでにこの答えを出しています。代わりにそれを改善するかもしれませんか?なぜ機能しなかったのかについてコメントを残しました。
ダンダスカレスク

2
この方法は、Windows 10の更新がGRUBを上書きして、独自のブートローダーを破壊するという特に厄介なケースの後に機能しました。この手順に従うと、WindowsとLinuxの両方が復活しました。私の場合、それはLinux Mint 18.1であり、ブート修復メニューは少し異なって見えましたが、すべて正常に機能しました。ありがとう!
-TheBigH

11

easyBCDWindows 7にインストールして

新規エントリの追加> Linux / BSD>(選択)Grub2>(プッシュ)エントリの追加

次に、Windows 7ブートローダーでUbuntuを選択して、Grub2(以前のブートローダー)に移動します。


3
これらの手順だけではGrubブートローダーは復元されません。試してみると、Windowsに追加のブートオプションが追加され、選択時にマシンが再起動され、grub>プロンプトが表示されます。そのため、次に何をすべきかについて、さらなる手順が必要になります。
therobyouknow 14年

1
easyBCDを使用すると、WindowsブートローダーとBIOSの両方に表示されるブートオプションを追加および削除できましたが、easyBCDはLinuxパーティションを見つけるために何らかの自動マジックに依存しているため、機能しませんでした... Linuxパーティションでは機能しませんでした別のハードドライブにありました。
ファジー分析

7

EFIベースのシステム(Windows 8以降に同梱されているほとんどのシステムなど)では、Windowsはブートローダーを更新するか、デフォルトのブートローダーにリセットすることがあります。これは、OSを再インストールするとき、または主要なシステムアップデート(たとえば、最新のWindowsリリースへのアップグレード)を実行するときに特に一般的です。WindowsがEFIベースのコンピューター上のGRUBファイルを実際に消去する可能性は低いことに注意してください。Ubuntuを起動するために必要なものはすべてそのままです。バイパスされているだけです。これらの場合、GRUBの完全な再インストールは過剰であり、実際、新しい問題を引き起こす可能性が(わずかに)あります。

したがって、これらの場合にGRUBを再インストールする代わりに、GRUB(または任意のブートローダーまたはブートマネージャー)をデフォルトにリセットすることをお勧めします。これを行うには、いくつかの方法があります。

  • EasyUEFI-システムがWindowsから直接起動する場合、起動順序を調整する最も簡単な方法は、EasyUEFIを使用することです。EasyUEFIは、EFI起動順序を管理するための無料の(基本バージョン用)サードパーティGUIツールです。それはかなり自明です- ubuntuブートオプションのリストでエントリを見つけ、リストの一番上に移動します。次回の再起動時に、GRUBが起動するはずです。(GRUB以外のものを使用する場合は、そのエントリを見つける必要があります。)
  • bcdedit-Windows bcdeditツールを使用して、GRUBをデフォルトのブート順序に設定できます。管理者コマンドプロンプトウィンドウbcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efiに入力されたコマンドは、これを行います。ただし、コンピューターがセキュアブートをアクティブにして起動する場合は、代わりに必要になります。実際、後者のコマンドは通常、セキュアブートが使用されていなくても機能するため、最初にそのコマンドを使用します。高度なWindowsシェルツールがあり、これまでに説明したものとは少し異なる構文が必要ですが、詳細は思い出せません。bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
  • Ubuntuの1回限りの起動 -ほとんどのEFIには、システム起動プロセスの早い段階でファンクションキー、Esc、またはEnterを押すことでアクセスできる組み込みのブートマネージャーがあります。ubuntuUbuntuを起動するエントリは、この起動マネージャーメニューに表示され、Ubuntuを起動できる可能性があります。あるいは、インストーラーが「インストールする前に試す」モードで起動したような、Ubuntu緊急メディアから起動することもできます。どちらの方法でもefibootmgr、起動順序を調整するために使用できます。
    1. 入力sudo efibootmgrしてブートエントリを表示します。
    2. 現在のBootOrder行に注意してください。
    3. のエントリを見つけて、ubuntuそのBoot####番号を書き留めます。
    4. 入力sudo efibootmgr -o xxxx[,yyyy,zzzz,....]してブート順序を変更し、xxxxUbuntuの番号を作成します。Windowsがリストにない場合は、起動順序の先頭に自分自身を追加する可能性が高いように見えますが、その後に続くことはほとんど重要ではありません。したがって、おそらくWindowsがリストにあることを確認する必要があります。リストの順序を変更して、すべての元のエントリがubuntuリストの一番上に移動するようにするのが最も安全です。
  • ファームウェアセットアップユーティリティ -一部のEFIのセットアップユーティリティを使用すると、起動順序を調整できます。詳細はEFIごとに大きく異なるため、詳細は説明しませんが、セットアップユーティリティでそのようなオプションを探すことができます。

これらの手順にbcfgは、EFIシェルでの使用bless、macOSでの使用、rEFIndを使用した1回限りの起動など、他のバリアントがあります。ただし、EasyUEFIから始めます。最も簡単なソリューションになる可能性があります。ただし、Windowsは起動するたびにデフォルトに設定することを要求する場合があり、bcdeditその問題を処理する上でより良い仕事をする可能性があるとレポートが示しています。

上記のいずれもBIOSモードのインストールには適用されないことに注意してください。ただし、Windows 8以降に同梱されているほとんどのコンピューターはEFIモードで起動するため、BIOSモードのインストールはますます少なくなっているため、多くの場合、GRUBを盲目的に再インストールするよりも、EFIの方法で問題を処理する方が適切です。


1
EFIビルドインブートマネージャーを使用efibootmgrして手動でlinux(私の場合はfedora28)を1回ブートすると、win10が台無しになったブート順(Rod-> thanks!更新。その後、更新前のGRUB-bootmanagerが表示されるため、提供されたソリューションが機能していることを確認できます。EasyUEFIの基本バージョンは見つかりませんでしたが、提供されている非フリーのプロバージョンの試用版のみが見つかりました。
antiplex

5

より簡単なソリューションがあります:

  1. 再起動して、コンピューターのBIOSオプション(F2、またはF11)を入力します。
  2. 行くブートメニュー、および選択起動デバイスの優先順位を
  3. Windowsブートマネージャーがメインブートドライブ(通常はSATA HDD…またはIDE HDD…)の上にあるかどうかを確認します。その場合は、ブートディスクの優先順位をWindowsブートマネージャーの優先順位よりも高くします。
  4. BIOSオプションを保存して終了します(通常はF10)。

これは、Windows 8とUbuntu 13.10をデュアルブートするSamsung Series 7 Chronosラップトップでテストされており、セキュアブートは無効、UEFIおよびレガシーブートは有効です。


これは私にとって最もクリーンなオプションになりました。それはさらにいくつかのキーストロークですが、ちょっと、それは動作します。レガシーデバイスとUEFIブートデバイスが混在しています。ユーザーが他のOSよりもはるかに多く1つのOSを起動している場合、これは長期的にはより高速(かつ安全)になります。
ファジー分析14

Windows 10が自動更新された後、これもうまくいきました。
luis_js

このソリューションは、Windows 10からUbuntuを削除したときに機能しました。
VikasGupta

3

ブート修復は私のために働いた。グラフィカルアプリケーションを使用するのは非常に簡単です。コマンドラインを使用する必要はありません。ボタンをクリックするだけです。

利用可能な修復オプションはすべてUbuntuのドキュメントに記載されており、Boot-Repairの起動方法(ブータブルディスクの作成または既存のUbuntuライブディスクへのインストールによる)とその使用方法を説明する別のページがあります

UbuntuライブCDを起動し、Boot-Repairをインストールして実行します。


ただし、ブート修復を行う簡単な方法があればいいと思います。chroot他のツールをインストールするために、Googleよりも修理をセットアップする方が速いです。
スコットセヴェランス

2

GRUBが破損した場合、ユーザーは通常システムにアクセスできないため、ライブセッション(live-CDまたはlive-USB)から修復を実行する必要があります。

GRUBの中断には多くの原因が考えられます。WindowsがMBRに書き込みを行っている、DRMがGRUBを正しくインストールできない、インストーラーのバグ、ハードウェアの変更...より効率的ですが、それでも他の微調整が必​​要なさまざまな状況があります(カーネルへのオプションの追加、GRUBメニューの非表示解除、GRUBオプションの変更、適切なホストアーキテクチャの選択...)。GRUBを修復する他の問題は、chrootの使用と、適切なパーティション/ディスクの選択です。

これはすべて、小さなグラフィカルツールであるBoot-Repairで簡単に行えます。使いやすくするためにUbuntu 12.04 CDに統合する必要がありますが、それを必要としている人のために、すでにUbuntu-Secured-Remix(Boot-Repairを統合したUbuntu CD)、Boot-Repair-Disk(Bootを実行しているCD) -起動時の修復)、...

お役に立てれば。


1

スコットとWeb-Eの回答は十分であり、何度も助けになりました。しかし、多くの場合、i386およびamd64プラットフォームまたはgrubがefiディレクトリを見つけられないプラットフォームに関連する問題が原因で、ブート修復ツールはgrubを修復できません。
私の問題を10回以上解決したのは、古いgrubインストールを手動でパージし、新しいものをインストールすることです。

したがって、最初にスコットの答えから最初の6ステップを実行します。エラーが発生した場合、5番目のステップをスキップできます。

  1. 「Try Ubuntu」モードで、ライブCDまたはライブUSBから起動します。
  2. メインパーティションのパーティション番号を決定します。sudo fdisk -lsudo blkidまたはGParted(デフォルトでライブセッションに既にインストールされているはずです)がここで役立ちます。私はそれがだ、この答えに仮定するつもりです/dev/sda2が、お使いのシステムのための正しいパーティション番号を使用してください!

    メインパーティションがLVMにある場合、デバイスは代わりにに配置されます/dev/mapper/。ほとんどの /dev/mapper/{volume}--{os}-root場合{volume}、LVMボリューム名と{os}オペレーティングシステムです。ls /dev/mapper正確な名前で実行します。

  3. パーティションをマウントします。

    sudo mount /dev/sda2 /mnt  #Replace sda2 with the partition from step 2
    

    別の/boot/varまたは/usrパーティションがある場合は、手順2と3を繰り返して/mnt/boot、これらのパーティションを、 /mnt/varおよびに/mnt/usrそれぞれマウントします。例えば、

    sudo mount /dev/sdXW /mnt/boot
    sudo mount /dev/sdXY /mnt/var
    sudo mount /dev/sdXZ /mnt/usr
    

    交換sdXWsdXYおよびsdXZそれぞれのパーティション番号を持ちます。

  4. 他の必要なものをバインドマウントします。

    for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
    
  5. UbuntuがEFIモードでインストールされている場合([不明な場合はこの回答を参照] [efi])、sudo fdisk -l | grep -i efiまたはGPartedを使用してEFIパーティションを見つけます。のラベルが付けられEFIます。このパーティションをマウントsdXYし、システムの実際のパーティション番号に置き換えます。

    sudo mount /dev/sdXY /mnt/boot/efi
    
  6. chroot Ubuntuのインストールに:

    sudo chroot /mnt
    

次に、次の手順を実行します。

  1. すべての保留中のパッケージを構成します。
    sudo dpkg --configure -a
  2. 壊れたパッケージを修正します。
    sudo apt install -fy
  3. 現在のgrubを削除します。
    sudo apt purge -y grub*-common grub-common:i386 shim-signed
    これにより、デバイスにブートローダーがなく、次回起動できない可能性があるという警告が表示される場合があります。さあ、受け入れてください。
  4. sudo apt install -y grub-pc
    このコマンドを実行した後、現在sdXYのブートローダーをインストールするように指示するように求められます。sudo fdisk -lコマンドを使用して、現在のOSがインストールされている場所を見つけます。というラベルが付けられLinuxます。Tabキーを使用してそのウィンドウをナビゲートし、キーを使用してオプションを選択しSpaceます。
  5. すべてがうまくいけば、grubは正しくインストールされます。またsudo grub-update、二重チェックを行うことができます。

それでも問題が解決しない場合は、Archのwikiを読んでgrubを実際に理解し、他のさまざまな問題に取り組むことができます。(はい、Ubuntuにも役立ちます!)。


0

WindowsはLinuxフォーマットのパーティションを認識しません。liveCDのgpartedを使用し、ブートフラグでNTFSでフォーマットされたプライマリパーティションを作成する必要があります。

Windowsは常にパーティションテーブルを正しくリセットするとは限らないため、新しいプライマリパーティションが拡張パーティションの後にある場合、問題が発生することがあります。適切なバックアップとパーティションテーブルの個別のバックアップを作成するのが最適です。

パーティションテーブルをテキストファイルにバックアップし、外部デバイスに保存します。

sudo sfdisk -d /dev/sda > PTsda.txt

これは、MBR(msdos)システム専用です。UbuntuのインストールがGPTパーティションドライブにある場合は、WindowsをUEFIモードでのみインストールするか、ドライブをMBR(msdos)に戻すことができます。


16.04以降のgptパーティションドライブで動作するsfdiskとfdiskの新しいバージョンは、上記のコマンドでgptパーティションドライブもバックアップします。oldfredは昨晩夕食に何を食べたか覚えていないので、2013年に何を投稿したかわからない。:)
oldfred

昨夜の夕食を忘れて料理をしているとき、フレッドは祝福です。以前のコメントを削除しました。
WinEunuuchs2Unix

0

唯一のfsckコマンドはgrub-rescue、私のために画面を修正しました。

Boot-Repairを使用してLive-CDから起動し、ターミナルを開きます

正しいデバイスを入手します。

sudo fdisk -l

ブートデバイスを見つける必要があります。ブートデバイスは、次の*ようなブートカテゴリにあります。

Device     Boot   Start       End   Sectors  Size Id Type
/dev/sda1          2048   2000895   1998848  976M 82 Linux swap / Solaris
/dev/sda2  *    2000896 943716351 941715456  449G 83 Linux

次を使用してディスクを修復します。

sudo fsck /dev/sda2 -y

注:この例では、/ dev / sda2がブートデバイスです。

完了したら再起動します。できた


0

Scott Severanceの答えは有効かつ詳細ですが、外部ブートデバイスを必要としない解決策があるため、chroot

Windows 10では、起動に使用Advanced Recoveryするデバイス(パーティション?)を選択するために使用できます。

に移動しSettingsて選択しますUpdate & Security

ここに画像の説明を入力してください

に行くRecovery

ここに画像の説明を入力してください

Advanced Startup選択からRestart Now

ここに画像の説明を入力してください

次に、選択するUse a Deviceと、すべてのブートオプションが表示されます。「ubuntu」パーティションを選択すると、PCはそのパーティションから起動します。

私の通常のUbuntu環境で起動したら、ただ実行しようとしましたgrub-updateが、変更はありません。

私はその後、私の見つけ/boot/efiたパーティション/dev/nvme0n1p1と走ったsudo grub-install /dev/nvme0n1p1当時とはsudo update-grub

マイナーアップデートでMBR上書きする新しいWindows 10ポリシーがあるように見えるため、これにより、マスターブートレコードが複数回復元されました


0

私の質問で概説したテンプレートをboot-repair拭いたために(おそらく)別の問題が発生し/etc/grub.d/ました:Ubuntu 18.04はWindows 10のインストール後に起動しません

@karelsコメントで指摘されているように、grub設定はのファイルを使用して生成され/etc/grub.dます。私のディレクトリには/etc/grub.d/25_custom、存在しない.efiイメージを指す奇妙なメニューエントリが含まれていました。私の/etc/grub.dテンプレートはおそらくにホースされているように見えましたboot-repair

私はこれを修正しました:

  1. Live CDで起動します(同じUbuntuバージョンを使用することがおそらく重要です)
  2. sudo mount /dev/sdxx /mnt
  3. sudo cp /etc/grub.d/* /mnt/etc/grub.d/
  4. sudo update-grub
  5. 48時間の痛みの後、リブートしてリラックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.