我一直在尝试安装 Arch Linux。安装完成后,它会显示 BIOS 屏幕,然后出现一条消息“未找到可启动设备”。
我现在已经重试了整个场景几次,但它仍然只显示相同的消息......
在安装时,我遵循了 ArchLinux wiki 中的非官方初学者指南。
这是我所做的:
首先,我擦除了硬盘驱动器(擦除之前安装的是 Windows Vista)并使用 gdisk 将 GPT 置于其上。然后我设置了一些分区,现在如下所示(parted 的输出):
Model: ATA ST9160310AS (scsi)
Disk /dev/sda: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB BIOS boot partition bios_grub
2 2097kB 107MB 105MB ext2 Linux filesystem
3 107MB 21.6GB 21.5GB ext4 Linux filesystem
4 21.6GB 30.2GB 8590MB linux-swap(v1) Linux swap
5 30.2GB 160GB 130GB ext4 Linux filesystem
然后我将根分区(sda2)安装到/mnt,之后还将启动和主分区(sda3和sda5)安装到/mnt/boot和/mnt/home,最后格式化并激活交换分区(sda4) 。
现在我开始安装基本系统。选择镜像后,我安装了base和base-devel。
在安装结束时,我生成了一个 fstab。
然后我最终chroot到/mnt,设置一些区域设置,设置root密码,然后安装并配置Grub2,正如所解释的那样这里。
最后我退出 chroot 环境,卸载分区并重新启动。剩下的你都知道了...它只是显示了一条消息:找不到任何可启动设备。
顺便说一句,我尝试安装它这电脑。
答案1
我遇到了同样的问题,通过搜索我发现 grub.cfg 中根/分区的 uuid 错误,你可以尝试以下操作:
- 从实时 archlinux 媒体启动
mount /dev/sdxx /mnt
(sdxx 是您的根分区)arch-chroot /mnt
grub-mkconfig -o /boot/grub/grub.cfg
grub-install
结束。
答案2
好的。评论变得有点长。这没有直接关系,只是为了解释aa55
评论。
当。。。的时候基本输入输出系统(BIOS)启动它会执行开机自检(POST),检查硬件等。然后它会根据 CMOS 给出的命令查找可启动且处于活动状态的设备(您在 BIOS 中的配置 - 依次由互补金属氧化物半导体)。当它找到偏移量为 510 的磁盘时,0xaa55
它会将磁盘的该部分(扇区 1)加载到内存中,并将控制权留给该代码的地址 0x00000。这 512 字节是主引导记录(主引导记录)。
该代码,在本例中“GRUB-启动”,除了向BIOS询问各种信息之外,还检查这些512的各个字节。在此过程中,它会找到哪个磁盘上有 GRUB 的其余部分,并将磁盘的该部分加载到内存中 - 然后该部分代码获得控制。那一个安装内核等并将控制权交给它。
使用 GPT,从 MBR 内加载的映像 GRUB 位于bios_grub
您拥有的分区中,并且足够大,等等,因此看不出这可能是错误的。
在“找不到可启动设备。”来自 BIOS 的消息 – 可能会遇到引导磁盘的 MBR 已损坏的情况,如果 MBR 结束0xaa55
并且 MBR 已损坏,通常会出现其他错误 – 或者系统只是挂起。
无论如何。这很奇怪。我注意到您没有标记为的分区“启动”。使用 GPT 是正确的,但是,尽管这是禁止的,但您可以尝试将其标记sda5
为启动。在 gparted 中:(了解到 (g)parted 也改变了不想要的 GPT)fdisk :
# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w
可能是您的 BIOS 执行的操作超出了应有的范围,并检查了 MBR 中的分区表。
编辑 - 更新评论:
AFAIK,你设置哪一个并不重要,因为它实际上并没有被使用。重点是,对谁说不“找到可启动设备”,他们就会满意。这sda1
不是传统意义上的引导分区,而是GRUB引导文件的空间。
在传统的分区布局(不是 GPT)中,通常有类似的内容:
0x000 [Master Boot Record] <- Partition table say Partition 2 is active
|
0x200 [ GRUB module 1 ] <- core.img from GRUB |
|
0x400 [ Partition 1 Swap ] |
| | |
| | |
|__________________| |
|
0x... [ Partition 2 ext4 ] |
| * Active | <- AKA boot ----------------+
| |
|__________________|
0x... [ Partition 3 ext4 ]
| |
| |
|__________________|
这意味着 3 个分区。 HDD i 上偏移 0x400 之前的所有内容原始字节– 如不属于任何分区等。
这里启动分区是分区2这是linux的系统分区。
GRUB 模块 1 文件位于 MBR 之后、第一个分区之前。它可以驻留在任何地方,但通常位于同一磁盘上,且位于 MBR 磁盘的偏移量 512 处。
同样在 GPT 系统上 – GPT 将磁盘的该部分用于自身,因此必须将这些 GRUB 文件移动到另一个位置。这就是 GRUB 2 的bios_grub
用途 - 存储。core.img
这“设置启动标志”只是盲目尝试,如果成功的话我会很惊讶。但总得有个开始。
编辑2:
如果你这样做怎么办:
备份当前MBR:
dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
从下面创建图像
Code TEST
,保存到文件test.s
:as -o test.o test.s objcopy -O binary test.o test.img
将文件复制
test.img
到 MBR:dd if=test.img of=/dev/sda bs=512 count=1
开机
代码测试:
.file "test.s"
.text
.code16
.globl start, _start
start:
_start:
jmp go
nop
go:
movb $0x48, %al
call prnt_chr
movb $0x65, %al
call prnt_chr
movb $0x6c, %al
call prnt_chr
movb $0x6c, %al
call prnt_chr
movb $0x6f, %al
call prnt_chr
movb $0x21, %al
call prnt_chr
ret
prnt_chr:
movb $0x0e, %ah
int $0x10
ret
. = _start + 0x1fe
.word 0xaa55
要恢复 MBR,请执行以下操作:
dd if=/path/mbr-backup of=/dev/sda bs=512 count=1
这应该简单地打印“Hello!”如果 MBR 已加载,则停止。通过在 qemu-system-x86_64、qemu-system-i386、VirtualBox、固定式 Intel PC 32 和 64 位下运行进行测试。
答案3
我可能是错的,没有做正确的事,但我一开始也遇到了和你一样的问题。过了一段时间,我发现这里那GRUB has to have a 512MB EFI partition, with a vfat filesystem
。如果您将系统安装为 EFI:
对于 EFI,您正在寻找一个带有 vfat 文件系统并启用启动标志的小分区(512 MiB 或更少)。
这意味着您在创建分区时必须预见到这一事实。执行此操作时(例如使用 cfdisk),您必须将 /dev/sdX1 设置为 EFI,然后将其格式化为 FAT32 文件系统(mkfs.vfat -F32 /dev/sdX1
在安装过程中使用该命令)。只有这样grub才会被识别。
我认为 Syslinux 可以与你的 ext2 分区一起工作,如果你想尝试的话。
如果您不将 Arch 安装为 EFI,您可能可以在 wiki 上查看。在这种情况下我无法提供任何进一步的帮助。
我知道这篇文章已经过时了,但这是为了以防万一有人来到这里并希望找到解决方案。
答案4
这可能是由某些原因引起的有缺陷的 UEFI 实现。
为我解决这个问题的一个解决方法(当没有其他方法时)是使用选项--removable
with grub-install
,如下所示:
# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --removable
grub-mkconfig -o /boot/grub/grub.cfg
我也在重新启动之前重新运行。不确定这是否有必要,但没有什么坏处。