web-dev-qa-db-ja.com

セカンドハードドライブのデュアルブートウィンドウ、UEFI / GPTシステム

Linuxをインストールしたいのですが、恐ろしい話をたくさん聞いたので、現在のWindowsインストールを損傷する危険を冒したくありません。幸い、私は予備のハードドライブを持っています。その上にLinuxをインストールしてから、Windowsドライブを変更せずにデュアルブートウィンドウをインストールできますか?

また、UEFI "BIOS"を使用しており、WindowsドライブはGPT形式です。

15
goldilocks

新しいUEFIシステムと従来のBIOSシステムの両方で同じ概念を参照するときは、以下の[〜#〜] bios [〜#〜]という用語を使用しますが、これはUEFIなので指向の質問、たとえばGRUBのドキュメントで "BIOS"ジャイブについてよりよく話す、および "BIOS/UEFI"は不格好です。 GRUB(実際にはGRUB 2-これはあいまいに使用されることが多い)は、Linuxによってインストールされ、Windowsのデュアルブートに使用されるブートローダーです。

まず、ドライブの順序とブートの順序について説明します。 ドライブの順序ドライブがマザーボード上のバスに物理的に接続されている順序(最初のドライブ、2番目のドライブなど)を指します。この情報はBIOSによって報告されます。 ブート順序は、BIOSがブート可能なドライブをチェックするシーケンスを指します。これは、ドライブの順序と同じである必要はなく、通常、BIOSセットアップ画面で構成できます。ドライブの順序を構成したり、ブートの順序による影響を受けたりしてはなりません。これは、OSにとって非常に扱いにくいものになるためです(ただし、理論的には、鈍いBIOSが可能です)。また、最初のドライブを取り外した場合、2番目のドライブが最初のドライブになる可能性があります。このような問題を回避するために、ブートローダーの設定にUUIDを使用します(現在のLinuxインストーラーもこれを行います)。

drive orderの観点からLinuxを2番目のドライブにインストールし、次にUEFIセットを使用してboot orderの観点からLinuxを選択するのが理想的な方法です。アップ。これの追加の利点は、BIOS/UEFIブート順序を使用して、必要に応じてWindowsドライブを選択し、GRUBをバイパスできることです。私が2番目のドライブでlinuxを推奨する理由は、GRUBがWindowsネイティブブートローダーを「チェーンロード」する必要があり、Windowsブートローダーが常に最初のドライブにあると想定するためです。ただし、逆にしたい場合や必要な場合は、それをだます方法があります。

うまくいけば、先に進んでライブCDなどを使用し、GUIインストーラーを使用してこれを実行できます。ただし、すべてのインストーラーが同じように作成されているわけではなく、これが台無しになり、次のような問題が残っている場合:

  1. Linuxをfirstディスクにインストールしましたが、Windowsを起動できません、または

  2. Linuxを2番目のディスクにインストールしましたが、最初のディスクをブートローダーに使用しましたが、今は何も起動できません!

その後、読み続けます。 2番目のケースでは、最初にlinuxを2番目のディスクに再インストールしてみてください。今度は、ブートローダーがその場所にあることを確認してください。ドライブの順序に関係なく、余分にインストールされているものは何もないと想定するため、これを行う最も簡単で最も簡単な方法は、一時的にマシンからWindowsドライブを削除することです。

Linuxをインストールし、起動できることを確認したら、Windowsドライブを再び差し込みます(取り外した場合)。ドライブの順序では最初に、2番目のドライブは最初に使用するのが理想的です。ブート順序)、次のステップに進みます。

GRUB構成へのアクセス

Linuxを起動し、ターミナルを開いて、

> su root

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

それをテキストエディターで開き、上の部分(#!/bin/shで始まる)をコピーして貼り付け、次のステップに進みます。

Windowsブートオプションの追加

これをファイルの最後にあるテキストエディタでコピーして貼り付けます。

menuentry "MS Windows" {
        insmod part_gpt
        insmod search_fs_uuid
        insmod ntfs
        insmod chain
}

これはモジュールのリストですGRUBは物事を成し遂げる必要があります(ntfsは不必要かもしれませんが、何も害してはいけません)。 これは不完全なエントリであることに注意してください-いくつかの重要なコマンドを追加する必要があります。

Windowsの第2ステージブートローダーを見つける

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と入力してから、 Tab 2〜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」など、文字、数字、ダッシュの短い文字列が返されます。スペースで区切られたヒントBIOS文字列の後のsearch --fs-uuid行の最後にそれを追加します。


次、if(かつif if)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に新しいメニューオプションを追加する

これは、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と入力して、スーパーユーザーモードを終了します。

リブート!

グラブメニューが表示されたら、すばやくスクロールダウンして(タイムアウトになる前に、通常は5秒)、「Windows」オプションまでスクロールしてテストします。 grubからテキストメッセージエラーが発生した場合は、設定に問題があります。エラーメッセージWindowsからが表示された場合、その問題はあなたとマイクロソフトの間のものです。心配しないでください。ただし、Windowsドライブは変更されておらず、BIOSセットアップを介して最初に(ブート順序の観点から)ドライブを直接起動することができます。

再びlinuxに戻ったら、/etc/grub.dディレクトリの所有権とその内容を元の状態に戻します。

Sudo chmod 755 /etc/grub.d/40_custom

参考文献

18
goldilocks