Insyde H2O EFI biosを搭載したSony VAIOはGRUB EFIで起動しません


12

新しいSony Vaio Sシリーズラップトップを購入しました。Insyde H2O BIOS EFIを使用しており、それにLinuxをインストールしようとすると夢中になります。

root@kubuntu:~# parted /dev/sda print
Model: ATA Hitachi HTS72756 (scsi)
Disk /dev/sda: 640GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size    File system  Name                          Flags
 1      1049kB  274MB  273MB  fat32        EFI system partition          hidden
 2      274MB  20.8GB  20.6GB  ntfs        Basic data partition          hidden, diag
 3      20.8GB  21.1GB  273MB  fat32        EFI system partition          boot
 4      21.1GB  21.3GB  134MB                Microsoft reserved partition  msftres
 5      21.3GB  342GB  320GB  ntfs        Basic data partition
 6      342GB  358GB  16.1GB  ext4        Basic data partition
 7      358GB  374GB  16.1GB  ntfs        Basic data partition
 8      374GB  640GB  266GB  ntfs        Basic data partition

驚くべきことは、ディスクに2つのEFIシステムパーティションがあることです。sda2パーティションは、基本的なリカバリインターフェイスを備えたウィンドウをロードする20ギガバイトのリカバリパーティションです。これには、通常の電源ボタンではなく「ASSIST」ボタンを押すとアクセスできます。私は、sda1 EFIシステムパーティション(ESP)がこのリカバリにロードされると想定しています。

sda3 ESPは、実際にはWindows 7に移行するMicrosoft Windowsのエントリを具体化しました(Windowsのbcdedit.exeで確認)。Ubuntuはsda6にインストールされ、インストール中にブートパーティションとしてsda3を選択しました。インストーラーは、sda3 / EFI / ubuntu / grubx64.efiアプリケーションを正しく作成しました。

本当の問題:私の人生では、デフォルトに設定することはできません!grubx64.efiと呼ばれるsda3 / startup.nshを作成しようとしましたが、助けにはなりませんでした。再起動すると、システムは引き続きWindowsで起動します。私はefibootmgrを使用してみましたが、それが機能したことを示しています:

root@kubuntu:~# efibootmgr 
BootCurrent: 0000
BootOrder: 0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
root@kubuntu:~# efibootmgr --create --gpt --disk /dev/sda --part 3 --write-signature --label "GRUB2" --loader "\\EFI\\ubuntu\\grubx64.efi" 
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2
root@kubuntu:~# efibootmgr
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2

ただし、ご想像のとおり、再起動すると、マシンはWindowsに直接再起動します。

私が考えることができる唯一のものは:

  1. sda1パーティションが何らかの形で使用されています
  2. /EFI/Boot/bootx64.efiと/EFI/Microsoft/Boot/bootmgfw.efiをgrubx64.efiで上書きします[ただし、これは本当に急進的なようです]。

誰でも助けてくれますか?感謝します-この問題は私を夢中にさせるので、どんな助けも大歓迎です!


Sony Vaio Sで同じアプローチに従いました。MS.efiファイルをGRUBファイルに置き換え、MS .efiのコピーを別のディレクトリに保存し、そのコピーにチェーンロードしてWindowsを起動します。これは一般的には機能しますが、厄介な副作用は、Windowsを休止状態から再開できないことです。ブートローダーがエラーになり、クリーンな再起動が必要です。

回答:


11

私は最終的にこれを解決することができました。EFI / Microsoft / boot / bootmgfw.efiをgrub64.efiに置き換えました。前者の名前をbootmgfw.efi.oldに変更し、grubを使用してメニューオプションを追加してチェーンロードしました。

これは、Microsoft Windowsブートローダーを探すためにファームウェアがハードコード化されており、efibootmgr設定またはstartup.nshを尊重していないことを意味します。それは本当にひどいです。

Sony EFIブートプロセスの仕組みを見つけました。

  1. /EFI/Microsoft/Boot/fwbootmgr.efiを見てください。存在する場合は、起動します。
  2. / EFI /のすべてのサブディレクトリでgrubx64.efiを探します。存在する場合は、起動します。
  3. ブート/EFI/Boot/bootx64.efi
  4. 「オペレーティングシステムが見つかりません」などのエラーメッセージを表示します。

Linuxでは、efibootmgrツールは機能しますが、最後に使用したUSBドライブなど、自動生成されたナンセンスがたくさん表示されます。

これを私が学んだ方法は次のとおりです。

  1. LinuxとMacを並べてインストールするために、新しいマシンを開き、Windowsパーティションを折りたたみました。
  2. Ubuntu 12.10をインストールし、インストーラーがfwbootmgr.efiを上書きし、古いWindowsブートローダーをバックアップしました。
  3. 古いWindowsブートローダーを復元しましたが、Windows以外は起動できませんでした。
  4. Windowsブートローダーの名前を偽に変更してから、Grub BLが引き継ぎました。
  5. ubuntuディレクトリの名前を別の名前に変更すると、rEFIndをインストールしたにもかかわらず、Grubがロードされたままになりました。
  6. 私がrEFIndに私が望んでいたことをさせる唯一の方法はこれでした:

  7. fwbootmgr.efiをその親ディレクトリに移動します。rEFIndは引き続きそれを検出し、Windowsはユーザーが名前を変更したことを訴えません。

  8. grubx64.efiの名前をrfgrubx64.efiまたは他のわかりやすい名前に変更します。
  9. rEFIndを/ EFI / refindから/ EFI / bootにコピーし、/ EFI / refind_x64.efiの名前を* .bakに変更し、最後に/Boot/refind_x64.efiの名前をbootx64.efiに変更します。これで、rEFIndからWindows BLまたはGRUBを起動できるはずです。MacOSインストールをCloverにアップグレードし、rEFIndからCloverもロードする予定です。

(おそらく、Windowsブートマネージャーを使用してこれをすべて実行することは可能かもしれませんが、EeasyBCDのEFIサポートは私の経験ではいまだに混乱しています。しばらくの間再び触れることを拒否します。)


WindowsのBCD [bcdedit.exeを使用]設定を変更してWindowsブートマネージャーをgrubに設定しようとしても、まだ機能しないことに注意してください。実際に.efiファイルをgrubの.efiに置き換えなければなりませんでした。
ローハンDhruva

5

まず、2つのESPがありません。ESPは、パーティションタイプコードがC12A7328-F81F-11D2-BA4B-00A0C93EC93Bのパーティションであり、partingは「ブートフラグ」が設定されたパーティションとして識別されます。出力は、/ dev / sda3のみに「ブートフラグ」が設定されていることを示しているため、ESPは/ dev / sda3のみです。GPTでは、パーティションに名前を付けることができ、「EFIシステムパーティション」という名前の2つのパーティションがありますが、これらの名前は人を識別する目的でのみ使用されます。したがって、あなた(またはいくつかの自動ユーティリティ)がESPにするために/ dev / sda1を作成しましたが、パーティションタイプコードの設定でエラーが発生したか、他のユーティリティがタイプコードを不適切に変更した可能性がありますC12A7328-F81F-11D2-BA4B-00A0C93EC93Bを別のものに。

これを修正する方法はいくつかあります。最も単純なのは、混乱を避けるために/ dev / sda1の名前を変更することです。/ dev / sda1が目的を果たさないと思われる場合は、バックアップして削除することができます。これにより邪魔にならず、混乱を避けることができますが、もちろん273 MBの未使用ディスク領域があります。または、混乱を避けるために、必要に応じて名前とタイプのコードを変更して、スペースを他の目的に充てることができます。EFIは複数のESPを明示的に許可しているため、(たとえば、partedを使用して「ブートフラグ」を設定することにより)タイプコードを変更し、両方のESPを使用できます。しかし、これは混乱を招く可能性があります。

関連するすべてのファイルが/ dev / sda3にあるように聞こえるので、この問題はLinuxを起動できないことに関係がない可能性があります。この問題のいくつかの考えられる理由は私に発生します:

  • efibootmgrコマンドで何かを誤って入力した可能性があります。明らかなタイプミスは見当たりませんが、GRUBバイナリが指定した場所にない場合、コマンドは機能しません。「--gpt」および「--write-signature」オプションはほぼ確実に不要であり、おそらく問題を引き起こす可能性がありますが、ほとんどの場合そうではありません。
  • ファームウェアにバグがあり、efibootmgrコマンドの効果が一時的になる可能性があります。再起動してから、「sudo efibootmgr -v」と入力して、作成したエントリが再起動後も有効かどうかを確認します。
  • ファームウェアには、ブート順序変数が無視される原因となるバグがある可能性があります。私はそのようなマザーボードを持っています。BootOrder変数で指定された順序ではなく、ブートエントリが作成された順序で起動します。このバグを回避するには、すべてのエントリを削除し、使用するブート順序でそれらを再作成する必要があります。
  • grubx64.efiバイナリは、ファームウェアが起動を拒否し、起動順序の次の項目に進むような方法で破損する可能性があります。

efibootmgrコマンドを調整してみたり、新しいバイナリを見つけたり、これらの可能性をテストすることができます。他のすべてが失敗した場合、以下を実行することをお勧めします。

  1. efibootmgrまたはファームウェアを使用してすべてのブートエントリを削除します(これを行うためのインターフェイスが提供されている場合)。
  2. grubx64.efiをESPのEFI / Boot / bootx64.efiにコピーします。
  3. 再起動してもWindowsが表示される場合は、EFI / Microsoft / Boot / bootmgfw.efiの名前をEFI / Microsoft / bootmgfw.efiに変更してください。

これにより、ブートローダーのデフォルト名(EFI / Boot / bootx64.efi)を使用してGRUBが起動します。これに関する1つの問題は、GRUBにWindows用の作業エントリーがない場合があることです。おそらく手動で作成できます。このようなエントリは動作するはずです:

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/bootmgfw.efi
}

または、rEFItまたはrEFIndをEFI / Boot / bootx64.efiとしてインストールできます。そのサイトから入手できるrEFItバイナリはUEFIベースのPCでは動作しないことに注意してください。Ubuntuリポジトリのバージョンを使用する必要があります。rEFIndは、UEFIサポートの改善など、多数のバグ修正と更新が行われたrEFItのフォークです。(rEFItは約2年前に放棄されたようです。)したがって、rEFItではなくrEFIndを使用することをお勧めします。残念ながら、AFAIK rEFIndは(まだ)Ubuntuリポジトリに含まれていないため、手動でダウンロードしてインストールする必要があります。


ロッド、どうもありがとう!ただし、sda1はそれ自体がESP(デフォルトでは起動できない場合があります)であり、レスキューパーティション(20Gb SONSYS)の起動に使用されます。私はそれが奇妙な設定であることを知っていますが、ソニーは何らかの理由でそうすることを選択しました。電源ボタンではなく「ASSIST」ボタンを押すと、そのブートローダーが呼び出されます。
ローハンDhruva

情報ロッドのおかげで、私は同じ問題を抱えていて、あなたの手順に従ってそれを部分的に修正しました。GRUBは正常に機能したので、Win7のエントリを追加しようとしましたが、現在はGRUBが表示されず、Ubuntuを直接起動しています。修正の理由と方法はありますか?また、EFIパーティションはsda1であり、Winはsda3です。この行のXは「set root = '(hd0、gptX)'」が1または3に等しいでしょうか?両方試してみました!
barro32

@ Rod、menuentry(Windows 7)はどこに追加すればよいですか?\ etc \ default \ grub?
アレカイン

4

ここでは、新しいソニーVAIO Eシリーズの同じ開始位置。答えてくれたロッドに感謝します。

誰かがウォークスルーを必要とする場合に備えて、これは私のために働いたものです:

win7とともにUSBからubuntu 12.04をインストールしました。

ライブセッションから/ dev / sda3をマウントする

  • EFI / ubuntu / grubx64.efiをEFI / Boot /にコピーします
  • EFI / Boot / bootx64.efiの名前をbootx64.efi.oldに変更します
  • EFI / Boot / grubx64.efiの名前をbootx64.efiに変更

今ではgrub2に直接起動しますが、win7エントリはありません

編集したubuntuをロードした後

/etc/grub.d/40_custom

追加

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

以降

sudo update-grub

すべてが正常に動作します


1

私は2つの異なる選択肢を提案します:

  1. Windows MBRを上書きしないで、それを使用して GRUBを起動します

  2. 起動オプションのBIOS設定(f2またはf3起動時)をUEFIからLEGACYに変更すると、通常は最後にインストールされたシステムが通常どおり起動されます


MBRはEFIコンピューターには適用されません
ベンフォイト14

0
  1. liveCD / liveUSBからブート修復を実行する
  2. ボタンをクリックしRecommended Repairます。(これにより、必要に応じてSecureBootパラメーターを含むgrub-efiの正しいパラメーターが自動的にインストールされ、UEFIファームウェアがWindowsファイルにロックされている場合にEFIファイルの名前が変更されます)。問題がある場合に表示されるURLを指定します。

ブート修復

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.