Por que um BCD do Windows 7 clonado contém dados incompletos (e, portanto, impede a inicialização)?

9

Eu tive a infelicidade de precisar clonar uma caixa com Windows XP / 7 de inicialização dupla para substituir seu disco rígido por um menor. Eu tive um grande problema para conseguir inicializar e gostaria de entender o que está acontecendo e se eu poderia fazer algo melhor.

Antecedentes: a máquina tem um drive de 750Gb com 3 partições:

  • Windows XP
  • Windows 7
  • Dados

A instalação original foi feita de tal forma que não há partição de recuperação separada do Windows 7. Espero que este fato simplifique um pouco as coisas.

Eu estou substituindo-o por um drive de 80Gb. As partições já foram reduzidas de dentro do Windows 7 para que elas caibam no disco menor.

Eu usei GParted (de um LiveCD do PartedMagic Linux) para copiar as partições. Marcar a partição do Windows XP como a partição ativa (a mesma que no disco original).

Não consegui usar CloneZilla ou fazer uma cópia inteira do disco devido à transição de um disco maior para um menor.

Depois de copiar as partições, copiei manualmente o carregador de boot (tomando cuidado para não copiar a tabela de partições):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

Eu removi o disco original, configurei o novo para que ele seja fisicamente conectado da mesma forma que o original (mestre do canal IDE 1) e tentei inicializar. Isso apresentou o menu de inicialização com sucesso, mas falhou ao selecionar uma das opções (há duas: uma para o XP e outra para o Win7).

Eu fiz uma boa pesquisa que me permitiu perceber que os dados de configuração de inicialização do Windows 7 não continham tudo o que deveria. Eu comparei a saída do BCD dos discos original e novo e observei que as entradas do dispositivo no último eram unknown . Então eu os alterei manualmente para combinar com o original - assim:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

e reiniciado. Desta vez eu pude inicializar o XP e o Win7. Eu preciso fazer mais testes, porque parece haver outras diferenças entre os dois BCDs, mas fazendo com que as mudanças acima sejam pelo menos permitidas, a inicialização ocorrerá.

Então, minha pergunta é realmente perguntar por que o BCD em uma partição clonada pareceria diferente do original e o suficiente para impedir a inicialização?

E um acompanhamento disso seria perguntar se eu deveria estar fazendo isso de outra maneira?

    
por starfry 02.06.2013 / 22:46

2 respostas

13

Após clonar partições contendo sistemas operacionais Windows, é necessário corrigir os dados de configuração de inicialização se as partições clonadas não estiverem exatamente na mesma posição no disco clonado do que no original.

O mecanismo de inicialização do Windows, desde o Windows Vista, armazena sua configuração como "Boot Configuration Data" (BCD) e refere-se a partições, não por números de partição, mas por uma assinatura de disco e deslocamento de setor. A assinatura do disco é um valor de 32 bits incorporado no registro mestre de inicialização. Copiar os primeiros 446 bytes do setor 0 copiará a assinatura do disco.

Se as atividades de clonagem resultarem em partições de disco clonadas com endereços de setores iniciais diferentes dos originais (muito provável, a menos que um clone de disco inteiro seja usado), o clone provavelmente falhará ao inicializar até que esses remédios sejam aplicados.

Basicamente, os deslocamentos do setor precisam ser atualizados e, para isso, você precisará usar um console de recuperação (isso está disponível em um DVD de instalação do Windows 7). Certifique-se de que somente a unidade clonada esteja conectada e inicialize a partir de um DVD de instalação do Windows 7. Na primeira tela, faça as seleções de idioma e clique em "próximo". Na próxima tela (onde "instalar agora" é exibido) pressione SHIFT + F10 para obter um prompt de comando.

Primeiro, confirme as letras de unidade que estão no lugar e as partições às quais elas se relacionam:

diskpart
list volume
exit

Além disso, se precisar, confirme novamente a partição ativa:

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

Em um sistema BIOS, o BCD é armazenado em um arquivo em X:\Boot\BCD , em que X é a letra da unidade da partição ativa (para UEFI está na partição do sistema EFI). Normalmente escondido, pode ser visto com

dir /AH X:\Boot

Pode ser feito um backup assim:

bcdedit /export X:\path\to\bcd\backup

e restaurado

bcdedit /import X:\path\to\bcd\backup

Se um disco tiver vários sistemas operacionais, pode haver vários BCDs. O BCD ativo é o que está em \Boot\BCD na partição marcada como ativa - a partição ativa . Para listar seu conteúdo (em ordem crescente de verbosidade:)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

Para consertar o BCD ativo, estabeleça as letras de unidade para as partições corretas e faça:

bcdedit /set {default} osdevice partition=X:
bcdedit /set {default} device partition=X:
bcdedit /set {bootmgr} device partition=X:
bcdedit /set {memdiag} device partition=X:
bcdedit /set {ntldr} device partition=X:

ou, para corrigir outro BCD (em "X: \ boot \ bcd" nestes exemplos):

bcdedit /store X:\boot\bcd /set {default} osdevice partition=X:
bcdedit /store X:\boot\bcd /set {default} device partition=X:
bcdedit /store X:\boot\bcd /set {bootmgr} device partition=X:
bcdedit /store X:\boot\bcd /set {memdiag} device partition=X:
bcdedit /store X:\boot\bcd /set {ntldr} device partition=X:

Por exemplo, meu sistema que tem XP e 7 e mostra XP como estando em C: e 7 em D: e a partição ativa é C: . então o BCD ativo estará em c:\boot\BCD . O gerenciador de inicialização será encontrado em C:\bootmgr e o diagnóstico de memória estará em C:\boot\memtest.exe . Os comandos necessários seriam:

bcdedit /set {ntldr} device partition=C:
bcdedit /set {memdiag} device partition=C:
bcdedit /set {bootmgr} device partition=C:
bcdedit /set {default} device partition=D:
bcdedit /set {default} osdevice partition=D:

Com essas alterações, reinicializar o computador (Pressionar Alt-F4 conseguirá isso) e a remoção do DVD permitiu que o sistema inicializasse com êxito.

Leitura adicional:

(um clone de disco inteiro não deve sofrer com esses problemas porque o layout da partição na cópia deve ser exatamente igual ao original)

    
por 04.06.2013 / 14:49
7

De acordo com esta documentação não oficial sobre os internos do BCD , as partições no repositório BCD são realmente identificadas pela assinatura do disco e pelo deslocamento da partição. Você copiou a assinatura do disco (MBR bytes 440–443), mas provavelmente alterou as compensações da partição ao colocar as partições em um disco menor, portanto, o BOOTMGR não conseguiu mais encontrar essas partições.

    
por 02.06.2013 / 23:16