OKAY. Se hizo un poco largo para comentar. Esto no está directamente relacionado, sino solo para explicar el aa55
comentario.
Cuando el Basic Input / Output System (BIOS) comienza lo hace una prueba automática de encendido (POST), el hardware de verificación, etc. A continuación, busca los dispositivos que son a la vez de arranque y activa de orden dada por CMOS (Su configuración en el BIOS - el cual a su vez está dado por un semiconductor de óxido de metal complementario ). Cuando encuentra un disco que tiene 0xaa55
un desplazamiento 510, carga esa sección del disco (sector 1) en la memoria y le deja el control en la dirección 0x00000 de ese código. Esos 512 bytes son el Master Boot Record (MBR).
Ese código, en este caso " GRUB - boot" , verifica varios bytes de estos 512 además de pedirle al BIOS información diversa. En este proceso, localiza qué disco tiene el resto de GRUB y carga esa sección del disco en la memoria; luego, esa parte del código obtiene el control. Ese monta el núcleo, etc. y deja el control a eso.
Usando GPT, la imagen que GRUB carga desde dentro de MBR se encuentra en la bios_grub
partición, que tiene, y es lo suficientemente grande, etc., por lo que no puedo ver cómo eso podría estar mal.
En "No se encontró ningún dispositivo de arranque". mensaje del BIOS: se puede tener el caso de que el MBR del disco de arranque está dañado, si MBR termina 0xaa55
y el MBR está dañado, generalmente se obtiene otro error, o el sistema simplemente se bloquea.
De todos modos. Esto es raro Noto que no tiene una partición marcada como "arranque" . Usar GPT es correcto, pero, aunque está prohibido, podría intentar marcar uno, por ejemplo, sda5
como arranque. En gparted: (aprendí que (g) se separó también alter GPT que no quería) fdisk:
# Toggle bootable:
a [DISK NUMBER]
# Check (could be an asterisk marking boot partition):
p
# Save changes:
w
Podría ser que su BIOS esté haciendo más de lo que debería y verificando la tabla de particiones en MBR.
EDITAR - Actualizar para comentar:
AFAIK, no importa cuál establezca, ya que no se usa realmente. El punto es que, para quienes digan que no se encontró un "dispositivo de arranque" , estarán satisfechos. No sda1
es una partición de arranque en el sentido tradicional, sino espacio para archivos de arranque GRUB.
En un diseño de partición tradicional (no GPT), generalmente tiene 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 ]
| |
| |
|__________________|
Eso significaría 3 particiones. Todo antes del offset 0x400 en el HDD i bytes sin procesar , como no forma parte de ninguna partición, etc.
Aquí la partición de arranque es la Partición 2 que es la partición del sistema con Linux.
Los archivos del módulo 1 de GRUB residen justo después de MBR y antes de la primera partición. Puede residir en cualquier lugar, pero generalmente en el mismo disco y en el desplazamiento 512 del disco MBR.
También en un sistema GPT: GPT usa esa sección del disco para sí mismo, por lo tanto, uno tiene que mover esos archivos GRUB a otra ubicación. Para eso
bios_grub
está: para almacenar core.img
GRUB 2.
La "bandera de inicio" es simplemente un disparo en la oscuridad, y se sorprendería si funciona. Pero uno ha comenzado en alguna parte.
EDIT2:
¿Qué pasa si haces esto?
Copia de seguridad de MBR actual:
dd if=/dev/sda of=/path/mbr-backup bs=512 count=1
Cree una imagen desde Code TEST
abajo, guardada en el archivo test.s
por:
as -o test.o test.s
objcopy -O binary test.o test.img
Copie el test.img
archivo a MBR:
dd if=test.img of=/dev/sda bs=512 count=1
Bota
PRUEBA 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 MBR haz:
dd if=/path/mbr-backup of=/dev/sda bs=512 count=1
Esto debería simplemente imprimir "¡Hola!" a la pantalla si se cargó el MBR, luego deténgase. Lo probé ejecutando qemu-system-x86_64, qemu-system-i386, VirtualBox, PC Intel estacionaria de 32 y 64 bits.
dd if=/dev/sda bs=1 skip=510 count=2 2>&- | hexdump
(o xxd en lugar de hexdump) es igual a 55aa? Si no, el MBR es malo.