Como restaurar o setor de inicialização do Windows 7 a partir do Linux

3

Eu tenho um laptop com Windows 7 e Ubuntu, mas ele não inicializa mais no Windows. Tenho certeza que o setor de inicialização da partição do Windows (o início da partição, não o MBR!) É borked. Como faço para restaurá-lo do Linux?

(O laptop não tem uma unidade de DVD, e eu prefiro não fazer uma instalação do Windows USB, porque me levou várias tentativas da última vez. Além disso, o instalador do Windows irá substituir não apenas o setor de inicialização, mas também o MBR, matando o GRUB, então eu teria que consertar o Ubuntu depois.)

Detalhes:

O layout da partição é o seguinte:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              54   151129367    75564657    5  Extended
/dev/sda2       151129368   302247179    75558906    7  HPFS/NTFS/exFAT
/dev/sda3   *   302247180   312497351     5125086    c  W95 FAT32 (LBA)
/dev/sda4       312497352   312578243       40446   ef  EFI (FAT-12/16/32)
/dev/sda5             108     4194827     2097360   82  Linux swap / Solaris
/dev/sda6         4194882   151129367    73467243   83  Linux

sda1 é uma partição estendida contendo Linux (sda4, sda5 e sda6). sda3 é a partição de recuperação (parece um Windows XP modificado). sda2 é a partição do Windows 7 (NTFS). Eu posso montá-lo no Linux e tudo parece estar lá.

O Grub não inicializa no Windows 7. O menu de inicialização contém uma entrada chamada “Windows” (observe as aspas engraçadas), que tenta inicializar (hd0,1) = sda1, obviamente sem sucesso. Eu posso manualmente inicializar o sda3, mas não há sentido nisso.

Quando tento inicializar o sda2 (Windows 7), recebo "NTLDR is missing". Isso é estranho, porque o Windows 7 não usa NTLDR, mas BOOTMGR. Eu não me lembro como isso ficou borked (isso aconteceu há algum tempo), mas eu acho que alguma ferramenta de recuperação eu tentei instalar o bootsector errado nessa partição. É assim que o início da partição se parece:

$ sudo dd if=/dev/sda2 bs=512 count=1 | hd
00000000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
00000010  00 00 00 00 00 f8 00 00  36 00 d6 00 18 0d 02 09  |........6.......|
00000020  00 00 00 00 80 00 80 00  f3 df 01 09 00 00 00 00  |................|
[...]
00000170  b4 01 8b f0 ac 3c 00 74  09 b4 0e bb 07 00 cd 10  |.....<.t........|
00000180  eb f2 c3 0d 0a 41 20 64  69 73 6b 20 72 65 61 64  |.....A disk read|
00000190  20 65 72 72 6f 72 20 6f  63 63 75 72 72 65 64 00  | error occurred.|
000001a0  0d 0a 4e 54 4c 44 52 20  69 73 20 6d 69 73 73 69  |..NTLDR is missi|
000001b0  6e 67 00 0d 0a 4e 54 4c  44 52 20 69 73 20 63 6f  |ng...NTLDR is co|
[...]

Eu tenho que dizer que tentei update-grub e boot-repair sem sucesso. O Grub está instalado e funcionando corretamente, o que está errado é o carregador do Windows que é carregado pelo Grub. O que eu preciso é algo como bootsect /nt60 C: para o Linux, ou qualquer outra forma de obter uma cópia limpa do gerenciador de inicialização na minha partição. Alguma idéia?

    
por jdm 12.04.2013 / 16:04

1 resposta

1

Engraçado como eu tenho tentado isso por tanto tempo, e logo após postar aqui encontrei uma solução. Eu tropecei em um stick USB de Recuperação do Windows 7.

  1. Inicialize a partir do bastão. Eu tive que fazer uma bota fria com o pau em uma porta USB, caso contrário, o PC não iria reconhecê-lo. Então eu tive que dizer ao grub para inicializar a partir de (hd1) .

  2. O disco de recuperação pode oferecer reparos, mas isso não funcionou para mim.

  3. Inicie um prompt de comando e faça o seguinte:

    Copie o gerenciador de inicialização. X: é a unidade de recuperação, C: é a partição no laptop.

    copy x:\windows\boot\pcat\bootmgr c:\bootmgr
    attrib +s +h c:\bootmgr
    

    Se isso não funcionar, talvez você tenha que remover o bootmgr primeiro:

    c:
    attrib -s -h bootmgr
    del bootmgr
    
  4. Instale corretamente o carregador de boot. De X:\windows\system32 chamada:

    bootsect /nt60 c:
    bootrec /fixboot
    

    A segunda linha é uma boa medida, não tenho certeza se é necessário. Não faça bootrect /fixmbr , pois isso substituirá o GRUB.

Poderia funcionar agora, mas se isso não acontecer, você precisará recriar os dados do menu de inicialização (o BCD). No prompt de recuperação:

attrib -s -h C:\boot
ren C:\boot C:\bootbak
bootrec /rebuildbcd

Agora reinicie. Diga ao grub para inicializar a partir de (hd0,2) ou qualquer que seja a partição do Windows, e isso deve funcionar. Depois de um grub-update , o Windows 7 deve estar corretamente no menu novamente.

Recursos:

  • Informações sobre o BOOTMGR que me ajudaram: link
  • Como obter uma ISO do Windows 7 (CD de recuperação) em um pendrive: link
por 12.04.2013 / 18:18