O problema parece ser que existem duas versões diferentes do GRUB instaladas. Um está ativo e é carregado no MBR; o outro está "nas asas". Os arquivos em /boot/grub
são preenchidos de outro lugar e não pertencem a nenhum pacote. Os arquivos em /usr/lib/grub/i386-pc
são supostamente iguais, mas neste caso não são.
Eu criei este programa para verificar as diferenças:
#!/usr/bin/ruby
# The directory dir1 is the directory owned by the Debian package
# grub-pc.
dir1 = "/usr/lib/grub/i386-pc"
# The directory dir2 is populated presumably by a script in the
# grub-pc package.
dir2 = "/boot/grub"
# First, compare directories: compare files in package to
# files copied into the second directory (/boot/grub)
print "Directory comparisons:\n"
print "\nComparing #{dir1} to #{dir2}\n\n"
Dir.chdir(dir1)
Dir["*.img","*.mod","*.lst","*.o"].each { |x|
printf("%27s... ", x)
if File.exists?("#{dir1}/#{x}")
if File.exists?("#{dir2}/#{x}")
'diff -u #{x} #{dir2}/#{x} 2>&1'
print ($? == 0 ? "ok\n" : "*** MISMATCH\n")
else
print "*** MISSING from #{dir2}\n"
end
end
}
# Scan certain files (in both directories) looking for version numbers
# and report
print "\nVersion numbers:\n\n"
Dir["#{dir1}/multiboot*","#{dir2}/multiboot*"].each { |x|
printf("%70s", 'strings --print-file-name #{x}'.grep(/GRUB/))
}
Em outros sistemas (inicialização de trabalho), recebo esse tipo de saída (abreviada):
Directory comparisons:
Comparing /usr/lib/grub/i386-pc to /boot/grub
cdboot.img... ok
diskboot.img... ok
kernel.img... ok
lnxboot.img... ok
pxeboot.img... ok
grldr.img... ok
... snip ...
terminal.lst... ok
efiemu32.o... ok
efiemu64.o... ok
Version numbers:
/usr/lib/grub/i386-pc/multiboot.mod: GRUB 1.98-1ubuntu12
/usr/lib/grub/i386-pc/multiboot2.mod: GRUB 1.98-1ubuntu12
/boot/grub/multiboot.mod: GRUB 1.98-1ubuntu12
/boot/grub/multiboot2.mod: GRUB 1.98-1ubuntu12
No sistema que não está funcionando como esperado, a seguinte saída é vista do mesmo script:
Directory comparisons:
Comparing /usr/lib/grub/i386-pc to /boot/grub
cdboot.img... ok
diskboot.img... ok
kernel.img... *** MISMATCH
lnxboot.img... *** MISMATCH
pxeboot.img... ok
grldr.img... *** MISMATCH
boot.img... *** MISMATCH
biosdisk.mod... *** MISMATCH
chain.mod... *** MISMATCH
reboot.mod... *** MISMATCH
halt.mod... *** MISMATCH
vbe.mod... *** MISMATCH
vbetest.mod... *** MISSING from /boot/grub
vbeinfo.mod... *** MISSING from /boot/grub
play.mod... *** MISMATCH
serial.mod... *** MISMATCH
vga.mod... *** MISMATCH
memdisk.mod... *** MISMATCH
... snip ...
parttool.lst... *** MISMATCH
handler.lst... *** MISSING from /boot/grub
video.lst... *** MISMATCH
crypto.lst... *** MISMATCH
terminal.lst... *** MISMATCH
efiemu32.o... *** MISMATCH
efiemu64.o... *** MISMATCH
Version numbers:
/usr/lib/grub/i386-pc/multiboot.mod: GRUB 1.98-1ubuntu12
/usr/lib/grub/i386-pc/multiboot2.mod: GRUB 1.98-1ubuntu12
/boot/grub/multiboot2.mod: GRUB 1.99~rc1-13ubuntu3
/boot/grub/multiboot.mod: GRUB 1.99~rc1-13ubuntu3
Para corrigir isso, eu copiei / boot / grub e reinstalei o grub-pc assim:
rsync -Wav --progress /boot/grub /boot/grub.sav
apt-get --reinstall install grub-pc
Isso funciona e o grub empacotado substitui o original em / boot / grub e, presumivelmente, no MBR.
Ainda não testei os resultados disso em uma reinicialização do sistema; leitor de advertências .