Sitrep:
O laptop é um Asus Aspire V5 431. O BIOS está configurado para inicializar como legado do BIOS, não como UEFI. Tem (tinha) um WD HDD.
Eu raramente inicializo (a última vez, como em agosto, eu acho), mas sempre inicializava bem. No entanto, decidiu arrumar uma semana atrás (kernel panic), e eu tive que reiniciá-lo. Acontece que tudo que eu tenho é uma tela em branco com um cursor no canto superior esquerdo. Eu estava esperando o menu de inicialização do Grub. O HDD tem o estágio 1 do Grub 0.97 no MBR e um GPT. Este é o layout da partição:
# fdisk -l /dev/sdb
Disk /dev/sdb: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 17E16B0D-9815-4A52-88A8-67DF03C9C6E0
Device Start End Sectors Size Type
/dev/sdb1 2048 526335 524288 256M Microsoft basic data
/dev/sdb2 526336 42469375 41943040 20G EFI System
/dev/sdb3 42469376 46663679 4194304 2G Linux swap
/dev/sdb4 46663680 976773119 930109440 443.5G Microsoft basic data
# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: WDC WD50 00LPVT-22G33T0 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 269MB 268MB ext3 msftdata
2 269MB 21.7GB 21.5GB ext3 boot, esp
3 21.7GB 23.9GB 2147MB swsusp
4 23.9GB 500GB 476GB ext3 msftdata
Nevermind que diz sdb em vez de sda, atualmente tenho em um dock USB em outro laptop. Agora, o sdb1 não foi usado (deveria ser / boot, mas nunca foi montado), e o sdb2 é montado como / com um diretório / boot contendo o Grub 0.97 (o SO é o Fedora 14).
De acordo com todos os sites de QA e tutorial lá fora, essa configuração não deveria ter funcionado no começo, para um BIOS inicializar no modo herdado, seria necessária uma partição com legacy_boot
. No entanto, tenho certeza que nada mudou na tabela de partições. Além disso, eu li que o Grub é capaz de usar os setores não utilizados entre as entradas da partição GPT e a primeira partição para core.img
. Ou o Grub 0.97 realmente usa uma partição para o estágio 2, em vez de um core.img
em um local fixo ? Isso faria sentido porque existe um /boot/grub/stage2
. Tenho certeza de que eu nunca tive uma partição legacy_boot
, pois ela precisaria ser fat32 e 100% nunca criei um sistema de arquivos nessa unidade.
AFAIK, o próprio Grub não se importa com os sinalizadores de partição. Também não sei por que eles têm o sinalizador msftdata
definido ou por que o sinalizador boot
e esp
está definido. Tenho 100% de certeza de que não os defini quando particionei a unidade.
Então, pergunta número um seria : O que falta aqui nesta configuração que não inicializa mais? Um BIOS legado pode ser inicializado em um GPT? Lembro-me de ler que alguns BIOSes com bugs precisam de uma partição ativa, ou seja, neste caso, a pseudo-partição no MBR? Isso poderia causar esse sintoma de uma tela em branco? Eu sei que há um loop infinito no código MBR do Grub. Em que circunstâncias isso foi executado?
Como esse HDD é bastante antigo e os SSDs estão ficando mais baratos, eu consegui um deles. Eu particionei-o no mesmo layout acima (exceto que a última partição é menor):
# fdisk -l /dev/sdc
Disk /dev/sdc: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 30BD5947-8BC3-4AFE-BC3C-14615E9AF60F
Device Start End Sectors Size Type
/dev/sdc1 2048 526335 524288 256M Linux filesystem
/dev/sdc2 526336 42469375 41943040 20G Linux filesystem
/dev/sdc3 42469376 46663679 4194304 2G Linux swap
/dev/sdc4 46663680 468862094 422198415 201.3G Linux filesystem
# parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: SanDisk SDSSDA240G (scsi)
Disk /dev/sdc: 240GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 269MB 268MB ext3 primary
2 269MB 21.7GB 21.5GB ext3 primary
3 21.7GB 23.9GB 2147MB linux-swap(v1) primary
4 23.9GB 240GB 216GB ext3 primary
(Novamente, sdc porque fica no dock por enquanto.)
Note que, desta vez, eu não tenho nenhum conjunto de flags (o próprio Grub não se importa). Eu copiei todos os arquivos, partição por partição, preservando os modos, timestamps, propriedade, etc. Eu também fiz exatamente os mesmos sistemas de arquivos, mesmo com os mesmos UUIDs. Eu então montei sdc2 como / mnt / sdc2, montei {dev, sys, proc} em / mnt / sdc2 / {dev, sys, proc}, fiz o chroot em / mnt / sdb2 e executei
# /sbin/grub-install --root-directory=/ /dev/sdc
/dev/sdc does not have any corresponding BIOS drive.
(Observe que isso executa /sbin/grub-install
no sdc2, não no sda2, pois o host tem o Grub 2 instalado.)
Então deixo o Grub mudar o device.map:
# /sbin/grub-install --recheck /dev/sdc
Probing devices to guess BIOS drives. This may take a long time.
The file /boot/grub/stage1 not read correctly.
O que essa última sentença significa? /boot/grub/stage1
está lá, mas ela não foi atualizada (nem /boot/grub/stage2
), mas todos os arquivos *stage1_5
(embora tenham ocore.img
) mesmo md5sum como antes). Eu diria que isso copia /boot/grub/stage2
, ou atualiza GRUB Geom Error
, e escreve um novo setor de inicialização no MBR de sdc (o que aconteceu, eu confirmei isso, embora não esteja muito claro por que deveria ser diferente daquele em sdb (o HDD antigo) em cada byte único na região de montagem).
Depois disso, conectei-o e, desta vez, o BIOS simplesmente entra em um loop de inicialização: Bipe, logotipo do fabricante do BIOS com POST, espera 2 segundos, reinicialização, beeo, ... O BIOS em si ainda é definido para o modo de inicialização herdado do BIOS e identifica corretamente o SSD (SanDisk).
Pergunta número dois: O que estou perdendo aqui? Fiquei com a impressão de que uma instalação do grub seria suficiente para obter um MBR inicializável e um estágio 2 adequadamente localizado. caso de problemas de estágio 2 ou qualquer problema em / boot para, pelo menos, ver uma mensagem de erro ou algo assim. E se houver um problema no MBR, eu veria %code% ou similar.
(Problema colateral: Eu planejo, no entanto, usar o sdc1 (como sda1 uma vez em sua posição) como / boot, mas o core.img deve estar alheio a isso, certo? Ou seja, se eu fizer o mesmo (grub- instalar etc no sdc1, eu deveria acabar com o mesmo problema.)
Tags boot partitioning hard-drive linux grub