Quando movo uma partição NTFS inicializável com o Windows para um deslocamento de bloco diferente, o que precisa de atualização para torná-la inicializável novamente?
Antecedentes: 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, eu preciso modificar essas coisas sozinho, para que eu possa escrever uma solução mais fácil para o usuário comum de PC quando ele quiser mover seu sistema Windows para um disco rígido maior.
Em particular, aqui está o que eu 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 simples para o layout das partições (não mais que 4 partições).
Agora, formato e particiono um disco novo e maior. Lá, abro espaço para a partição NTFS e copio o conteúdo da partição NTFS para Windows do disco antigo. E eu faço a partição "ativa".
No entanto, quando tento inicializar a partir deste disco, recebo uma mensagem de "erro de leitura" imediatamente e a inicialização é interrompida, o texto exato é:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Eu verifiquei que os dois discos têm o mesmo código do setor de inicialização no bloco 0.
Parece-me que outra coisa pode precisar de atualização. Eu acho que em algum lugar há uma referência absoluta de bloco que eu preciso atualizar, provavelmente apontando para o próximo carregador de nível ou para o kernel do NT.
Atualização: eu encontrei este artigo aprofundando o que eu quero saber. No entanto, ele diz para modificar o boot.ini, mas eu tenho o Windows 7 instalado aqui, onde essas coisas parecem ter mudado: Nenhum boot.ini, mas uma pasta chamada Informações de Volume do Sistema com GUID e outros dados que parecem relacionados ao meu problema . Vai continuar cavando ...
Atualização 2: Graças ao site de aparência terrível, mas muito informativo da starman , pude descobrir o primeiro passo: O setor de inicialização NTFS possui um campo para setores "ocultos". Esse campo deve conter o número do setor do setor de inicialização. Isso resolve a mensagem "erro de leitura". Agora, no entanto, recebo o erro "BOOTMGR está ausente". Parece que há outro lugar onde um número de bloco precisa ser ajustado, mas não consigo encontrar nada na listagem de códigos sobre isso.
Eu encontro muitos sites de ajuda que sugerem ferramentas do Windows para corrigir esse problema "BOOTMGR está ausente", mas nenhuma parece saber o que se passa nos bastidores. É como sugerir a reinstalação do Windows quando houver um pequeno problema. Pelo menos, essas correções parecem funcionar, principalmente envolvendo as ferramentas Bcdedit e Bootrec. Agora, quem sabe o que eles fazem, especialmente o último, em relação a uma partição movida?
Atualização 3: Após várias tentativas de tentativa e erro, acredito que agora a solução esteja no arquivo de registro do Modelo BCD , residindo geralmente dentro de \ Windows \ System32 \ config. Se eu atualizar isso usando o comando "bcdboot", o Windows será iniciado a partir dele. Agora estou no meio de descobrir quais informações esse registro contém relevantes para a pergunta acima. Quaisquer indicações para o conteúdo deste registro são bem-vindas.
Atualização 4: Acontece que, enquanto o arquivo do Modelo BCD é reescrito e possui conteúdo binário diferente do seu predecessor, os valores internos não são alterados. Portanto, deve ser outra coisa que o bcdboot.exe escreve. Eu já havia verificado anteriormente se ele altera os primeiros 32 blocos de inicialização da partição, mas eles parecem permanecer inalterados. O mapa de parititon também não é alterado. Então, o que o bcdboot modifica além do registro do BCD? Alguma dica de como posso rastrear isso? Existem ferramentas de baixo nível que me mostram em quais arquivos um programa grava?
Atualização 5: A resposta parece ser: c: \ Boot \ BCD também foi alterada e esse parece ser o arquivo de chave do 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 204800 setores que parece ser uma partição de inicialização, seguida pela partição grande e real que contém o sistema Windows ( unidade C :). Quando tentei transferir essa instalação para um disco novo e maior, mantive as mesmas duas partições intactas na nova unidade, embora elas acabassem com um deslocamento diferente. Isso por si só levou à mensagem "BOOTMGR está ausente". Desde então, usei o bcdboot.exe apenas na partição do Windows, que adicionouo 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 strap strap de inicialização) se refere a outra partição (a que contém o sistema operacional), enquanto outras pessoas podem ter que lidar apenas com uma partição que contém os dois e, talvez, 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á. Em seguida, testarei se há também uma referência de bloco absoluta armazenada lá.
\BCD\Boot
, e você normalmente as editaria com bcdedit.exe
, não bcdboot
. E sim, a partição separada para a inicialização (que é necessária apenas quando você usa o recurso de criptografia de disco completo, pois o código de descriptografia precisa ser armazenado fora da partição principal do Windows) controla o processo de inicialização, se existir.