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

9

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á.

SuperTempel
fonte
Apenas imaginando, você se certificou de que a partição oculta do sistema foi movida corretamente?
Colum
Qual partição oculta você quer dizer? Acabei de adicionar a atualização nº 6, que fala sobre a partição de inicialização extra, e sim, também a mudei. Havia também outra área "oculta" entre o MBR e o início da (s) partição (ões) do Windows, mas isso não deveria ter relevância - isso é apenas um blob de dados (no meu caso: uma partição HFS + enquanto estou em movimento) uma instalação do Boot Camp aqui). As únicas coisas envolvidas devem ser: O mapa da partição (MBR mais o mapa de partição esquematizado GUID a seguir) e as duas partições envolvidas do Windows (o pequeno inicializador e a partição C:). Eu atualizei tudo corretamente, é claro. :)
SuperTempel
Certamente as coisas importantes estão armazenadas \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.
quer
@ Ben: sim, eu sei sobre o bcdedit - mas não quero editar nada, tanto quanto posso dizer, pois não quero alterar nenhuma de suas opções como estavam no lugar antes de mover as partições para um novo disco . Tudo o que quero atualizar é qualquer número fixo de bloco e referências de ID de disco, sem o uso de nenhum executável do Windows, se possível.
SuperTempel
11
Não é uma questão de programação. Este é um conhecimento de domínio sobre o carregador de inicialização do Windows.
ninguém

Respostas:

1

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 você 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, em seguida, pressione ENTER.

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

Nota Se a reconstrução do BCD não resolver o problema de inicialização, você poderá exportar e excluir o BCD e, em seguida, executar esta opção novamente. Ao fazer isso, você garante que o BCD seja 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.

Consulte: Support.Microsoft.com para obter mais detalhes.

Essobi
fonte
11
Obrigado por tentar ajudar, mas o que você diz é conhecimento padrão, como você aponta. Preciso especificamente das informações "o que está acontecendo" para fazer isso em meu próprio programa escrito, não usando o software da Microsoft, que ainda é difícil de manusear para um usuário trivial. Quero poder fornecer uma solução para um usuário de Mac com uma instalação do Boot Camp, caso ele precise movê-la para outro disco. E, como efeito colateral, isso ajudaria qualquer outro usuário do Windows, pois as tarefas seriam as mesmas.
SuperTempel
Se eu estivesse tentando fazer isso ... eu dd o disco antes e depois e faria uma comparação binária entre os dois. Boa sorte.
Essobi
Estou à sua frente, novamente. Veja, eu sou o autor do iBored, então sei como fazer coisas assim e, acredite, tentei. O novo formato é muito enigmático para mim, e é por isso que estou fazendo essa pergunta aqui.
SuperTempel