Processo de inicialização do Windows 2008 R2

2

Eu fiquei perplexo tentando entender um pouco do comportamento que estou tendo e esperava que alguém lá fora ajudasse a me esclarecer um pouco.

Acho que minha pergunta se resume a: Como especificamente o processo de inicialização do Windows determina a localização de um VBR / bootsector no disco para a partição 'boot' no Windows 2008 R2?

O pano de fundo da minha pergunta é o seguinte.

Eu tenho uma instalação perfeitamente funcional de 2008R2 (VM) que contém a partição padrão do sistema de 100 MB, seguida pela partição 'boot' ( C:\ ). Para fins educacionais, movi a partição C:\ exatamente 1 MB para a "direita" da partição do sistema (usando gparted), que inseriu um intervalo de 1 MB (setor 2048) entre as duas partições.

Esse processo atualizou corretamente a entrada da partição no MBR, além de modificar o campo "setor reservado / oculto" do C:\ do setor de inicialização.

Mas agora o Windows não inicializa (dá um erro no Gerenciador de inicialização " 0xc0000225 " - um dispositivo necessário está inacessível.). E uma instalação de reparo não pode nem encontrar a instalação do Windows para reparar. Se você monta a unidade em outra máquina Windows, os volumes são saudáveis e viáveis. Além disso, se eu mover a partição C:\ de volta para o local original, tudo será inicializado.

Portanto, considerando que o MBR está apontando para o deslocamento correto, por que o Windows não consegue encontrar / carregar a partição C:\ quando foi movida?

    
por James 10.10.2012 / 20:29

1 resposta

1
Primeiro, você deve observar que o VBR na partição C: não está envolvido no processo de inicialização. O VBR na partição "system" carrega o bootmgr, que carrega o kernel do Windows a partir da partição C :.

Eu apenas tentei isso sozinho. Convenientemente, verifica-se que executar o bcdboot gera uma nova entrada de inicialização no BCD, para que possamos comparar facilmente a entrada antiga com a nova para ver o que mudou.

Usando o bcdedit, podemos ver que as opções device e osdevice são diferentes:

C:\Windows\system32>bcdedit /enum /v

Windows Boot Manager
--------------------
identifier              {9dea862c-5cdd-4e70-acc1-f32b344d4795}
device                  partition=\Device\HarddiskVolume1
description             Windows Boot Manager
locale                  en-us
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
default                 {fde483f1-1482-11e2-90a1-00505698002c}
resumeobject            {fde483f0-1482-11e2-90a1-00505698002c}
displayorder            {fde483f1-1482-11e2-90a1-00505698002c}
                        {7409376c-f38e-11e1-bc89-00505698002c}
toolsdisplayorder       {b2721d73-1db4-4c62-bf78-c548a880142d}
timeout                 30

Windows Boot Loader
-------------------
identifier              {fde483f1-1482-11e2-90a1-00505698002c}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows 7
locale                  en-us
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
osdevice                partition=C:
systemroot              \Windows
resumeobject            {fde483f0-1482-11e2-90a1-00505698002c}
nx                      OptIn
detecthal               Yes

Windows Boot Loader
-------------------
identifier              {7409376c-f38e-11e1-bc89-00505698002c}
device                  unknown
path                    \Windows\system32\winload.exe
description             Windows 7
locale                  en-US
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
recoverysequence        {7409376d-f38e-11e1-bc89-00505698002c}
recoveryenabled         Yes
osdevice                unknown
systemroot              \Windows
resumeobject            {7409376b-f38e-11e1-bc89-00505698002c}
nx                      OptIn

Infelizmente, o bcdedit não nos diz como as informações são armazenadas, então vamos ter que olhar para o arquivo BCD em si. Como você já deve saber, o arquivo BCD é, na verdade, uma seção de registro, e normalmente é carregado em HKLM\BCD00000000 , para que possamos examiná-lo com regedit ou usando a exportação de registro.

O identificador de cada entrada é o nome da chave do registro que contém as configurações. As configurações em si são subchaves, organizadas na mesma ordem em que aparecem na saída do bcdedit. Acontece (sem surpresa) que em cada entrada, dispositivo e dispositivo os contém os mesmos dados, e esses dados são diferentes para a entrada de funcionamento do que para o antigo.

No meu sistema, isso aparece na entrada em funcionamento:

"Element"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,06,00,00,00,00,\
  00,00,00,48,00,00,00,00,00,00,00,00,00,80,06,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,01,00,00,00,b0,5d,de,33,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

e isso aparece na entrada antiga:

"Element"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,06,00,00,00,00,\
  00,00,00,48,00,00,00,00,00,00,00,00,00,50,06,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,01,00,00,00,b0,5d,de,33,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

Há apenas uma diferença. Vamos formatar a entrada antiga um pouco mais bem:

0000 00,00,00,00,00,00,00,00,
0008 00,00,00,00,00,00,00,00,
0010 06,00,00,00,00,00,00,00,
0018 48,00,00,00,00,00,00,00,
0020 00,00,50,06,00,00,00,00,
0028 00,00,00,00,00,00,00,00,
0030 00,00,00,00,01,00,00,00,
0038 b0,5d,de,33,00,00,00,00,
0040 00,00,00,00,00,00,00,00,
0048 00,00,00,00,00,00,00,00,
0050 00,00,00,00,00,00,00,00

Na nova entrada, o byte 0x0022 é 0x80 em vez de 0x50. Acontece que eu mudei a partição por 3MB, então eu suspeito que isso seja parte de um offset. Vamos ver o que acontece se eu mover outros 4MB (para um total de 7MB) e criar uma nova entrada BCD, vamos? OK ... o 0x80 se torna 0xC0, então isso é consistente.

Um palpite sensato seria que os oito bytes (ou talvez dezesseis?) iniciados em 0x0020 são o deslocamento de byte do início da partição. O valor de 0x06C00000 é 113246208 ou exatamente 108 MB; Examinando a tabela de partição, acho que é realmente o início da partição. QED. : -)

    
por 11.10.2012 / 22:30