O que precisa ser atualizado ao mover uma partição inicializável do Windows 7 (ou Vista)?

O que precisa ser atualizado ao mover uma partição inicializável do Windows 7 (ou Vista)?

Quando movo uma partição NTFS inicializável com o Windows para um deslocamento de bloco diferente, o que precisa ser atualizado para torná-la inicializável novamente?

Fundo: Pretendo escrever um programa que execute as ações necessárias, é por isso que não estou procurando guias sobre como usar as ferramentas da Microsoft inicializando a partir de um DVD do Windows. Em vez disso, preciso modificar essas coisas sozinho, para poder escrever uma solução que seja mais fácil para o usuário médio de PC quando ele deseja migrar seu sistema Windows para um disco rígido maior.

Em particular, aqui está o que tentei:

Eu tenho um disco com várias partições, uma das quais é a partição NTFS com o Windows, e o disco usa o antigo bloco MBR 0 para o layout das partições (não mais que 4 partições).

Agora formato e particiono um disco novo e maior. Lá eu abro espaço para a partição NTFS e copio o conteúdo da partição NTFS do Windows do disco antigo. E eu deixo a partição "ativa".

No entanto, quando tento inicializar a partir deste disco, recebo imediatamente uma mensagem de “erro de leitura” e a inicialização é interrompida, o texto exato é:

  A disk read error occurred
  Press Ctrl+Alt+Del to restart

Verifiquei que ambos os discos possuem o mesmo código do setor de inicialização no bloco 0.

Parece-me que algo mais pode precisar de atualização. Eu acho que em algum lugar há umabsolutoreferência de bloco que preciso atualizar, provavelmente apontando para o carregador de próximo nível ou para o kernel do NT.

Atualizar:eu encontreiesseartigo indo bem fundo no que eu quero saber. No entanto, diz para modificar o boot.ini, mas tenho o Windows 7 instalado aqui, onde essas coisas parecem ter mudado: Não há boot.ini, mas uma pasta chamadaInformações de volume do sistemacom GUID e outros dados que parecem relacionados ao meu problema. Vou continuar cavando...

Atualização 2:Graças à aparência terrível, mas muito informativasite porhomem das Estrelas, consegui descobrir o primeiro passo: o setor de inicialização NTFS possui um campo para setores "ocultos". Este campo deverá conter o número do setor de inicialização. Isso resolve a mensagem de "erro de leitura". Agora, no entanto, recebo um erro "BOOTMGR está faltando". Parece que há outro lugar onde um número de bloco precisa ser ajustado, mas não consigo encontrar nada na listagem de código sobre isso.

Eu encontro muitos sites de ajuda sugerindo ferramentas do Windows para corrigir esse problema de "BOOTMGR está faltando", mas ninguém parece saber o que acontece nos bastidores. É como sugerir reinstalar o Windows quando houver um pequeno problema com ele. Pelo menos, essas correções parecem funcionar, principalmente envolvendo as ferramentas Bcdedit e Bootrec. Agora, quem sabe o que eles fazem, principalmente este último, em relação a uma partição movida?

Atualização 3:Depois de muitas tentativas e erros, acredito agora que a solução está naModelo BCDarquivo de registro, geralmente localizado em \Windows\System32\config. Se eu atualizar isso usando o comando "bcdboot", o Windows será inicializado a partir dele. Agora estou tentando descobrir quais informações este registro contém relevantes para a pergunta acima. Quaisquer indicações sobre o conteúdo deste registro são bem-vindas.

Atualização 4:Acontece que, embora o arquivo BCD-Template seja reescrito e tenha conteúdo binário diferente de seu antecessor, os valores internos não mudam. Portanto, deve ser outra coisa que o bcdboot.exe escreve. Já havia verificado anteriormente se isso altera os primeiros 32 blocos de inicialização da partição, mas eles parecem permanecer inalterados. O mapa do Parititon também não é alterado. Então, o que o bcdboot modifica além do registro BCD? Alguma dica sobre como posso rastrear isso? Existem ferramentas de baixo nível que mostram em quais arquivos um programa grava?

Atualização 5:A resposta parece ser: c:\Boot\BCD também foi alterado e esse parece ser o arquivo-chave para o processo do gerenciador de inicialização. Vou investigar isso mais tarde...

Atualização 6:Parece ser um detalhe importante que eu tinha originalmente duas partições criadas quando instalei o Windows 7: Uma pequena partição de 204.800 setores que parece ser uma partição de inicialização, seguida pela partição real e grande que contém o sistema Windows (unidade C: ). Quando tentei transferir esta instalação para um disco novo e maior, mantive as mesmas duas partições intactas na nova unidade, embora elas terminassem em um deslocamento diferente. Isso por si só levou à mensagem “BOOTMGR está faltando”. Desde então, usei bcdboot.exe apenas na partição do Windows, queadicionadoo arquivo \Boot\BCD nessa partição. Esse arquivo (e pasta) existia originalmente apenas na partição menor. Portanto, esse problema pode ser mais complicado no meu caso, pois uma partição (o boot strapper) se refere a outra partição (aquela que contém o sistema operacional), enquanto outras pessoas podem ter que lidar apenas com uma partição contendo ambos, e talvez aí a solução é mais simples.

Atualização 7:Encontrei mais um detalhe: O arquivo \Boot\BCD registra o número de série do MBR. Se esse número não corresponder, o sistema não inicializará. A seguir testarei se também há uma referência absoluta de bloco armazenada lá.

Responder1

A maneira mais fácil?

Coloque o disco de instalação do Windows Vista ou Windows 7 na unidade de disco e inicie o computador.
Pressione uma tecla quando for solicitado.
Selecione um idioma, uma hora, uma moeda, um teclado ou um método de entrada e clique em Avançar.
Clique em Reparar seu computador.
Clique no sistema operacional que deseja reparar e clique em Avançar.
Na caixa de diálogo Opções de recuperação do sistema, clique em Prompt de comando.
Digite Bootrec.exe e pressione ENTER.

Opções de Bootrec.exe
A ferramenta Bootrec.exe oferece suporte às seguintes opções. Use a opção apropriada para sua situação.

Observação Se a reconstrução do BCD não resolver o problema de inicialização, você poderá exportar e excluir o BCD e executar esta opção novamente. Ao fazer isso, você garante que o BCD foi completamente reconstruído.

Para fazer isso, digite os seguintes comandos no prompt de comando do Windows RE:
bcdedit /export C:\BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /RebuildBcd

ou /FixMbr ou /FixBoot ou /ScanOs ou /RebuildBcd dependendo da situação.

Ver:Suporte.Microsoft.compara mais detalhes.

informação relacionada