我的问题比标题描述的更复杂。我有一台用作服务器的电脑。我首先安装了一个无头 Ubuntu,因为这是我运行服务所需的全部功能。然后,为了加快服务开发速度,我又安装了标准 Ubuntu 和无头 Ubuntu。我的问题是这样的:
如果我将启动设置为无头版本,启动时却无法选择启动到有头版本。如果我将启动设置为有头版本,则可以选择启动到有头版本,但默认启动还是有头版本。我想知道是否可以 A). 为无头版本添加一个启动管理器,使其超时并默认启动到无头版本;或者 B). 编辑有头版本的启动管理器的顺序。
我的问题比标题描述的更复杂。我有一台用作服务器的电脑。我首先安装了一个无头 Ubuntu,因为这是我运行服务所需的全部功能。然后,为了加快服务开发速度,我又安装了标准 Ubuntu 和无头 Ubuntu。我的问题是这样的:
如果我将启动设置为无头版本,启动时却无法选择启动到有头版本。如果我将启动设置为有头版本,则可以选择启动到有头版本,但默认启动还是有头版本。我想知道是否可以 A). 为无头版本添加一个启动管理器,使其超时并默认启动到无头版本;或者 B). 编辑有头版本的启动管理器的顺序。
我在一些环境变量中设置了错误的路径,现在启动时感觉完全不一样了。操作系统是Raspberry Pi OS,它基于Debian。
结果:
启动后,鼠标屏幕立即变黑。单击任意鼠标按钮,会出现 2 个选项,“重新配置”和“退出”。“重新配置”似乎没有任何作用。我点击“退出”,感觉程序正在关闭并重新启动。我短暂地可以按“ctrl”+“alt”+“F1”,并短暂地看到一些命令/终端代码,然后再次加载鼠标屏幕。(术语不当,我对 Linux 很陌生)
我所做的:
我做的坏事是添加了Vulkan_SDK环境文件sudo nano /etc/environment
的路径。 (我不知道该怎么做),这对我来说真是太愚蠢了。setup-env.sh
PATH="path/to/setup-env.sh"
setup-env.sh内容:
# Copyright (c) 2015-2023 LunarG, Inc.
# source this file into an existing shell to setup your environment.
#
# See docs for in depth documentation:
# https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html
ARCH="$(uname -m)"
VULKAN_SDK="$(dirname "$(readlink -f "${BASH_SOURCE:-$0}" )" )/$ARCH"
export VULKAN_SDK
PATH="$VULKAN_SDK/bin:$PATH"
export PATH
LD_LIBRARY_PATH="$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH
VK_ADD_LAYER_PATH="$VULKAN_SDK/share/vulkan/explicit_layer.d${VK_ADD_LAYER_PATH:+:$VK_ADD_LAYER_PATH}"
export VK_ADD_LAYER_PATH
if [ -n "${VK_LAYER_PATH-}" ]; then
echo "Unsetting VK_LAYER_PATH environment variable for SDK usage"
unset VK_LAYER_PATH
fi
我怎样才能解决这个问题,删除环境中的这条线,并让它恢复到“正常”状态?
更换笔记本电脑的主板后,在早期启动时出现以下错误:
ucsi_acpi USBC000:00: error -ENODEV: con1: failed to get usb role switch
ucsi_acpi USBC000:00: error -ENODEV: PPM init failed
据我所知,USB-C 端口工作正常。但我想了解这些错误的含义,以及如何消除它们。
这是否只是一些需要禁用/启用的 UEFI bios 设置?显然,在更换过程中,这些设置已重置为出厂默认设置。
假设我有一个 LUKS 分区,它加密了根文件系统,其密钥驻留在另一个文件系统中。
(mapped-devices (list
(mapped-device
(type (luks-device-mapping-with-options #:key-file "/early-mount/luks-key"))
(source "/dev/sda1")
(target "operating-system")
)
))
我如何config.scm
在 LUKS 解密步骤之前通过文件指示 Guix 挂载第二个文件系统?
我尝试(needed-for-boot? #t)
在第二个文件系统上进行设置,但检查生成的 initrd 脚本时,它仍尝试在挂载之前解密。
(file-system
(mount-point "/early-mount")
(device (file-system-label "early-mount"))
(type "ext4")
(needed-for-boot? #t) ; This doesn't move it to #:pre-mount
)
(filter)
还尝试通过和设置根文件系统的依赖关系,(file-system-mount-point-predicate)
但出现错误:
错误:文件系统:未绑定变量
这是有道理的,因为它正处于定义之中(file-systems)
(file-systems (cons*
(file-system ...) ; early-mount definition
(file-system
(mount-point "/")
(device "/dev/mapper/operating-system")
(type "ext4")
(dependencies (cons*
(filter
(file-system-mount-point-predicate "/early-mount")
file-systems ; This is currently being defined so it's not available yet
)
mapped-devices
))
)
%base-file-systems
))
尝试为第二个文件系统创建一个局部变量(let)
,目的是将其插入到(file-systems)
以及下,(dependencies)
但出现错误:
错误:(let ...):无效的字段说明符
(let
(
(early-mount
(file-system
(mount-point "/early-mount")
(device (file-system-label "early-mount"))
(type "ext4")
(needed-for-boot? #t)
)
)
)
(file-systems (cons*
early-mount
(file-system
(mount-point "/")
(device "/dev/mapper/operating-system")
(type "ext4")
(dependencies (cons*
early-mount
mapped-devices
))
)
%base-file-systems
))
)
然后尝试重复第二个文件系统(file-system)
条目,这实际上允许我部署配置:
(file-systems (cons*
(file-system ...) ; early-mount definition
(file-system
(mount-point "/")
(device "/dev/mapper/operating-system")
(type "ext4")
(dependencies (cons*
(file-system ...) ; early-mount definition, copy/pasted
mapped-devices
))
)
%base-file-systems
))
/early-mount
然而,这会在启动期间尝试提示我输入密码,这让我相信在尝试打开 LUKS 之前无法挂载。
我最近在 Reddit 上问了一个关于如何在我的 DC Roma Laptop II 上安装 Arch 的问题。其中一个建议是改用 Alpine,因为它支持 RISC-V。查看下载页面,确实有一个 RISC-V“Mini Root Filesystem”可供下载。下载后,我尝试将其转换为 iso(类似于我在 Reddit 帖子中描述的内容):
mkisofs -o alpine_riscv.iso ~/Downloads/alpine-minirootfs-3.20.3-riscv64
为了将其复制到我打算从中启动的 Micro SD 卡上,我运行了:
sudo dd if=alpine_riscv.img of=/dev/sdb bs=64M conv=fsync oflag=direct status=progress
尝试启动插入 Micro SD 的计算机后,我只得到一个空白屏幕。我真的不知道该如何处理“迷你根文件系统”才能真正构建正确的映像。(我习惯于只刷入预构建的 ISO 文件。我怀疑我做错了什么。)是否有一些命令行实用程序可以帮助将迷你根文件系统转换为我可以用来启动的 ISO 映像?
使用全盘加密时,/boot
通常需要一个未加密的分区来存储引导加载程序和预引导环境。
这些initcpio
或initramfs
图像需要在解密之前加载,因此它们可以被(邪恶女仆)攻击者访问,攻击者可以用自己的替换它们,或偷偷修改它们以替换包含的ssh
服务器或tty
控制台,从而将解密密码/密钥泄露给外界。
防止(或检测)篡改内容的理想方法是什么/boot
?滚动我们自己的签名密钥,对/boot
图像进行签名,并希望主板实现的 BIOS、安全启动和安全密码中没有允许(邪恶女仆)攻击者注册他们自己的密钥的错误?
initcpio
当我们检测到系统已解锁并由不正确的签名加载/使用不正确的签名时,是否使用 PGP 对图像进行签名、清空内存并停止系统initramfs
?
即使是 TPM 工具(如 Clevis)也只能在系统设置并运行后提供保护。清除 TPM 后(例如固件升级后),如何确保信任?
/boot
或者每次我们想要在断电后启动系统时,唯一可靠的保护是否是从外部提供我们自己的保护?
我有一个双启动系统,AVLinux(基于 Debian 的发行版)和 Windows 11 安装在两个单独的分区中,我的 PC 使用 EFI。我的系统运行良好,直到昨天,当我启动 PC 时,Grub 的黑屏显示未知文件系统。错误消息和grub rescue>控制台以输入命令。
根据这个问题的第一个答案,我设法从 Grub 的救援控制台启动 Grub 的菜单,使用ls
这个控制台找到安装了 grub 的 Linux 分区,然后发出命令手动启动Grub 文件夹中的正常(hd0,gpt4)
内核模块。假设这是我的 Linux 分区(安装了 Grub),我发出了:
set prefix=(hd0,gpt4)/boot/grub
insmod normal
normal
获取 Grub 菜单并成功启动两个操作系统
不幸的是我必须在每次启动时发出相同的命令因为我无法摆脱那个屏幕......
我已经遵循了几乎所有的建议(比如我之前链接的建议),建议使用
sudo grub-install /dev/sda
sudo update-grub
命令(其中/dev/sda
指的是您要重新安装 Grub 的驱动器,对我来说应该是/dev/nvme0n1
)但没有任何变化。
当然,我也尝试遵循类似这样的建议,建议从 Linux 的实时版本(对我来说是 Kali Linux)重新安装 Grub,方法是挂载我的 Linux 分区(再次,安装了 Grub 的分区/boot/grub
)、我的 EFI 分区、efivars 分区,然后使用 chroot 发出 grub-install:
sudo mount /dev/sdXY /mnt
sudo mount /dev/sdXX /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
mount -t efivarfs none /sys/firmware/efi/efivars
grub-install /dev/sdX
update-grub
exit
其中:sdX
= 磁盘 | sdXX
= efi 分区 | sdXY
= 系统分区(安装了 Grub 的分区)
但什么也没有改变。
我还尝试过efibootmgr
改变 bootorder 的顺序并禁用一些 bootnums,但没有结果。
我甚至尝试使用启动修复程序,并读取它解决了许多问题,但是 - 再次 - 没有任何效果......
似乎在启动的最初阶段,Grub 试图从错误的位置启动其菜单,因此我必须手动设置位置/boot/grub
才能获取菜单屏幕。不幸的是,我不知道如何检查这一点,如果可以,如何配置 Grub 以在正确的位置查找...
顺便说一句,我不确定,但我认为问题是在 Windows 更新后出现的。
/dev/nvme0n1p3
我的 Windows 分区在哪里,/dev/nvme0n1p4
Linux 的分区在哪里
这里是通过发出efibootmgr设置后获得的输出efibootmgr -v
:
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,0002,0001,0006,0003,0007,0008,0009,000A
Boot0000* Windows Boot Manager HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\MX21\grubx64.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
Boot0001* ubuntu HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* MX21 HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\MX21\grubx64.efi)
Boot0003* debian HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\debian\grubx64.efi)
Boot0006* mx HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\mx\grubx64.efi)
Boot0007* Windows Boot Manager HD(1,GPT,8b97638e-a366-4f45-be4e-60f9ef16f8dc,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)..BO
Boot0008* UEFI:CD/DVD Drive BBS(129,,0x0)
Boot0009* UEFI:Removable Device BBS(130,,0x0)
Boot000A* UEFI:Network Device BBS(131,,0x0)
有人对此有线索吗?我不知道该尝试什么了……
我正在尝试使用主 LFS 书籍版本 12.1从头开始构建 linux(LFS)作为一个教育项目,但是,当我到达 bottable 章节时,我发现我必须使用 EFI 支持启动我的 LFS,因为我的主要机器是 macbook pro 2014,所以我遵循 BLFS 指南使用 GRUB 设置使用 UEFI 的启动过程,和https://www.linuxfromscratch.org/blfs/view/12.1/postlfs/grub-efi.html;
当我重新启动机器时,我得到了
错误磁盘‘hd0,2’未找到
我通过使用修复它
设置根=(hd1,gpt4)
下一个问题是
未找到 /boot/vmlinuz-6.7.4-lfs-12.1
我检查了我的启动文件,发现文件名存在于不同的名称/boot/vmlinuz-6.7.4-lfs-12.1-systemd下,所以我将其重命名为/boot/vmlinuz-6.7.4-lfs-12.1。
不,当我再次启动时,从启动菜单中选择 lfs 系统后出现黑屏。
附加的文件
fdisk -l /dev/sda 输出
Device Start End Sectors Size Type
/dev/sda1 40 409639 409600 200M EFI System
/dev/sda2 411648 17807359 17395712 8.3G Linux swap
/dev/sda3 488847608 490117143 1269536 619.9M Apple boot
/dev/sda4 19855360 81295359 61440000 29.3G Linux filesystem
有什么帮助吗!
我使用 Ubuntu 24.04 重新安装了旧的 HP ProBook 6460b。
它不再在 SSD 上启动(同一问题https://askubuntu.com/questions/1490970/my-hp-does-not-boot-after-fresh-ubuntu-22-04-install)。
这不是 BIOS 启动顺序问题:硬盘在 USB 之后立即列出,并且之前可以正常工作。因此,Ubuntu 安装过程中的某些问题导致了此问题。
如果我将磁盘移至 USB 适配器电缆,那么我就可以从 SSD 正常启动。
因此只要通过 USB,机器就可以从磁盘正常启动。
我如何构建一个具有足够信息以将启动过程引导至 SSD 的微型 USB 磁盘?(按老话说,我考虑的是根设备 = 内部 SSD /dev/sda 的 GRUB)。
HP 6460b 已对 UEFI 进行了实验性支持。无论启用还是禁用 UEFI,都可以从 USB 启动。