How to restore ArchLinux boot entries: Difference between revisions
Jump to navigation
Jump to search
(6 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
后来问 ChatGPT,还有一些问题可能也有启动项丢失的表象: | 后来问 ChatGPT,还有一些问题可能也有启动项丢失的表象: | ||
# grubx64.efi 或 grub.cfg 被误删 | |||
# bios 里关闭了 UEFI 或启动了 legacy | |||
# CMOS 电池没电了 | |||
# 硬盘坏了 | |||
如果 <code>efibootmgr -v</code> 里没有 Boot#### 指向 /EFI/GRUB/grub.efi,那就是主板忘记 EFI 启动项了。 | |||
== 修改字号 == | == 修改字号 == | ||
终端的字号都是能瞎眼的,改大字号很有必要。 | 终端的字号都是能瞎眼的,改大字号很有必要。 | ||
<syntaxhighlight lang="bash" line> | <syntaxhighlight lang="bash" line> | ||
cd /usr/share/kbd/consolefonts # | cd /usr/share/kbd/consolefonts # 该文件夹有几十种字体,带字号。随便找个后几位大字号的就行 | ||
setfont ter-132n | setfont ter-132n... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 25: | Line 31: | ||
mount /dev/sdb1 /mnt/boot | mount /dev/sdb1 /mnt/boot | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 挂载辅助 == | |||
<syntaxhighlight lang="bash" line> | |||
# 注意,以下文件夹不需要手动创建 | |||
mount -t proc /proc /mnt/proc | |||
mount -t sysfs /sys /mnt/sys | |||
mount --rbind /dev /mnt/dev | |||
mount --rbind /run /mnt/run | |||
</syntaxhighlight> | |||
== 安装 grub == | |||
<syntaxhighlight lang="bash" line> | |||
arch-chroot /mnt # 这样就进入了真实的系统,对硬盘的操作将真实存在 | |||
cat /etc/fstab # 查看曾经的挂载 | |||
</syntaxhighlight> | |||
一般挂载情况里得有类似的: | |||
<pre> | |||
/dev/sdb2 / btrfs subvol=@,defaults 0 0 | |||
/dev/sdb1 /boot vfat defaults 0 0 | |||
</pre> | |||
<syntaxhighlight lang="bash" line> | |||
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB | |||
grub-mkconfig -o /boot/grub/grub.cfg | |||
efibootmgr -v # 应该能看到 GRUB 项 | |||
exit | |||
cd / | |||
umount -lR /mnt | |||
reboot | |||
</syntaxhighlight> | |||
== 其他 == | |||
<code> pacstrap /mnt grub linux </code> 应该也能修复损坏过的 /boot。未测试。 |
Latest revision as of 17:03, 11 July 2025
Fx 问题
到底是启动项丢失,还是别的问题导致没有启动项?变量 x 不同,函数 F 不同。
当我遇到开机没有启动项,又没有任何报错时,我最明智的猜测只能是“启动项丢失”这个问题了。
后来问 ChatGPT,还有一些问题可能也有启动项丢失的表象:
- grubx64.efi 或 grub.cfg 被误删
- bios 里关闭了 UEFI 或启动了 legacy
- CMOS 电池没电了
- 硬盘坏了
如果 efibootmgr -v
里没有 Boot#### 指向 /EFI/GRUB/grub.efi,那就是主板忘记 EFI 启动项了。
修改字号
终端的字号都是能瞎眼的,改大字号很有必要。
cd /usr/share/kbd/consolefonts # 该文件夹有几十种字体,带字号。随便找个后几位大字号的就行
setfont ter-132n...
挂载 ESP
ESP 指 EFI system partition。挂载系统启动分区。对我来说是:
/dev/sdb2 = /
。它是 vfat 格式/dev/sdb1 = /boot
。它是 btrfs 格式
切记,以上两种格式,挂载方式不同,因为这个小坑我浪费了至少三小时。
mount -o subvol=@ /dev/sdb2 /mnt # 这一步中的 @ 极其重要,它是 btrfs 格式对 / 的设定,具体原因我不知道,总之它相当于传统意义上的 /
mkdir -p /mnt/boot
mount /dev/sdb1 /mnt/boot
挂载辅助
# 注意,以下文件夹不需要手动创建
mount -t proc /proc /mnt/proc
mount -t sysfs /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount --rbind /run /mnt/run
安装 grub
arch-chroot /mnt # 这样就进入了真实的系统,对硬盘的操作将真实存在
cat /etc/fstab # 查看曾经的挂载
一般挂载情况里得有类似的:
/dev/sdb2 / btrfs subvol=@,defaults 0 0 /dev/sdb1 /boot vfat defaults 0 0
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
efibootmgr -v # 应该能看到 GRUB 项
exit
cd /
umount -lR /mnt
reboot
其他
pacstrap /mnt grub linux
应该也能修复损坏过的 /boot。未测试。