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"
工作得很好。
现在我想直接启动,vmlinuz-linux
而不是通过refind
。有人知道如何将参数传递给内核吗?没有参数的话是:bcfg boot add 3 fs0:\vmlinuz-linux "linux"
但我需要使用什么选项来添加initrd=\initramfs-linux.img root=/dev/sda2
?
谢谢
答案1
我在某款 (Supermicro) 主板上也遇到过类似的问题,虽然 Steve 建议使用文本文件,但还是有些微妙之处。我尝试记录以下过程:
如果你没有
bcfg
,你首先需要获取一份 EFI 2.x shell。主板固件可能有 1.x。Arch 维基有更多详细信息,但对于最多64 位现代系统,你需要Shell.efi
从这里并重命名它shellx64.efi
并将其直接放置在 EFI 系统分区的根目录中。如果您的主板提供了Launch EFI Shell from filesystem device
,请使用它。否则,您可以使用内置 shell 来启动更新的 shell。请参阅维基百科了解更多信息。进入 2.x shell 后,您需要确保您的启动选项存在。您可以使用 列出选项
bcfg boot dump -b
(-b
启用分页器,如more
)。如果它不存在,您需要添加一个,最好将其添加到列表顶部。您可以浏览 - 使用 列出文件系统map -b
,查找以fs
like开头的条目fs0:
,然后使用ls
likels fs0:\
、ls fs0:\EFI\
等探索目录。找到引导加载程序的路径(和正确的
fs
设备)后,添加它(如原始问题所示):bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
将其添加为第 4 个启动项(从 0、1、2、3 开始数)
添加启动选项后(使用 进行验证
bcfg boot dump -b
),您需要添加可选数据(启动参数)。正如 Steve 简要提到的,最可靠的方法是将这些参数保存到文件中,然后使用 导入它们bcfg -opt
。但是,据我所知,这附加选项,因此最好bcfg boot rm
先关闭启动选项,然后按照步骤 2 重新添加。一旦有了干净的条目,就可以添加可选数据。例如:edit fs0:\EFI\refind\options.txt
这将打开文件编辑器。输入您的选项(一行),然后按 F2 保存。按 F3 退出。您也可以在操作系统中编辑此文件,但您必须将其保存为 UTF-16 (LE,little-endian)。EFI Shell 的编辑器会自动执行此操作。
下一步是导入选项:
bcfg boot -opt 3 fs0:\EFI\refind\options.txt
再次,
3
指定启动项。这应该与您添加的启动项相匹配。不要多次运行此命令 - 您必须rm
重新运行add
该条目,然后才能更改选项。使用 验证启动选项和可选数据
bcfg boot dump -v -b
。
答案2
我遇到了同样的情况。我相信解决方案将涉及使用 -opt 参数,无论是与 add 一起内联还是作为附加命令。到目前为止,我还没有成功将所有参数放在引号字符串中。我的下一次尝试是使用 edit 创建一个文件,并使用 -opt 传递文件名。
如果成功,请更新此线程。
因此,在 uefi shell 中,我使用 edit 在介质上与内核相同的位置创建一个 opt 文件。在其中,我将内核选项放在一行上。然后我使用命令 bcfg boot -opt 0 FS0:\filename 您可能需要使用不同的 FS 编号、-opt 编号和文件名来匹配您的配置。
答案3
您输入的第一个命令是正确的。您可以使用另一个命令添加选项。对于您的具体情况,它是:
Shell> bcfg boot -opt 3 "initrd=\initramfs-linux.img root=/dev/sda2"
答案4
您应该像这样使用它,而不是还/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