GPTパーティションテーブルを持つ1台のコンピューターにWindowsからLinuxをインストールするときのGRUBブートローダーメニューの起動の構成

こんにちは、Habr! 今日は、LinuxとWindowsを2回インストールするときにGRUBブートローダーが起動せず、OSを選択する機会が与えられ、Windowsが自動的に起動する状況を検討します。 ちょっとした理論:

GRUB(GRand Unified Bootloader)は、オペレーティングシステム用のブートローダーです。
GRUBは、互換性のあるオペレーティングシステムをロードできます。 その中には、Linux、FreeBSD、Solaris、その他多数があります。 さらに、GRUBは別のブートローダーに制御を移すことができます。これにより、Windows(NTLDRブートローダーを介して)、MS-DOS、OS / 2、および他のシステムを起動できます。

そこで、理論を少し理解しました(これで十分だと思います)。次に、同じコンピューターにデュアルブートWindowsとLinuxをインストールする場合の落とし穴を見てみましょう。

画像


実験は、次の特性を持つワークステーションで実行されました。

ベースボード情報


記憶装置


HDD


Debian 8.6 JessieをWindows 10にインストールする際に問題が見つからなかったことが証明されています。 Debianは起動時に正しく登録され、GRUBはエラーなしで起動し、2つのOSも正常に動作します。

しかし、実践が示しているように、これはすべてのディストリビューションで発生するわけではありません。 Debianの代わりにUbuntu 16.04.1をインストールすると、最初の落とし穴が同じワークステーションで発生しました-GRUBが起動せず、Windows 10が自動的に起動しました。

3〜4週間後に問題の解決策が見つかりました(その問題を解決するのにどれだけの時間を費やしたかを考慮するのにうんざりしていました)。 予想外の結果でしたが、同時にシステム全体が機能しました。 したがって、同じ問題が発生した場合は、次の手順が役立ち、時間を大幅に節約できます。

重要! 指示の実行を開始する前に、Linux MintディストリビューションでLiveCDを準備する必要があります-すべての操作を実行します(このディストリビューションを選択したのは、Midnight Commanderをインストールしやすいからです。LiveCDでUbuntuを実行するのは難しいので、操作のためのスペース)。 また、 update-grubコンソールの下からのコマンドは、GRUBが起動する場合のために設計されていますが、Linux以外の他のオペレーティングシステムは表示されないため、役に立ちません。 また、わずかな変更でもファイル/ディレクトリのバックアップコピーを作成することをお勧めします。

  1. root権限を使用して、ターミナルから/ mntフォルダーにEFIパーティションをマウントします。 私の場合、 mount / dev / sda2 / mntコマンドでした。

  2. sudo -sコマンドを入力し、後続の操作のためにパスワード(デフォルトでは空です)を確認します(これを行わないことをお勧めしますが、 sudoとコマンドを実行します-この意見を支持しますが、指示はそれを理解している経験豊富なLinuxユーザー向けですあなた自身の危険とリスクですべてを行う)。

  3. mcコマンドでMidnight Commanderを起動します。

  4. ファイルシステムで次のディレクトリを見つけます。/ mntフォルダーでEFI。

  5. Microsoftディレクトリの名前を、Microsoft2などの別の名前に変更します。

  6. Microsoftという名前の新しいディレクトリを作成します。

  7. 新しく作成されたMicrosoftディレクトリに移動し、そのフォルダー階層内に、古いMicrosoft(名前が変更されたもの)と同様の部分的に作成します。 私の場合、このフォルダ構造は/ boot /で、次に多数のフォルダとその横にbootmgfw.efiファイルがありました。 このファイルに正確にフォルダー構造を再作成する必要があります。 つまり その横にあるすべてのものは不要であり、それに来るものすべて(つまり、親フォルダー、隣接するフォルダーも必要ありません)は、新しいMicrosoftフォルダーに再作成されます。 私の場合、/ bootフォルダーのみを作成する必要があり、新しいディレクトリへの最終パスは次のようになりました:/ EFI / Microsoft / boot。 すべてのフォルダとファイルを単純にコピーすることができます-チェックされ、動作し、すべてを手動で作成することはできません。

  8. ステップ6のディレクトリに、Linuxディストリビューションの名前のフォルダーがあります。この場合はUbuntuです。 このフォルダーのすべてのファイルを、前の手順で作成した最終ディレクトリ/ EFI / Microsoft / bootにコピーします(念のため元のファイルとubuntuフォルダーを残します)。

  9. 結果のファイルシステムでは、grubx.efiまたはgrubx64.efiファイルが見つかります(インストールされているLinuxの長さに応じて、そのうちの1つのみが存在します)。 名前をbootmgfw.efiに変更します。

  10. ファイル/boot/grub/grub.cfgは、インストールされているLinuxのファイルシステムにあります。 編集用に開きます。 その中に、「chainloader」で始まる行のコンテキストで「Microsoft」という単語を見つけ、この単語をMicrosoftに名前を変更したディレクトリの名前に置き換えます(1回だけ出現し、行に「chainloader」があるため、間違えないようにします)つまり、この例ではMicrosoft2を使用しています)。 ファイルへの変更を保存します。

また、このファイルでは、GRUBが表示するリスト内の名前を変更できます。 たとえば、コード部分のopenSUSE Leap 42.2 27.01の代わりに:

menuentry 'openSUSE Leap 42.2 27.01' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt6' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 996b3ed5-150f-4de3-a40c-6d385e27d6de else search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de fi echo ' Linux 4.4.36-8-default …' linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro resume=/dev/sda7 splash=silent quiet showopts echo '    …' initrdefi /boot/initrd-4.4.36-8-default } 

openSUSEを書くのが最良の選択です!:)

 menuentry 'openSUSE The best choice!:)' --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-996b3ed5-150f-4de3-a40c-6d385e27d6de' { load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root='hd0,gpt6' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt6 --hint-efi=hd0,gpt6 --hint-baremetal=ahci0,gpt6 996b3ed5-150f-4de3-a40c-6d385e27d6de else search --no-floppy --fs-uuid --set=root 996b3ed5-150f-4de3-a40c-6d385e27d6de fi echo ' Linux 4.4.36-8-default …' linuxefi /boot/vmlinuz-4.4.36-8-default root=UUID=996b3ed5-150f-4de3-a40c-6d385e27d6de ro resume=/dev/sda7 splash=silent quiet showopts echo '    …' initrdefi /boot/initrd-4.4.36-8-default } 

些細なことですが、素晴らしい! コードの残りの部分に触れないことをお勧めします。

Midnight Commanderの管理を理解するのが難しい場合(心配する必要はありません。初めてこのプログラムに問題が発生しました)、すべての操作はNautilusファイルマネージャーで(または別の問題ではありません)実行できますが、最初はrootユーザーとして。

その後、再起動して結果を楽しみます。 しかし、結局のところ、OpenSUSE Leap 42.2ディストリビューションにはこのような問題があります。 実践が示しているように、Windows 10を搭載したOpenSUSE配布キットがコンピューターにインストールされている場合、上記の指示は役に立ちません。 より正確には、それは助けになりますが、それだけを補う必要があります。 主要部分を完了したら、次の手順を実行します。

  1. すべての操作を完了したら、/ EFI / opensuse / x86_64-efi /フォルダーに移動します(最終的なx86_64-efiフォルダーの名前は、PCアーキテクチャによって異なる場合があります)
  2. grub.efiファイルをコピーします(セキュアブートオプションを有効にしている場合は、shim.efiファイルもあります。それらを一緒にコピーすることをお勧めします)
  3. / EFI / Bootフォルダーに移動し、そこにあるすべてのファイルを削除します(ブートローダーが更新されると、それらは再び表示されますが、心配する必要はありません)
  4. コピーしたファイルを貼り付けて、落ち着いて再起動します。
    これが全体の指示です。 誰かが便利になると思います...

PSすべてが順調であれば、OpenSUSEを使用したGRUBが起動しますが、Windowsが表示されないので喜ぶ-問題は1つのコマンドgrub2-mkconfig -o /boot/grub2/grub.cfgで解決されます。 update-grub

このトピックに興味がある人は、記事「GRUB 2ブートローダー-完全なガイド」を読むことをお勧めします

Source: https://habr.com/ru/post/J321374/


All Articles