UEFIを介して正しいOSに直接再起動する方法を学んだ方法

こんばんは、ハブラハブル!


今日は、LinuxからWindowsにリブートし、ワンクリック(ダブルクリック)で再起動する方法を学びます。


画像


与えられた:



必要です:



注:



Linux:


Linuxはあなたの仲間です
Linuxはコンピューターを操作するための優れた基盤であるため、必要なものはすべてリポジトリにあり、コミュニティの集合的な心はすべてを知っており、いつでも支援する準備ができています。 したがって、インターネットの簡単な調査の後、 efibootmgrを配置します


こんな感じでした
sudo pacman -S efibootmgr 

OK、今すぐ実行:


 sudo efibootmgr 

このようなものが見えます
 Timeout: 1 seconds BootOrder: 0001,0000 Boot0000* Windows Boot Manager Boot0001* rEFInd Boot Manager 

熱心な読者はおそらく結論に何かが間違っていることに気づいたでしょうが、15分後には問題なくOS間を飛ぶだろうという考えに触発され、それに十分な注意を払っていませんでした。
ドキュメントの3分で、必要なパラメーター「 -n 」が見つかります。これは、カスタムブート順序を1回だけ設定します。 このコマンドを実行しようとします:
解決策


 sudo efibootmgr -n 0000 && sync && reboot 

そして、必要に応じてWindowsを見つけます。 次に、このコマンドをscript / alias / *。Desktop-fileに記述して、すべてがうまくいく様子を楽しみます。


Windows:


典型的なウィンドウ
それはすべて、Windows用のefibootmgrの類似物の検索から始まりました。これは、もちろん、純粋な形では存在しません。 良心を落ち着かせるために、Linuxサブシステムを使用しようとしましたが、これはもちろん機能しませんでした。
インターネットで簡単に検索したところ、 bcdeditユーティリティにはNVRAMを変更するための同様の機能があることがわかりました 。 素晴らしい、私は管理者の下からPowerShellを起動し、書く


 bcdedit /enum firmware 

これが私が見たものです
 Firmware Boot Manager --------------------- identifier {fwbootmgr} displayorder {6893bb38-946b-11e7-b175-9301bd8a88f4} {bootmgr} timeout 1 Windows Boot Manager -------------------- identifier {bootmgr} device partition=\Device\HarddiskVolume2 path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale ru-RU inherit {globalsettings} default {current} resumeobject {6893bb40-946b-11e7-b175-9301bd8a88f4} toolsdisplayorder {memdiag} timeout 30 Firmware Application (101fffff) ------------------------------- identifier {6893bb38-946b-11e7-b175-9301bd8a88f4} device partition=\Device\HarddiskVolume2 path \EFI\REFIND\REFIND_X64.EFI description rEFInd Boot Manager 

Linuxはどこにありますか? どこにロードしますか? 私はWindowsが嫌い
実際、それはWindowsのせいではないことが判明しましたが、私(そう、注意深いユーザーにとってはその瞬間です)、そしてその理由は次のとおりです:rEFIndは、正常に動作するために通常インストールするだけでよい素晴らしいユーティリティです。 彼女は、すべての.efiファイル、異なるカーネルの異なるディストリビューションを取得する方法を知っており、アイコンを代用します。 ツールではなく、魅力。 しかし、対応する.efiファイルが見つからなかったため、UEFIはLinuxについて何も知らなかったことが判明したため、これは私を困らせました。
したがって、Linuxに再起動し、 systemd-boot (bootctl)を構成します 。 これですべてが次のようになります。


 Timeout: 1 seconds BootOrder: 0001,0003,0000,0002 Boot0000* Windows Boot Manager Boot0001* rEFInd Boot Manager Boot0002* Linux Boot Manager Boot0003* Manjaro 

戻ってもう一度実行します。


 bcdedit /enum firmware 

これが今見たもの
 Firmware Boot Manager --------------------- identifier {fwbootmgr} displayorder {6893bb38-946b-11e7-b175-9301bd8a88f4} {bootmgr} {ff0bc716-c088-11e7-bf74-000acd2dac7d} {ff0bc716-c088-11e7-bf74-000acd2dac7d} timeout 1 Windows Boot Manager -------------------- identifier {bootmgr} device partition=\Device\HarddiskVolume2 path \EFI\Microsoft\Boot\bootmgfw.efi description Windows Boot Manager locale ru-RU inherit {globalsettings} default {current} resumeobject {6893bb40-946b-11e7-b175-9301bd8a88f4} toolsdisplayorder {memdiag} timeout 30 Firmware Application (101fffff) ------------------------------- identifier {6893bb38-946b-11e7-b175-9301bd8a88f4} device partition=\Device\HarddiskVolume2 path \EFI\REFIND\REFIND_X64.EFI description rEFInd Boot Manager Firmware Application (101fffff) ------------------------------- identifier {ff0bc716-c088-11e7-bf74-000acd2dac7d} device partition=\Device\HarddiskVolume2 path \EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI description Linux Boot Manager Firmware Application (101fffff) ------------------------------- identifier {ff0bc717-c088-11e7-bf74-000acd2dac7d} device partition=\Device\HarddiskVolume1 path \EFI\manjaro\vmlinuz-4.13-x86_64 description Manjaro 

ここで言及する価値があるのは、 redditユーザーが問題の解決に役立ったということです。 彼らのおかげで、次のステップがあります。


 bcdedit /bootsequence {ff0bc716-c088-11e7-bf74-000acd2dac7d} 

引数は、必要なオプションの識別子です-Linux Boot Manager。


トラブルシューティング

Powershellでは、このコマンドを正常に実行できません。


 The entry list data is not valid as specified. 

これは、Microsoftが定期的に何かを壊すことを好むという事実のためです。 解決策はシンプルでエレガントです-古典的なCMDと呼び、その中で動作します。 これはチームが行うことができます。


 cmd 

再起動して、ブート順序が変更されていないことを確認し、BootOrderの最初の要素(rEFIndがありました)で終了し、Windowsを選択すると、DOS時間から\ EFI \ SYSTEMD \ SYSTEMD-BOOTX64と表示されるひどいハローが表示されます。 EFIが見つかりません。 はい、Windowsブートローダーのパラメーターを変更しましたが、UEFIは変更しませんでした。
この間違いとの戦いは私をすべての休日に連れて行ったが、良いことは何もなかった。 このために、C ++で小さなプログラムを書くことをすでに考えていました(これは、EasyUEFIなどのソフトウェアの存在から可能です)。
しかし、次のサイトでは、まさにそのようなデザインを見つけました


  bcdedit /set {bootmgr} path .... 

それから、bcdeditに何をどこに書くかを直接指示できることがわかりました。 さらに、推測のみをチェックする価値がありました:
解決策


 bcdedit.exe /set {fwbootmgr} bootsequence {ff0bc716-c088-11e7-bf74-000acd2dac7d} /addfirst 

ここで重要なのは、{bootmgr}ではなく(デフォルトでは明らかにそうであるように)書き込むのではなく、UEFI設定である{fwbootmgr}に書き込むことです。
再起動すると、すべてが希望どおりに機能します。 この問題をbat / lnkに保存し、追加します


 shutdown /r /t 0 

管理者の下から起動を公開し、完了です!
ご清聴ありがとうございました! 私は、コメントでの技術的な部分についてのコメント、デザインに関するコメント、PMでとてもうれしいです。



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


All Articles