O problema
Eu tenho uma máquina que inicializa no Arch Linux a partir de um volume Btrfs RAID10 de oito discos. Recentemente, reiniciei e cheguei a este prompt de resgate do GRUB:
Não tenho certeza do que exatamente desencadeou isso. Desde a última inicialização, instalei atualizações ( pacman -Syu
) pelo menos duas vezes e posso ter feito outras alterações no sistema, incluindo a reinstalação do GRUB.Consigo iniciar o sistema se adicionar um disco de inicialização dedicado.
A teoria
Ao solucionar problemas com um membro útil do canal IRC #archlinux, encontreiesta nota no wiki do Arch:
Deslocamento de partição
O problema de deslocamento pode ocorrer quando você tenta incorporar core.img em um disco particionado. Isso significa que não há problema em incorporar o core.img do grub em um pool Btrfs em um disco sem partição (por exemplo, /dev/sdX) diretamente. GRUB pode inicializar partições Btrfs, porém o módulo pode ser maior que outros sistemas de arquivos. E o arquivo core.img criado pelo grub-install pode não caber nos primeiros 63 setores (31,5 KiB) da unidade entre o MBR e a primeira partição. Ferramentas de particionamento atualizadas, como fdisk e gdisk, evitam esse problema compensando a primeira partição em aproximadamente 1MiB ou 2MiB.
Isto parece dizer que pode haver problemas com a instalação do GRUB em partiçõesediscos sem partição que as ferramentas de particionamento mais recentes atenuam (por enquanto), deixando espaço extra no início do disco.
A página wiki do GRUB é mais direta:
Instalar em partição ou disco sem partição
Aviso:GRUBdesencoraja fortementeinstalação em um setor de inicialização de partição ou em um disco sem partição, como faz o GRUB Legacy ou o Syslinux. Esta configuração está sujeita a falhas, especialmente durante atualizações, e énão suportadopelos desenvolvedores do Arch.
Bem, que droga.
Pelo que vale, grub-install -v
inclui esta linha em sua saída:
grub-install: info: the total module size is 0xa07c.
Isso é ~ 41K, solidamente acima do limite de 31,5KiB mencionado acima, mas não conheço o GRUB o suficiente para ter certeza de que essa é a causa dos meus problemas.
As questões
Se esteéo problema, como posso prová-lo - e por que não
grub-install
falha ruidosamente se for o caso?Qual é a maneira correta de formatar discos inicializáveis Btrfs daqui para frente? MBR? GPT? - um disco de inicialização dedicado é tentador, mas gosto de ter um gerenciador de inicialização redundante em cada dispositivo do volume.
Existe uma maneira melhor de migrar cada disco para uma tabela de partição do que apagar e executar
btrfs replace
cada disco?
Responder1
Antigamente, criar uma tabela de partição MBR com, digamos, fdisk, por padrão, deixava os primeiros 63 setores intactos. É aí que o GRUB e outros bootloaders podem ser instalados.
Avançando para os dias modernos, a mesma ferramenta (fdisk) deixa mais espaço não utilizado; o suficiente para o GRUB2 instalar seu estágio 1 com suporte a BTRFS. Acredito que o deslocamento seja de cerca de 1 MB, por padrão; seja lá o que isso signifique nos setores.
Não sei por que grub-install
não falha, mas suponho que não verifique o tamanho do setor de inicialização; e sem partições como poderia.
Não vejo problema em ter bootloaders redundantes. Você precisa gerenciar isso manualmente, mas o stage1 do GRUB2 não muda com frequência. Mas isso significa que você precisaria de partições.
Não conheço uma ferramenta que possa migrar o disco para adicionar uma tabela de partições. O problema é que o sistema de arquivos está vinculado a setores do disco e a adição de uma tabela de partição altera esses setores. Se seus sistemas de arquivos BTRFS estivessem no LVM, então sim, você seria capaz de mover as coisas porque o sistema de arquivos estaria vinculado a "setores virtuais". Não estou dizendo que você deve fazer isso, apenas ilustrando qual é o problema.