回答:
新しいUEFIシステムと従来のBIOSシステムの両方で同じ概念を指すときは、以下のBIOSという用語を使用します。これはUEFI指向の質問であるため、たとえばGRUBのドキュメントなどで「BIOS」ジブについてよりよく話すためです。 、および「BIOS / UEFI」は不格好です。GRUB(実際にはGRUB 2-これはあいまいに使用されることが多い)は、Linuxによってインストールされ、Windowsのデュアルブートに使用されるブートローダーです。
まず、ドライブの順序とブートの順序について一言。 ドライブの順序とは、ドライブがマザーボード上のバスに物理的に接続されている順序を指します(最初のドライブ、2番目のドライブなど)。この情報はBIOSによって報告されます。 起動順序BIOSが起動可能なドライブをチェックするシーケンスを指します。これは必ずしもドライブの順序と同じではなく、通常はBIOSセットアップ画面から構成できます。ドライブの順序を構成したり、ブート順序の影響を受けたりすることはできません。これは、OSにとって非常に不愉快なことです(ただし、理論的には、鈍角BIOSが可能です)。また、最初のドライブを取り外した場合、2番目のドライブが最初のドライブになる可能性があります。このような問題を試して回避するために、ブートローダーの設定にUUIDを使用します(現在のLinuxインストーラーでもこれを行います)。
必要なものを取得する理想的な方法は、ドライブの順序で2番目のドライブにLinuxをインストールし、UEFIセットアップを使用してブートの順序で最初に選択することです。これの追加の利点は、BIOS / UEFIブート順序を使用してWindowsドライブを選択し、必要に応じてgrubをバイパスできることです。2番目のドライブでlinuxを推奨する理由は、GRUBはWindowsネイティブブートローダーを「チェーンロード」する必要があり、Windowsブートローダーは常にそれが最初のドライブにあると想定するためです。ただし、他の方法でそれを好むか、必要とする場合、それをだます方法があります。
うまくいけば、先に進み、ライブCDなどを使用して、GUIインストーラーを使用してこれを行うことができます。ただし、すべてのインストーラーが同じように作成されるわけではありません。これがうまくいかず、次のような問題が発生する場合があります。
Linuxを最初のディスクにインストールしたが、Windowsを起動できない、または
Linuxを2番目のディスクにインストールしましたが、最初のディスクをブートローダーに使用していて、何も起動できません!
その後、読み続けてください。2番目のケースでは、最初にLinuxを2番目のディスクに再インストールしてみてください。今回は、ブートローダーがどこにあるかを確認してください。最も簡単で確実な方法は、ドライブからWindowsドライブを一時的に削除することです。ドライブの順序に関係なく、Windowsドライブに余分なものはインストールされていないと想定するからです。
Linuxをインストールし、起動できることを確認したら、Windowsドライブを再び接続します(取り外した場合は、ドライブの順序で最初に、2番目のドライブを最初に、起動順序)を選択し、次の手順に進みます。
Linuxを起動し、ターミナルを開いて、
> su root
ルートのパスワードを求められます。この時点から、あなたはその端末のスーパーユーザーになります(チェックしてみてくださいwhoami
)ので、愚かなことはしないでください。ただし、GUIの通常のユーザーであり、テキストファイルを編集するため、GUIエディターを使用する場合は、そのファイルの所有権とディレクトリを一時的に変更する必要があります。
> chown -R yourusername /etc/grub.d/
「操作が許可されていません」と表示された場合は、su
正しくありませんでした。を取得chown: invalid user: ‘yourusername’
した場合は、文字通り最後のコマンドを使用しています。
これ/etc/grub.d
で、ファイルブラウザでに移動して、というファイルを探すことができます40_custom
。次のようになります。
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
見つからない場合は、ルートターミナルで次のコマンドを入力します。
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
テキストエディタで開き、上記の部分をコピーして貼り付け(w /から開始#!/bin/sh
)、次のステップに進みます。
これをコピーして、ファイルの最後にあるテキストエディターで貼り付けます。
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
これは、GRUBが物事を成し遂げるために必要とするモジュールのリストです(ntfs
不必要かもしれませんが、何も傷つけてはいけません)。 これは不完全なエントリであることに注意してください。重要なコマンドをいくつか追加する必要があります。
Linuxのインストールでは、おそらくWindowsパーティションが自動マウントされているので、ファイルブラウザで見つけることができるはずです。そうでない場合は、その方法を見つけてください(方法がわからない場合は、このサイトで質問してください)。それが完了したら、マウントポイントを知る必要があります/media/ASDF23SF23/
。これは、たとえばファイルブラウザで明らかです。入力を節約するために、それをシェル変数に入れます。
win="/whatever/the/path/is"
等号の両側にスペースがあってはなりません。 ここにWindowsパスの要素を含めないでください。これは、Windowsパーティションの最上位フォルダーを指している必要があります。今:
cd $win
find . -name bootmgfw.efi
大きなパーティションがある場合、これには数分かかることがありますが、おそらく最初に吐き出すのは私たちが探しているものです。長いgoobledygook文字列を含むファイルシステム内にさらに参照があるかもしれませんが、そうではありません。使用Ctrl-c
あなたが何かを短く、シンプルを見たら、検索を停止します./Windows/Boot/EFI/bootmgfw.efi
か./EFI/HP/boot/bootmgfw.efi
。
.
最初の部分を除いて、このパスを覚えておいてください。ここで使用するので、一番下の空白行でテキストエディターにコピーできます。ここで以前のディレクトリに戻りたい場合は、を使用しますがcd -
、これ以降はシェルのどこにいるかは関係ありません。
GRUBは、ブートプロセスを見つけて、第2ステージのWindowsブートローダーに渡すことができる必要があります。Windowsパーティションには既にパスがありますが、そのパーティションがどこにあるかをGRUBに伝えるためのパラメーターも必要です。grub-probe
または(Fedoraなどで)と呼ばれるツールがシステムにインストールされている必要がありますgrub2-probe
。入力してgrub
からTab2〜3回ヒットします。どちらかを含むリストが表示されます。
> grub-probe --target=hints_string $win
次のような文字列が表示されます。
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
GRUB構成を含むテキストエディターに戻り、すべてのinsmod
コマンドの後に(ただし、閉じ中括弧の前に)行を追加して、次のようにします。
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
その行を中断したり、テキストエディターに許可しないでください。ディスプレイ内で折り返される場合があります。違いを確認する簡単な方法は、行番号をオンに設定することです。次:
> grub-probe --target=fs_uuid $win
これにより、「123A456B789X6X」や「b942fb5c-2573-4222-acc8-bbb883f19043」などの短い文字列、数字、ダッシュが返されるはずです。search --fs-uuid
ヒントbios文字列の後に、スペースで区切って行末に追加します。
次に、Windowsがドライブの順序で2番目のドライブにある場合(およびその場合のみ)、行の後に行を追加します。search --fs-uuid
drivemap -s hd0 hd1
これは前述の「トリック」です。動作が保証されているわけではありませんが、試しても害はありません。
最後に、最後の行は次のようになります。
chainloader (${root})[the Windows path to the bootloader]
}
明確にするために、たとえば:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
それでおしまい。ファイルを保存し、ファイルブラウザーでチェックして、実際に保存されていることを確認します。
これは、grub-mkconfig
またはと呼ばれるツールを使用して行われgrub2-mkconfig
ます。それはあなたがTab以前に見つけたそのリストにあったでしょう。また、というコマンドもありupdate-grub
ます。それを確認するには、ルートターミナルに入力します。「コマンドが見つかりません」と表示された場合は、grub-mkconfig
直接使用する必要があります。そうでない場合(より長いエラーを取得することを含む)、構成を設定しただけで、少し間を空けることができます。
grub-mkconfig
直接使用するには、最初に見つける必要がありますgrub.cfg
:
> find /boot -name grub.cfg
これはおそらく/boot/grub/grub.cfg
または/boot/grub2/grub.cfg
です。
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
構成のエラーを自動的にスキャンします。 grub-mkconfig
そうではありませんが、マシンを起動しようとするときよりも今すぐ対処する方がはるかに簡単なので、そうすることが重要です。これには、grub-script-check
(またはgrub2-script-check
)を使用します。
> grub-script-check /boot/grub/grub.cfg
これ(またはupdate-grub
)が行番号を示すエラーを生成する場合、それはgrub.cfgの行番号ですが、対応する部分/etc/grub.d/40_custom
(テキストエディターのファイル)を修正する必要があります。ただし、前のファイルを見るためだけにrootになる必要があるかもしれないのでless /boot/grub/grub.cfg
、ターミナルで試して:、を押して、行番号を入力します。メニューエントリが表示されます。入力ミスを見つけて、テキストエディタで修正し、実行するupdate-grub
か、grub-mkconfig
もう一度実行します。
完了したら、テキストエディターを閉じexit
てターミナルを入力し、スーパーユーザーモードを終了します。
grubメニューが表示されたら、「タイムアウト」が切れる前(通常は5秒前)に「Windows」オプションまですばやくスクロールしてテストします。grubからテキストメッセージエラーが表示された場合、設定に問題があります。Windowsからエラーメッセージが表示される場合、その問題はあなたとMicrosoftの間にあります。ただし、Windowsドライブは変更されていないため、BIOSセットアップを介して(ブート順序に関して)最初に置くことで、直接起動することができます。
再度linuxに戻ったら、/etc/grub.d
ディレクトリの所有権とその内容を元の状態に戻します。
sudo chmod 755 /etc/grub.d/40_custom
Archにはいくつかの最高のドキュメントがあり、その多く(そのページを含む)はほとんどのGNU / Linuxディストリビューションに適用できます。
chainload $({root})
する必要がありますchainload (${root})
(それが変化するの小さすぎるので、私はそれを編集することはできません)。
/etc/grub.d
追加したが、構成を生成するときに追加されない場合、奇妙なことが起こっています。これを実行grub-mkconfig
せず-o
に標準出力に実行すると、追加が処理されていることを確認または拒否するのに役立ちます。