Arch Linux 安装后,它只显示文本“未找到可启动设备”

Arch Linux 安装后,它只显示文本“未找到可启动设备”

我一直在尝试安装 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 错误,你可以尝试以下操作:

  1. 从实时 archlinux 媒体启动
  2. mount /dev/sdxx /mnt(sdxx 是您的根分区)
  3. arch-chroot /mnt
  4. grub-mkconfig -o /boot/grub/grub.cfg
  5. 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:

如果你这样做怎么办:

  1. 备份当前MBR:

      dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
    
  2. 从下面创建图像Code TEST,保存到文件test.s

    as -o test.o test.s
    objcopy -O binary test.o test.img
    
  3. 将文件复制test.img到 MBR:

    dd if=test.img of=/dev/sda bs=512 count=1
    
  4. 开机

代码测试:

    .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 实现

为我解决这个问题的一个解决方法(当没有其他方法时)是使用选项--removablewith grub-install,如下所示:

# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --removable

grub-mkconfig -o /boot/grub/grub.cfg我也在重新启动之前重新运行。不确定这是否有必要,但没有什么坏处。

来源: Arch BBS:[已解决] uefi 启动时没有可启动设备

相关内容