Após a instalação do Arch Linux, ele mostra apenas o texto "Nenhum dispositivo inicializável encontrado"

8

Eu tenho tentado instalar o Arch Linux. Após a instalação, ele mostra a tela do BIOS e, em seguida, surge a mensagem "Nenhum dispositivo inicializável encontrado".

Já tentei o cenário inteiro algumas vezes, mas ele ainda mostra a mesma mensagem ...

Na instalação, segui o Guia não oficial para iniciantes no wiki do ArchLinux.

Aqui está o que eu fiz:

Antes de tudo, limpei o disco rígido (no qual antes da limpeza o Windows Vista estava instalado) e coloquei o GPT usando o gdisk. Depois, configurei algumas partições, que agora parecem as seguintes (saída de 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     

Então montei a partição raiz (sda2) em / mnt, depois disso também a partição de inicialização e inicial (sda3 e sda5) em / mnt / boot e / mnt / home e, no final, formatei e ativei a partição de troca (sda4) .

Agora comecei a instalar o sistema básico. Depois de selecionar os espelhos, instalei base e base-devel.

No final da instalação, gerei um fstab.

Finalmente enfiei o chroot no / mnt, configurei alguns Locales, configurei uma senha root e depois instalei e configurei o Grub2, exatamente como é explicado aqui .

No final, saí do ambiente chroot, desmontei as partições e reiniciei. Você sabe o resto ... Apenas mostrou a mensagem de que ele não encontrou nenhum dispositivo inicializável.

A propósito, tentei instalá-lo neste computador.

brgr
fonte
1
A saída de dd if=/dev/sda bs=1 skip=510 count=2 2>&- | hexdump(ou xxd em vez de hexdump) é igual a 55aa? Caso contrário, o MBR está ruim.
Runium 01/04
A saída foi a seguinte: 0000000 aa55 0000002 Se o MBR estiver ruim, como você diz, há algo que eu possa fazer para torná-lo bom novamente?
Br13 de
Não. Isso parece bom. (0000000 e 0000002 são deslocados) aa55é a assinatura MBR correta ( 55aano sistema little endian).
Runium 01/04
@Sukminder, posso estar faltando alguma coisa, mas o OP disse que ele usou GPT, não MBR.
JMCF125 25/02
1
@ JMCF125: GPT também usa MBR. Em vez de uma tabela de partição completa, ela mantém uma partição do tamanho máximo. Os dados da GPT geralmente iniciam no deslocamento 512 (após o MBR). upload.wikimedia.org/wikipedia/commons/0/07/… O MBR mantém o estágio um do carregamento de inicialização. Endereço do bloco lógico 0 -> MBR herdado.
Runium 26/02

Respostas:

4

Eu tive o mesmo problema e, pesquisando, descobri que o uuid da raiz / partição está errado no grub.cfg, você pode tentar o seguinte:

  1. Inicializar a partir da mídia archlinux ao vivo
  2. mount /dev/sdxx /mnt (sdxx é sua partição raiz)
  3. arch-chroot /mnt
  4. grub-mkconfig -o /boot/grub/grub.cfg
  5. grub-install

terminar.

amirhossein sobhani
fonte
Já fiz tudo isso na primeira tentativa. No entanto, tentei fazê-lo novamente como você explicou e grub-installocorreu um erro : dizia que não haveria partição de inicialização do Bios ativada /dev/sda, enquanto na verdade existe uma.
Br
2

ESTÁ BEM. Tornou-se um pouco longo para comentar. Isso não está diretamente relacionado, mas apenas para explicar o aa55comentário.

Quando o sistema básico de entrada / saída (BIOS) é iniciado, ele faz um POST ( Power-On Self Test ), verifica o hardware etc. Em seguida, procura dispositivos que sejam inicializáveis ​​e ativos por ordem dada pelo CMOS por sua vez, é fornecido por um semicondutor complementar de óxido metálico ). Quando encontra um disco 0xaa55com deslocamento 510, ele carrega essa seção do disco (setor 1) na memória e deixa o controle para ele no endereço 0x00000 desse código. Esses 512 bytes são o Master Boot Record (MBR).

Esse código, neste caso " GRUB-boot" , verifica vários bytes desses 512, além de solicitar várias informações à BIOS. Nesse processo, ele localiza qual disco possui o restante do GRUB e carrega essa seção do disco na memória - então essa parte do código obtém o controle. Esse monta o kernel etc. e deixa o controle para isso.

Usando a GPT, a imagem que o GRUB carrega no MBR está localizada na bios_grub partição - que você possui e é grande o suficiente etc., portanto, não pode ver como isso pode estar errado.


Em "Nenhum dispositivo inicializável encontrado". mensagem do BIOS - pode-se considerar que o MBR do disco de inicialização está corrompido; se o MBR termina 0xaa55eo MBR está corrompido, geralmente ocorre um outro erro - ou o sistema simplesmente trava.


De qualquer forma. Isso é estranho. Percebo que você não possui uma partição marcada como "boot" . Usando o GPT correto, - mas, embora seja proibido, você pode tentar sinalizar um, por exemplo, sda5como inicialização. No gparted: (aprendi que (g) parted também altera o GPT que não deseja) fdisk:

# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w

Pode ser que o BIOS esteja fazendo mais do que deveria e verificando a tabela de partições no MBR.


EDIT - Atualize para comentar:

AFAIK, não importa qual você definir, pois na verdade não é usado. A questão é que, para quem nunca disser "dispositivo inicializável encontrado" , eles deverão estar satisfeitos. Não sda1é uma partição de inicialização no sentido tradicional, mas espaço para arquivos de inicialização do GRUB.

Em um layout de partição tradicional (não GPT), você normalmente tem algo como:

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 ]
      |                  |
      |                  |
      |__________________|

Isso significaria 3 partições. Tudo antes do deslocamento 0x400 no HDD i bytes brutos - como não faz parte de nenhuma partição, etc.

Aqui, a partição de inicialização é a Partição 2, que é a partição do sistema com o linux.

Os arquivos do módulo GRUB 1 residem logo após o MBR e antes da primeira partição. Ele pode residir em qualquer lugar, mas geralmente no mesmo disco e no deslocamento 512 do disco MBR.

Também em um sistema GPT - o GPT usa essa seção do disco para si próprio; portanto, é necessário mover esses arquivos GRUB para outro local. É para isso que bios_grubserve - armazenar core.imgpara o GRUB 2.


O "set boot flag" é apenas um tiro no escuro - e ficaria surpreso se funcionasse. Mas alguém começou em algum lugar.


EDIT2:

E se você fizer isso:

  1. MBR atual de backup:

      dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
    
  2. Crie uma imagem Code TESTabaixo, salva no arquivo test.spor:

    as -o test.o test.s
    objcopy -O binary test.o test.img
    
  3. Copie o test.imgarquivo para MBR:

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

Código TEST:

    .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

Para restaurar o MBR, faça:

dd if=/path/mbr-backup of=/dev/sda bs=512 count=1

Isso deve simplesmente imprimir "Olá!" para a tela se o MBR foi carregado, pare. Testei executando nos sistemas qemu-system-x86_64, qemu-system-i386, VirtualBox, Intel PC estacionário de 32 e 64 bits.


Runium
fonte
Antes de tudo, obrigado por sua ajuda. Poderia me explicar por que devo definir sda5como partição de inicialização. Não é sda1uma opção melhor para definir como partição de inicialização, pois está aqui apenas para isso?
brgr
Ok, eu tentei isso agora, mas, infelizmente, com o mesmo resultado ...
brgr
O que deveria ter listado?
brgr
Ok, agora eu também tentei seu segundo conselho, ainda sem resultado :(
brgr 02/02
Sim, está listado.
brgr
0

Posso estar errado e não fiz a coisa certa, mas tive o mesmo problema que você no começo. Depois de um tempo, encontrei aqui isso GRUB has to have a 512MB EFI partition, with a vfat filesystem. Isso acontece caso você instale seu sistema como EFI:

Para o EFI, você está procurando uma partição pequena (512 MiB ou menos) com um sistema de arquivos vfat e o sinalizador de inicialização ativado.

Isso significa que você deve antecipar esse fato ao criar suas partições. Ao fazer isso (com o cfdisk, por exemplo), você terá que definir seu / dev / sdX1 como EFI e depois formatá-lo para um sistema de arquivos FAT32 (com o comando mkfs.vfat -F32 /dev/sdX1durante o processo de instalação). Somente então o grub será reconhecido.

Presumo que o Syslinux possa funcionar com sua partição ext2, se você quiser experimentá-lo.

Se você não instalar o Arch como EFI, provavelmente poderá verificar o wiki. Não posso ajudar mais neste caso.

Eu sei que este post é antigo, mas é para o caso de alguém vir aqui e esperar encontrar uma solução.

Razakhel
fonte
1
Responder a postagens antigas é bom e até incentivado. No entanto, edite sua resposta e destaque a parte que realmente responde . Qual foi a solução que você encontrou? Que afirmação? Fornecer um link para outra página que possa conter uma resposta não é uma resposta. Em vez disso, cite a seção relevante diretamente na sua resposta para que todas as informações estejam contidas aqui.
terdon
A resposta estava lá, apenas citada no link que forneci, mas não destacada. Obrigado por apontar isso. Por favor, diga-me se você sentir que algo é necessário.
Razakhel
Citação real adicionada agora. E corrigido o 512MB (at least), era o contrário ...
Razakhel