Tornar o Windows inicializável depois de copiar de uma partição para outra

0

Recuperei o Windows7 do DVD de resgate, que veio junto com o meu laptop. A recuperação re-particiona a unidade SSD quanto aos padrões de fábrica, mas eu gostaria de mudar isso. Mais exatamente, após a conclusão da recuperação, as partições são as seguintes:

root@ubuntu:~# fdisk -l /dev/sda

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   419432447   209715200   27  Hidden NTFS WinRE
/dev/sda2   *   419432448   419637247      102400    7  HPFS/NTFS/exFAT
/dev/sda3       419637248   839067647   209715200    7  HPFS/NTFS/exFAT

Comentários:

  • /dev/sda2 é uma pequena partição que tem bootmgr e Boot .
  • O Windows7 está instalado em /dev/sda3 , que não tem bootmgr nessa partição.

Agora, gostaria de copiar o Windows7 de /dev/sda3 para /dev/sda1 e torná-lo inicializável. Como as partições têm o mesmo tamanho, isso é muito simples no Linux:

root@ubuntu:~# dd if=/dev/sda3 of=/dev/sda1 bs=4096

Depois disso, mudei o tipo de partição:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   419432447   209715200    7  HPFS/NTFS/exFAT
/dev/sda2   *   419432448   419637247      102400    7  HPFS/NTFS/exFAT
/dev/sda3       419637248   839067647   209715200    7  HPFS/NTFS/exFAT

Então eu reiniciei. O Windows7 é inicializado a partir de /dev/sda3 (que se torna C: ) e /dev/sda1 se torna D: . Agora faço a cópia do Windows7 inicializável (consulte Trocando meu disco de inicialização do Windows 7 de D para C com BCDBoot e É possível copiar todos os arquivos do Windows 7 de um HD para outro? ):

C:\> bcdboot d:\windows /s d:
Boot files successfully created.

C:\> bootsect /nt60 d: /mbr
Target volumes will be updated with BOOTMGR compatible bootcode.
F: (\?\Volume{b6e65e71-6179-11e5-82c7-806e6f6e6963})
Successfully updated NTFS filesystem bootcode.
\??\PhysicalDrive0
Successfully updated disk bootcode.
Bootcode was successfully updated on all targeted volumes.

Doublecheck:

C:\> bcdedit

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}
resumeobject            {0b9ac05e-6182-11e5-b742-8dbb81fd6d74}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {current}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows 7
locale                  en-US
inherit                 {bootloadersettings}
recoverysequence        {0b9ac060-6182-11e5-b742-8dbb81fd6d74}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {0b9ac05e-6182-11e5-b742-8dbb81fd6d74}
nx                      OptIn

C:\> bcdedit /store D:\Boot\BCD

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=D:
description             Windows Boot Manager
locale                  en-us
inherit                 {globalsettings}
default                 {default}
resumeobject            {f38db522-680d-11e5-829a-18f46ae2d7b0}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  partition=D:
path                    \windows\system32\winload.exe
description             Windows 7
locale                  en-us
inherit                 {bootloadersettings}
osdevice                partition=D:
systemroot              \windows
resumeobject            {f38db522-680d-11e5-829a-18f46ae2d7b0}
nx                      OptIn
detecthal               Yes

Depois de ter inicializado o Linux e marcado a partição como inicializável (é possível fazer isso no Windows, mas uso as ferramentas com as quais estou familiarizado):

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   419432447   209715200    7  HPFS/NTFS/exFAT
/dev/sda2       419432448   419637247      102400    7  HPFS/NTFS/exFAT
/dev/sda3       419637248   839067647   209715200   27  Hidden NTFS WinRE

O conteúdo de /dev/sda1 é o seguinte (doublecheck):

root@ubuntu:~# ls -l /mnt/sda1
total 10749077
drwxrwxrwx 1 root root       4096 Sep 25 06:11 Boot
-rwxrwxrwx 1 root root     383786 Nov 20  2010 bootmgr
drwxrwxrwx 1 root root          0 Sep 23 21:50 Config.Msi
lrwxrwxrwx 2 root root         60 Jul 14  2009 Documents and Settings -> /mnt/sda1/Users
-rwxrwxrwx 1 root root 4717092864 Sep 23 21:50 hiberfil.sys
-rwxrwxrwx 1 root root 6289461248 Sep 23 21:50 pagefile.sys
drwxrwxrwx 1 root root          0 Jul 14  2009 PerfLogs
drwxrwxrwx 1 root root       4096 Sep 23 20:35 ProgramData
drwxrwxrwx 1 root root       8192 Sep 23 21:26 Program Files
drwxrwxrwx 1 root root      12288 Sep 23 21:12 Program Files (x86)
drwxrwxrwx 1 root root       4096 Sep 22 22:00 $Recycle.Bin
drwxrwxrwx 1 root root      20480 Sep 23 21:50 System Volume Information
drwxrwxrwx 1 root root       4096 Sep 23 21:05 Temp
drwxrwxrwx 1 root root          0 Sep 23 21:50 Update
drwxrwxrwx 1 root root       4096 Sep 22 21:58 Users
-rwxrwxrwx 1 root root       4112 Jul 19  2011 version
drwxrwxrwx 1 root root      24576 Sep 23 21:02 Windows

Parece bom. Infelizmente, quando eu inicio, obtenho Bootmgr is missing. Press Ctrl+Alt+Del to restart .

Eu instalei o Grub para /dev/sda1 (sobrescreve o carregador de inicialização padrão):

grub-install --force --no-floppy --boot-directory=/mnt/sda1/Boot /dev/sda1

com o seguinte /mnt/sda1/Boot/grub/grub.cfg :

menuentry "Windows 7" {
    insmod ntfs
    insmod ntldr
    ntldr (hd0,msdos1)/bootmgr
}

O Grub passou o controle para bootmgr corretamente, mas ele é inicializado persistentemente a partir de /dev/sda3 . Quando eu removo a partição /dev/sda3 , a tela inicial de inicialização é mostrado, mas nada acontece (a inicialização apenas trava).

Em seguida, instalei o ntldr no /dev/sda1 (copiado NTDETECT.COM , NTLDR do 64ntfile.zip ) com setor de inicialização "nativo":

C:\> bootsect /nt52 d:

e este boot.ini :

[Boot Loader]
timeout=30
Default=multi(0)disk(0)rdisk(0)partition(1)\Windows

[Operating Systems]
multi(0)disk(0)rdisk(0)partition(1)\Windows="Windows 7 (boot.ini)" /fastdetect

Após a inicialização, é exibido "Ocorreu um erro de leitura do disco". Certamente, é improvável que a unidade SSD falhe desse modo, portanto, acho que o problema está no código de bytes de inicialização / lógica que não pode manipular corretamente o endereçamento / layout da unidade. Eu instalei o Grub (como acima) com esta configuração:

menuentry "Windows 7" {
    insmod ntfs
    insmod ntldr
    ntldr (hd0,msdos1)/ntldr
}

e depois pude ver meu menu como boot.ini acima. Quando eu continuo, o computador reinicia sem nenhuma mensagem de erro (então eu entrei no loop).

Como consertar o problema? Qualquer solução para inicializar o Windows a partir da primeira partição é bem-vinda.

Outros posts sobre o assunto que inspecionei:

P.S .: Nenhuma outra unidade ou dispositivo USB está conectado ao notebook durante o teste.

    
por dma_k 29.09.2015 / 11:10

1 resposta

0

Depois de ter copiado sda3 para sda1 ainda existem alguns "ponteiros" no registro do Windows em sda1 que apontam para sda3. Verifique o conteúdo de HKLM \ SYSTEM \ MountedDevices \ DosDevices \ C: e D: se eles apontarem para a partição correta. (\ DosDevices \ C: valor é assinatura de partição - deve ser assinatura para sda1)

Para criar arquivos de inicialização para sda1: (quando inicializado para sda3 mapeado para c :, sda1 mapeado para d:)

  1. bootect / nt60 d: / mbr - para definir o código de inicialização da partição sda1 (não prejudica a gravação do código de inicialização do Windows no MBR)

  2. bcdboot d: \ windows / s d: - para criar o BCD em sda1

Você não precisa editar o System BCD existente em sda2 e BCD em sda1!

Por fim, altere a partição ativa para sda1.

Reinicie.

Veja Como mover os arquivos de inicialização do Windows 7 para outra unidade / partição para obter ajuda.

    
por 29.09.2015 / 18:47