web-dev-qa-db-ja.com

外部メディアなしでブートローダー(systemd-bootまたはGRUB)を再インストールしますか?

最近、Lenovo Miix-700のBIOSを更新しましたが、すぐに後悔しました。 Windowsのアップデート後にウェブカメラの問題を修正したいと思っていましたが、当然のことながら、BIOSアップデートによりEFIパーティションが上書きされ、ウェブカメラは修正されませんでした。新しいArchブート可能USBを作成して、chrootして再インストールできるようにしようとしましたが、アップデートによって単一のUSBポートもノックアウトされました(ハブの誤動作?)。現在、私のデジタルライフ全体は、私がアクセスできないパーティションにあります*。 Archフォーラムで質問したかったのですが、登録の質問では、Archの下でコード行を実行できる必要があるため、ここにいます。助言がありますか?

* Windowsのプログラムを使用してファイルに技術的にアクセスできますが、それらのファイルを使用するために必要なさまざまなプログラムにアクセスできません。

編集:telcoMによって提案されたとおり。 Arch関連のものとして飛び出すものはありません。

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {d7ec5199-eb30-11e9-bd4c-806e6f6e6963}
                        {d7ec519a-eb30-11e9-bd4c-806e6f6e6963}
                        {d7ec519b-eb30-11e9-bd4c-806e6f6e6963}
                        {d7ec519c-eb30-11e9-bd4c-806e6f6e6963}
                        {d7ec519d-eb30-11e9-bd4c-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume1
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {86dba24d-a094-11e9-9adb-bd1dd03f5338}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec5196-eb30-11e9-bd4c-806e6f6e6963}
description             Setup

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec5197-eb30-11e9-bd4c-806e6f6e6963}
description             Boot Menu

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec5198-eb30-11e9-bd4c-806e6f6e6963}
description             Diagnostic Splash

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec5199-eb30-11e9-bd4c-806e6f6e6963}
description             ATA HDD: RTHMB128VBM4EWDL

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec519a-eb30-11e9-bd4c-806e6f6e6963}
description             USB FDD:

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec519b-eb30-11e9-bd4c-806e6f6e6963}
description             USB CD:

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec519c-eb30-11e9-bd4c-806e6f6e6963}
description             USB HDD:

Firmware Application (101fffff)
-------------------------------
identifier              {d7ec519d-eb30-11e9-bd4c-806e6f6e6963}
description             PCI LAN:

2
deasmhumnha

BIOSアップデートが実際に既存のEFI NVRAMブート変数を一掃したようです。 Windowsは、組み込みのファームウェアサポートまたは「自己修復」によって回復しました。Windowsは、UEFIブートローダーをESPパーティションの\EFI\BOOT\BOOTx64.efiにも配置します。これは、ディスクのブートローダーを明示的に識別するNVRAMブート変数がない場合のフォールバックUEFIブートローダー。これにより、Windowsがロードされ、見つからない場合は自動的にNVRAMブート変数が復元されます。

BIOSアップデートで元のUEFI NVRAMの内容が失われたため、システムのセキュアブートキーをカスタマイズした場合、それらの設定も工場出荷時のデフォルトに戻っている可能性があります。 Archへのアクセスを回復し、元のセキュアブートキーのカスタマイズ手順を再度実行してそれらのカスタマイズを復元できるようになるまで、今のところセキュアブートを無効にする必要がある場合があります。

Archの場合、NVRAMブート変数の復元は、Arch UEFIブートを設定できるさまざまな方法があるために複雑です。 EFISTUB、GRUB、またはrEFIndを使用する場合があります。したがって、最初のステップは、EFIシステムパーティションにアクセスし、そこに実際にあるものを見つけることです。


Windowsでは、コマンドプロンプトを管理者として起動し、次のコマンドを実行することで、EFIシステムパーティションにアクセスできます。

mountvol X: /S
X:
dir

EFIシステムパーティションのルートディレクトリのリストが表示されます。 GUIアクセスが必要な場合は、start Explorerを実行して、標準のファイルエクスプローラーウィンドウを管理者として実行できます。そのウィンドウを使用する場合、標準のUACプロンプトで保護されないため、そのウィンドウには十分注意してください。

ArchのブートにEFISTUBを使用している場合、EFIシステムパーティションのルートディレクトリにvmlinuz.efiまたはvmlinuz-linuzとinitramfsファイルinitramfs-linux.imgが存在する可能性があります。それらの正確なパス名を書き留めます。最初に使用したインストール手順のバージョンによっては、\EFI\Archサブディレクトリにある場合もあります。

GRUBまたはrEFIndのようなブートローダーを使用している場合、それらは\EFIディレクトリのサブディレクトリにあります。そこに移動し、ディレクトリリストを確認します(ファイルエクスプローラーウィンドウ、またはcd EFI、次にdirの順にクリックします。Microsoftおよびbootという名前の少なくとも2つのディレクトリが表示されます。MicrosoftディレクトリにはWindows UEFIブートローダーが含まれ、bootディレクトリには開始に必要な部分のみが含まれていますNVRAMブート変数が失われた場合に備えて。

Archのインストールでは、サブディレクトリ\EFI\Arch(GRUBを使用する場合)、または\EFI\refind(rEFIndを使用する場合)が存在する可能性があります。そのディレクトリに移動して、実際のブートローダーファイルの名前を確認します。\EFI\Arch\grubx64.efiまたは\EFI\refind\refind_x64.efiの場合があります。

ESP上のArchブートローダーのパス名がわかったら、そのためのNVRAMブート変数を作成できます。 Windowsでは、bcdeditコマンドを使用してこれを行うことができます。

bcdedit /create /d "Arch Linux" {fwbootmgr}

このコマンドは、GUID文字列を出力します。これは、後続のbcdeditコマンドで必要になります。簡潔にするために、これを{GUID}と呼びます。

bcdedit /set {GUID} device partition=X:
bcdedit /set {GUID} path <your bootloader pathname here>
bcdedit /set {fwbootmgr} default {GUID}

Windowsのバージョンによっては、最後のコマンドでエラーが返される場合があります。その場合は、別のフォームを使用してください。

bcdedit /set {fwbootmgr} displayorder {GUID} /addfirst

最後に、ESPへのアクセスを切断します。起動している場合は、管理者として実行しているエクスプローラーウィンドウを閉じ、コマンドプロンプトで次のコマンドを実行します。

c:
mountvol X: /D

システムを何らかの種類のLinux(ネイティブUEFIスタイルで、カーネルがUEFIランタイムサービスを利用できるようにする)で起動できる場合は、efibootmgrコマンドを使用して、NVRAM変数を非常に簡単なコマンドで再作成できます。

efibootmgr --create --disk /dev/sda --loader <your bootloader pathname here> --label "Arch Linux Bootloader" --verbose

必要に応じて、--diskオプションの値を調整して、ESPパーティションを含む実際のディスクに一致させます。

注: Linuxシェルはバックスラッシュを特殊なエスケープ文字として使用するため、ブートローダーパス名のWindowsスタイルのバックスラッシュをLinuxスタイルのフォワードスラッシュに変換するか、efibootmgrのブートローダーパス名を入力するときにバックスラッシュを2倍にする必要があります、つまり、efibootmgrコマンドラインでブートローダーのパス名が次のようになるようにします。

efibootmgr [...] --loader \\EFI\\Arch\\grubx64.efi [...]

EFISTUBを使用している場合は、efibootmgrコマンドでLinuxカーネルブートパラメーターを指定するための追加パラメーター(initramfsファイルの名前を含む)が必要になります。

efibootmgr --disk /dev/sdX --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose

Windowsのbcdeditコマンドでこれらの追加のパラメーターを指定することは可能かもしれませんし、可能でないかもしれません-残念ながら、現時点ではそのためのWindows構文を見つけることができません。

1
telcoM