OK. Tornou-se um pouco longo para comentar. Isso não está diretamente relacionado, mas apenas para explicar o comentário aa55
.
Quando o Sistema Básico de Entrada / Saída (BIOS) é iniciado, ele faz um Power-On Self
Teste (POST), verifique o hardware, etc. Em seguida, ele procura por dispositivos que são ambos
inicializável e ativo por ordem dada pelo CMOS (Sua configuração no BIOS - que por sua vez é dada por um Complementary Metal Oxide Semiconductor ). Quando ele encontra um disco que tem 0xaa55
no deslocamento 510, ele carrega essa seção do disco,
(setor 1), na memória e deixar o controle no endereço 0x00000 daquele
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 em
Além disso, solicite à BIOS várias informações. Neste processo localiza
qual disco tem resto do GRUB e carrega essa seção do disco na memória -
então essa parte do código obtém controle. Esse monta o kernel etc. e
deixa o controle para isso.
Usando a GPT, a imagem carregada pelo GRUB a partir do MBR está localizada no bios_grub
partição, - o que você tem, e é grande o suficiente, etc., então não pode ver como isso
poderia estar errado.
Em "Nenhum dispositivo inicializável encontrado." mensagem da BIOS - pode-se ter o caso
que o MBR do disco de inicialização está corrompido, se o MBR terminar em 0xaa55
e o MBR for
um corrompido geralmente recebe outro erro - ou o sistema simplesmente trava.
De qualquer forma. Isso é estranho. Percebo que você não tem nenhuma partição marcada como "boot" .
Usando o GPT que está correto, - mas, embora seja proibido, você pode tentar
sinalizar um, e. sda5
como inicialização. No gparted: (aprendi que
(g) parted também altera o GPT que não quer) fdisk:
# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w
Pode ser que o seu BIOS esteja fazendo mais do que deveria e verificando o
tabela de partições no MBR.
EDIT - Atualizar para comentar:
AFAIK não importa qual você definiu, pois não é realmente usado.
Ponto de ser, para quem nunca diga nenhum "dispositivo inicializável encontrado" , eles devem
esteja satisfeito. O sda1
não é 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 de compensar 0x400 no HDD
i bytes brutos - como não faz parte de nenhuma partição, etc.
A partição boot é Partição 2 , que é a partição do sistema com
linux.
Os arquivos do módulo 1 do GRUB residem logo após o MBR e antes da primeira partição.
Pode residir em qualquer lugar, mas geralmente no mesmo disco e no offset 512 do MBR
disco.
Também em um sistema GPT - o GPT usa essa seção do disco para si mesmo,
é preciso mover esses arquivos GRUB para outro local. Isso é o que o
bios_grub
é para - armazenar core.img
para o GRUB 2.
O "set boot flag" é apenas um tiro no escuro - e ficaria surpreso
se isso funcionar. Mas tem um começo em algum lugar.
EDIT2:
E se você fizer isso:
-
Backup da MBR atual:
dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
-
Crie uma imagem de Code TEST
abaixo, salve no arquivo test.s
por:
as -o test.o test.s
objcopy -O binary test.o test.img
-
Copie o arquivo test.img
para o MBR:
dd if=test.img of=/dev/sda bs=512 count=1
-
Inicializar
TESTE DE CÓDIGO:
.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 o seguinte:
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, então
Pare. Testei-o executando em qemu-system-x86_64, qemu-system-i386,
VirtualBox, Intel PC 32 e 64 bits.