efibootmgr
は、EFIブートメニューに無効なエントリを作成しています。たとえば、efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager"
は、起動メニューに起動できない日本語の文字を追加します。
一方、bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
は問題なく機能します。
ここで、refind
を通過するのではなく、vmlinuz-linux
を直接起動したいと思います。パラメータをカーネルに渡す方法について誰かが考えていますか?パラメータがない場合は:bcfg boot add 3 fs0:\vmlinuz-linux "linux"
ですが、initrd=\initramfs-linux.img root=/dev/sda2
を追加するにはどのオプションを使用する必要がありますか?
ありがとう
私は同じ状況に直面しています。この解決策には、addとインラインで、または追加コマンドとして-optパラメーターを使用することが含まれると思います。これまでのところ、すべてのパラメーターを引用符で囲まれた文字列に入れることに成功していません。次の試みは、editを使用してファイルを作成し、-optを使用してファイル名を渡すことです。
成功した場合は、このスレッドを更新してください。
そのため、uefiシェルでは、編集を使用して、カーネルと同じ場所にあるメディア上にoptファイルを作成しました。その中で、カーネルオプションを1行に配置しました。次に、コマンドbcfg boot -opt 0 FS0:\ filenameを使用しました。構成に合わせて、別のFS number、-opt number、filenameを使用する必要がある場合があります。
私はある特定の(Supermicro)マザーボードで同様の問題を抱えていました。テキストファイルを使用するというSteveの提案は機能しますが、もう少しニュアンスがあります。私は以下のプロセスを文書化しようとしました:
bcfg
を利用できない場合は、最初にEFI2.xシェルのコピーを入手する必要があります。マザーボードのファームウェアにはおそらく1.xがあります。 Arch wiki に詳細がありますが、ほとんどの64ビットの最新システムではShell.efi
を取得する必要があります here そして名前をshellx64.efi
に変更し、EFIシステムパーティションのルートに直接配置します。マザーボードがLaunch EFI Shell from filesystem device
を提供している場合は、それを使用してください。それ以外の場合は、組み込みのシェルを使用して、更新されたシェルを起動できます。詳細については、 wiki を参照してください。
2.xシェルに入ったら、ブートオプションが存在することを確認する必要があります。オプションはbcfg boot dump -b
で一覧表示できます(-b
はmore
のようにポケットベルを有効にします)。存在しない場合は、できればリストの一番上に追加する必要があります。 map -b
でファイルシステムを一覧表示し、fs0:
のようにfs
で始まるエントリを探し、ls fs0:\
、ls fs0:\EFI\
などのls
を使用してディレクトリを探索できます。
ブートローダーのパス(および正しいfs
デバイス)を見つけたら、それを追加します(元の質問のように):
bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
これにより、4番目のブートエントリとして追加されます(0、1、2、3から数えます)
ブートオプションを追加したら(bcfg boot dump -b
で確認)、オプションのデータ(ブートパラメーター)を追加する必要があります。スティーブが簡単に述べたように、これを行う最も堅牢な方法は、これらのパラメータをファイルに保存してから、bcfg -opt
を使用してインポートすることです。ただし、私が知る限り、このはオプションを追加するので、最初にブートオプションをbcfg boot rm
して、手順2のように再読み込みすることをお勧めします。クリーンなエントリを取得したら、オプションのデータを追加できます。例えば:
edit fs0:\EFI\refind\options.txt
これにより、ファイルエディタが開きます。オプションを(1行で)入力し、F2キーを押して保存します。 F3を押して終了します。このファイルはOS内から編集することもできますが、mustUTF-16(LE、リトルエンディアン)として保存する必要があります。 EFIシェルのエディターはそれを自動的に行います。
次のステップは、オプションをインポートすることです。
bcfg boot -opt 3 fs0:\EFI\refind\options.txt
繰り返しますが、3
はブートエントリを指定します。これは、追加したものと一致する必要があります。このコマンドを複数回実行しないでください。オプションを変更する前に、エントリをrm
および再add
する必要があります。
bcfg boot dump -v -b
を使用してブートオプションとオプションのデータを確認します。
最初に入力したコマンドは正しいです。別のコマンドでオプションを追加します。あなたの特定のケースでは、それは次のとおりです。
Shell> bcfg boot -opt 3 "initrd=\initramfs-linux.img root=/dev/sda2"
efibootmgr
に関する私のドキュメントには、-p
がパーティション番号を指定するためのものであることが示されていますが、質問では、値にY
を使用しているようです。それがタイプミスでなければ、メニューに奇妙な文字が表示されて起動に問題が発生した理由を説明できます。
パラメータの受け渡しについては、ドキュメントを読んだ最初の数回は注意を逸したスイッチ-@
があります。ファイル名を指定すると、そのファイルから1行のパラメーターが読み取られます。
ドキュメントには、ファイル名として-
を使用できると書かれていますが、それを試したところ、テキストを入力した後、続行できませんでした。 enter
または^D
を押しても効果がないように見えましたが、^C
は変更を加えずにプログラムを終了しました。
ハードウェアをいじる前にVM)で実験したい場合は、次のことが役立つ場合があります。ただし、ディストリビューションのOVMFパスを調整する必要があります。
/usr/share/edk2-ovmf/OVMF_VARS.fd
を現在のディレクトリにコピーします-qemuはefi構成の変更をこのファイルに書き込みます。vvfat
)。これからはhda
と呼びます。hda
にコピーします。efibootmgr
が埋め込まれたinitrdがない場合は、それが組み込まれているinitrdを見つけるかビルドして、hda
に配置します。 (一般的なinitrdが機能する場合があります。これは、通常、ルートボリュームが見つからない場合に緊急モードに入ることができるためです。)qemuを開始します。次のコマンドを使用します。
qemu-system-x86_64 -drive if=pflash,format=raw,unit=0,readonly=on,file=/usr/share/edk2-ovmf/OVMF_CODE.fd -drive if=pflash,format=raw,unit=1,readonly=off,file=OVMF_VARS.fd -enable-kvm -cpu Host -m 1024 -usb -device usb-tablet -netdev user,id=mynet -device virtio-net-pci,netdev=mynet -hda fat:rw:hda -boot menu=on
hda
ディレクトリを変更しないでください。-boot menu=on
の部分に注意してください。必要に応じて、起動中にESC
を押すと、uefi構成に入ります。そこから、特定のエントリを起動したり、作成/削除/編集したりできます。起動するファイルが見つからない場合は、EFIシェルにドロップします。
bcfg
を使用してエントリを表示/編集できます。または、Linuxカーネルを起動することもできます。
fs0:
bzImage.efi initrd=\absolute\path\to\initrd arg arg arg
/sys/firmware/
の下のefiファイルを調べたり、efibootmgr
を試したりすることができます。楽しい!/dev/sda
の代わりに次のように使用する必要があります。次のようにpartuuid
またはuuid
も使用する必要があります。
--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