web-dev-qa-db-ja.com

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

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

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

340
Salahuddin

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

方法は次のとおりです。

  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(blkidから)が/etc/fstab内のものと異なる場合、/etc/fstabを現在のUUIDで更新します。

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

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

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

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

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を使用します。

enter image description here

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

112
Web-E

ライブの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

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

Initial screen

  • 以下に示すオプションを選択します

advanced option

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

enter image description here

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

方法2

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

ドキュメント:

25
Stormvirux

Windows 7にeasyBCDをインストールするだけです

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

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

11
hamed

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

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

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

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

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

6
Rod Smith

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

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

これは、Windows 8とUbuntu 13.10のデュアルブート、Samsungシリーズ7 Chronosラップトップ、セキュアブート無効、UEFI、レガシーブート有効でテストされています。

5
scruss

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

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

UbuntuのライブCDを起動し、Boot-Repairをインストールして実行するだけです。

3
lorenzo-s

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

GRUBブレークには多くの原因が考えられます:WindowsがMBRに書き込みを行っている、DRMがGRUBを正しくインストールできない、インストーラーのバグ、ハードウェアの変更... GRUBの更新_スコットによって最初に提案されたように、通常は十分ではなく、マルコによって提案されたGRUBを再インストールする方が効率的ですが、他の調整が必要なさまざまな状況があります(カーネルにオプションを追加し、GRUBメニュー、GRUBオプションの変更、適切なホストアーキテクチャの選択...)。 GRUBを修復するためのその他の問題は、chrootの使用と、適切なパーティション/ディスクの選択です。

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

お役に立てれば。

2
LovinBuntu

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

したがって、最初にスコットの answer から最初の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's wiki を読んで、grubについて実際に理解し、他のさまざまな問題に取り組むことができます。 (はい、Ubuntuにも役立ちます!)。

1
subtleseeker

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

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

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

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

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

0
oldfred

Scott Severanceの答えは有効かつ詳細ですが、外部ブートデバイスを必要としない解決策があるため、Ubuntuパーティションをすべて識別して手動でマウントする必要はありませんchrootに至るまで。

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

Settingsに移動し、Update & Securityを選択します。

enter image description here

Recoveryに移動します。

enter image description here

Advanced StartupからRestart Nowを選択します

enter image description here

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

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

次に、/boot/efiパーティションで/dev/nvme0n1p1を実行し、Sudo grub-install /dev/nvme0n1p1を実行してからSudo update-grubを実行しました。

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

0
timbo

ここでの質問で概説されているboot-repair/etc/grub.d/テンプレートを消去することにより(おそらく)別の問題が発生しました: Windows 10のインストール後にUbuntuが起動しない

@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時間の痛みの後、リブートしてリラックス
0
Adam Moore

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
Benny