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

9

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. Tive muitos problemas para inicializá-lo e gostaria de entender o que está acontecendo e se eu poderia estar fazendo algo melhor.

Antecedentes: a máquina possui uma unidade de 750Gb com 3 partições:

  • Windows XP
  • Windows 7
  • Dados

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

Estou substituindo-o por uma unidade de 80Gb. As partições já foram reduzidas no Windows 7 para caber no disco menor.

Eu usei GParted(de um PartedMagicLinux LiveCD) para copiar as partições. Marquei a partição do Windows XP como a partição ativa (a mesma do disco original).

Não consegui usar CloneZillaou 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 inicialização (tomando cuidado para não copiar a tabela de partições):

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

Removai o disco original, coloquei o novo para que ele esteja fisicamente conectado da mesma forma que o original (mestre do canal IDE 1) e tentei inicializar. Isso apresentou o menu de inicialização com êxito, mas falhou ao selecionar uma das opções (existem duas: uma para XP e outra para 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 deveriam. Eu comparei a saída BCD dos discos originais e novos e observei que as entradas do dispositivo no último eram unknown. Então, eu as alterei manualmente para corresponder ao 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 poderia inicializar o XP e o Win7. Preciso fazer mais testes porque parece haver outras diferenças entre os dois BCDs, mas fazer as alterações acima pelo menos permitiu que a inicialização acontecesse.

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

E um acompanhamento para isso seria perguntar se eu deveria fazer isso de outra maneira?

starfry
fonte

Respostas:

13

Após a clonagem de partições que contêm 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 e no original.

O mecanismo de inicialização do Windows, desde o Windows Vista, armazena sua configuração como "Dados de configuração de inicialização" (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 Master Boot Record. Copiar os primeiros 446 bytes do setor 0 copiará a assinatura do disco.

Se as atividades de clonagem resultarem nas partições de disco clonadas com endereços de setor de inicialização diferentes dos originais (provavelmente a menos que um clone de disco inteiro tenha sido usado), o clone provavelmente falhará na inicialização até que esses remédios sejam aplicados.

Basicamente, as compensações do setor precisam ser atualizadas e, para isso, você precisará usar um console de recuperação (disponível em um DVD de instalação do Windows 7). Verifique se apenas a unidade clonada está 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 pressione "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 existentes e as partições às quais elas se relacionam:

diskpart
list volume
exit

Além disso, se necessário, 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 X:\Boot\BCDonde Xestá a letra da unidade da partição ativa (para UEFI está na partição do sistema EFI). Normalmente oculto, pode ser visto com

dir /AH X:\Boot

É possível fazer backup dessa maneira:

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 é aquele na \Boot\BCDpartiçã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 corrigir o BCD ativo, estabeleça as letras da 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 possui XP e 7 e mostra XP como ativo C:e 7 D:ativo 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:\bootmgre o diagnóstico de memória será 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, reiniciar o computador (pressionar Alt-F4 conseguirá isso) e remover o DVD permitiram que o sistema inicializasse com êxito.

Leitura adicional:

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

starfry
fonte
Observe que isso bcdbootfornece uma maneira mais fácil de recriar uma entrada de inicialização, mas não tenho certeza de que seria adequado em um cenário de inicialização dupla do XP / W7.
Harry Johnston
Adoro sua resposta, mas você poderia limpá-la um pouco? Eu acho que há muitas informações estranhas (como comandos de exemplo, quando você tem o comando real logo depois, etc.).
Bigbio2002
Fico feliz que você goste do anser, mas acho que não há muitas informações estranhas lá. Eu tenho uma explicação geral mais um exemplo real no final que realmente demonstra como determinar as partições de cada entrada que precisa ser alterada. Eu precisava de todo o conhecimento acima para consertar meu sistema clonado e, portanto, o apresentei como uma resposta completa para fornecer o máximo de informações a outras pessoas.
starfry
8

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

Sergey Vlasov
fonte
Isso é interessante e certamente explica por que não funcionaria - as compensações da partição seriam definitivamente mais diferentes. Por que, oh, por que isso não é mais formalmente documentado, é uma incógnita! Existe uma maneira aceita (oficial ou não oficial) de "reparar" isso em um disco clonado?
starfry
Suponho que a maneira oficial seja “inicializar a partir de um disco de reparo do sistema preparado anteriormente (ou uma mídia de instalação real, se você o tiver e não uma mídia de recuperação DOEM) e execute o Reparo de Inicialização ; se isso falhar, reinstale o sistema operacional ”. Não tenho certeza se o Reparo de inicialização também recuperaria o XP no seu caso.
Sergey Vlasov
@starfry Existem muitos editores de BCD por aí, incluindo a linha de comando incorporada ( bcdedit). Eu sou a favor do Visual BCD Editor. Se você pode entrar em um ambiente Windows, o Visual BCD facilita bastante a configuração do dispositivo de inicialização. Você pode fazer o mesmo no DVD de inicialização, abrindo o prompt de comando (acho que era o F11 ou algo assim) e usando bcdeditlá. Eu recomendaria contra o reparo do sistema se você quiser corrigi-lo manualmente, já que o reparo do sistema remove o ambiente de recuperação em disco antes.
Bob
Obrigado sergey e @bob. Aceitei esta resposta porque me levou a entender completamente o que está acontecendo. Eu documentei o que agora sei em uma resposta separada.
starfry
desculpe minha ignorância, mas se @starfry for byte para byte copiando sobre sda ​​(não sda1 na partição), mas sda toda a unidade, por que as compensações da partição seriam diferentes?
barlop