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


15

Linuxをインストールしたいのですが、多くの恐ろしい話を聞いたことがあるので、現在のWindowsインストールを破損する危険はありません。幸いなことに、追加のハードドライブがあります。その上にLinuxをインストールしてから、Windowsドライブを変更せずにデュアルブートウィンドウをインストールできますか?

また、UEFI "BIOS"があり、WindowsドライブはGPT形式です。

回答:


18

新しい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インストーラーを使用してこれを行うことができます。ただし、すべてのインストーラーが同じように作成されるわけではありません。これがうまくいかず、次のような問題が発生する場合があります。

  1. Linuxを最初のディスクにインストールしたが、Windowsを起動できない、または

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

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

Linuxをインストールし、起動できることを確認したら、Windowsドライブを再び接続します(取り外した場合は、ドライブの順序で最初に、2番目のドライブを最初に、起動順序)を選択し、次の手順に進みます。

GRUB構成へのアクセス

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)、次のステップに進みます。

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

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

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

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

Windows Second Stageブートローダーを見つける

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に新しいメニューオプションを追加する

これは、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

参照資料


2
あなたが探している技術的に正しい用語は、不格好ではありませんが、ファームウェアです。これは、BIOSまたはUEFIとして提示できます
Milind R 14

残念ながら、ファームウェアには、ハードウェアに組み込まれているソフトウェアを指すという意味で、はるかに一般的な意味もあります。
キロタン

私のデスクトップでは、「チェーン」は起動中のコマンドとしては見つかりませんが、40_customファイル内のチェーンローダーです。これが正常かどうかをお知らせください
-FlogFR

非常に素晴らしい!ただし、これを試しても、Windows 8のインストールはgrub2のエントリとして表示されません。すべての構文エラーを修正しました。grub.cfgファイルはエラーなしで作成されます。チェーンロードが最初に言及された構文エラーがあることもしてください注:chainload $({root})する必要がありますchainload (${root})(それが変化するの小さすぎるので、私はそれを編集することはできません)。
ソベック

@sobekありがとうございます-修正済み。ファイルに何かを/etc/grub.d追加したが、構成を生成するときに追加されない場合、奇妙なことが起こっています。これを実行grub-mkconfigせず-oに標準出力に実行すると、追加が処理されていることを確認または拒否するのに役立ちます。
goldilocks
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.