Cosa deve essere aggiornato quando si sposta una partizione di Windows 7 (o Vista) avviabile?


9

Quando sposto una partizione NTFS avviabile con Windows su un diverso offset del blocco, cosa deve essere aggiornato per renderla nuovamente avviabile?

Background: ho intenzione di scrivere un programma che esegua le azioni necessarie , ecco perché non sto cercando guide su come usare gli strumenti di Microsoft avviando da un DVD di Windows. Invece, ho bisogno di come modificare queste cose da solo, in modo da poter scrivere una soluzione che sia più facile per l'utente medio del PC quando vuole spostare il suo sistema Windows su un disco rigido più grande.

In particolare, ecco cosa ho provato:

Ho un disco con diverse partizioni, una delle quali è la partizione NTFS con Windows su di essa, e il disco utilizza il semplice vecchio blocco MBR 0 per il layout delle partizioni (non più di 4 partizioni).

Ora formatto e partiziono un disco nuovo, più grande. Lì faccio spazio per la partizione NTFS e copio il contenuto dalla partizione Windows NTFS del vecchio disco in. E rendo la partizione "attiva".

Tuttavia, quando provo ad avviare da questo disco, ricevo immediatamente un messaggio di "errore di lettura" e l'avvio si interrompe, il testo esatto è:

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

Ho verificato che entrambi i dischi hanno lo stesso codice del settore di avvio nel blocco 0.

Mi sembra che qualcos'altro potrebbe dover essere aggiornato. Immagino che da qualche parte ci sia un riferimento di blocco assoluto che devo aggiornare, probabilmente indicando il caricatore di livello successivo o il kernel NT.

Aggiornamento: ho trovato questo articolo che va abbastanza in profondità in quello che voglio sapere. Tuttavia, dice di modificare boot.ini, ma ho Windows 7 installato qui, dove tali cose sembrano essere cambiate: No boot.ini ma una cartella denominata System Volume Information con GUID e altri dati in esso che sembrano correlati al mio problema . Continuando a scavare ...

Aggiornamento 2: Grazie al sito Web terrificante ma molto informativo di Starman , sono stato in grado di capire il primo passo: il settore di avvio NTFS ha un campo per settori "nascosti". Questo campo deve contenere il numero di settore del settore di avvio. Questo risolve il messaggio "errore di lettura". Ora, invece, viene visualizzato l'errore "BOOTMGR mancante". Sembra che ci sia un altro posto in cui un numero di blocco deve essere modificato, ma non riesco a trovare nulla nella lista di codici su questo.

Trovo molti siti di aiuto che suggeriscono gli strumenti di Windows per risolvere questo problema "Manca BOOTMGR", ma nessuno sembra sapere cosa succede dietro le quinte. Un po 'come suggerire di reinstallare Windows quando c'è un piccolo problema con esso. Almeno, quelle correzioni sembrano funzionare, coinvolgendo principalmente gli strumenti Bcdedit e Bootrec. Ora, chissà cosa fanno, specialmente quest'ultimo, per quanto riguarda una partizione spostata?

Aggiornamento 3: dopo molti tentativi di tentativi ed errori, credo ora che la soluzione risieda nel file di registro del modello BCD , che di solito risiede in \ Windows \ System32 \ config. Se ricevo questo aggiornamento utilizzando il comando "bcdboot", Windows si avvia da esso. Sono ora nel mezzo di capire quali informazioni questo registro contiene pertinenti alla domanda di cui sopra. Qualsiasi suggerimento sul contenuto di questo registro è il benvenuto.

Aggiornamento 4: Si scopre che mentre il file modello BCD viene riscritto e ha contenuti binari diversi rispetto al suo predecessore, i valori all'interno non cambiano. Quindi deve essere qualcos'altro che scrive bcdboot.exe. In precedenza avevo già verificato se cambia i primi 32 blocchi di avvio della partizione, ma sembrano rimanere invariati. Neanche la mappa di Parititon viene cambiata. Quindi cosa modifica bcdboot oltre al registro BCD? Qualche consiglio su come posso rintracciarlo? Esistono strumenti di basso livello che mi mostrano in quali file scrive un programma?

Aggiornamento 5: la risposta sembra essere: c: \ Boot \ BCD è anche cambiato e quello sembra essere il file chiave per il processo del boot manager. Lo esaminerò più tardi ...

Aggiornamento 6: sembra essere un dettaglio importante che avevo originariamente creato due partizioni quando ho installato Windows 7: una piccola partizione di 204800 settori che sembra essere una partizione bootstrap, seguita dalla partizione effettiva, grande, contenente il sistema Windows ( guidare C :). Quando ho provato a trasferire questa installazione su un nuovo disco, più grande, avevo mantenuto le stesse due partizioni intatte sulla nuova unità, anche se avevano un offset diverso. Questo da solo ha portato al messaggio "Manca BOOTMGR". Da allora, ho usato bcdboot.exe solo sulla partizione di Windows, che ha aggiuntoil file \ Boot \ BCD su quella partizione. Quel file (e cartella) esisteva originariamente solo sulla partizione più piccola. Quindi, questo problema potrebbe essere più complicato nel mio caso in quanto una partizione (la sequenza di avvio) si riferiva a un'altra partizione (quella contenente il sistema operativo), mentre altre persone potrebbero avere a che fare solo con una partizione contenente entrambi, e forse c'è la soluzione è più semplice.

Aggiornamento 7: trovato un altro dettaglio: il file \ Boot \ BCD registra il numero seriale dell'MBR. Se quel numero non corrisponde, il sistema non si avvia. Quindi testerò se c'è anche un riferimento di blocco assoluto memorizzato lì.


Mi chiedevo, ti sei assicurato che la partizione di sistema nascosta fosse spostata correttamente?
Colum,

Quale partizione nascosta vuoi dire? Ho appena aggiunto l'aggiornamento n. 6 che parla della partizione di avvio aggiuntiva e sì, l'ho spostato anch'io. C'era anche un'altra area "nascosta" tra l'MBR e l'inizio delle partizioni di Windows, ma ciò non dovrebbe avere alcuna rilevanza - questo è solo un blocco di dati (nel mio caso: una partizione HFS + mentre mi muovo un'installazione Boot Camp qui). Le uniche cose coinvolte dovrebbero essere: la mappa delle partizioni (MBR più GUID schematizzata in seguito) e le due partizioni Windows coinvolte (il piccolo booter e la partizione C:). Ho aggiornato tutto correttamente, ovviamente. :)
SuperTempel

Certamente le cose importanti è memorizzato in \BCD\Boot, e che normalmente di modifica che con bcdedit.exe, non è bcdboot. E sì, la partizione separata per il boot-strapping (che è richiesta solo quando si utilizza la funzionalità di crittografia dell'intero disco, poiché il codice di decrittazione deve essere archiviato all'esterno della partizione principale di Windows) controlla il processo di avvio, se esiste.
Ben Voigt,

@Ben: sì, lo so di bcdedit - ma non voglio modificare nulla, per quanto posso dire in quanto non voglio cambiare nessuna delle sue opzioni come erano in atto prima di spostare le partizioni su un nuovo disco . Tutto quello che voglio aggiornare sono qualsiasi numero di blocco fisso e riferimenti ID disco, senza l'uso di eseguibili di Windows, se possibile.
SuperTempel il

1
Non è una domanda di programmazione. Questa è la conoscenza del dominio sul bootloader di Windows.
nessuno il

Risposte:


1

Il modo più semplice?

Inserire il disco di installazione di Windows Vista o Windows 7 nell'unità disco, quindi avviare il computer.
Premere un tasto quando richiesto.
Selezionare una lingua, un'ora, una valuta, una tastiera o un metodo di input, quindi fare clic su Avanti.
Fai clic su Ripara il tuo computer.
Fare clic sul sistema operativo che si desidera ripristinare, quindi fare clic su Avanti.
Nella finestra di dialogo Opzioni ripristino di sistema, fare clic su Prompt dei comandi.
Digitare Bootrec.exe e quindi premere INVIO.

Opzioni di Bootrec.exe
Lo strumento Bootrec.exe supporta le seguenti opzioni. Utilizzare l'opzione appropriata per la propria situazione.

Nota Se la ricostruzione del BCD non risolve il problema di avvio, è possibile esportare ed eliminare il BCD, quindi eseguire nuovamente questa opzione. In questo modo, ti assicuri che il BCD sia completamente ricostruito.

Per fare ciò, digitare i seguenti comandi al prompt dei comandi di Windows RE:
bcdedit / export C: \ BCD_Backup
c: attributo di
avvio cd
bcd -s -h -r
ren c: \ boot \ bcd bcd.old
bootrec / RebuildBcd

o / FixMbr o / FixBoot o / ScanOs o / RebuildBcd a seconda della situazione.

Vedere: Support.Microsoft.com per maggiori dettagli.


1
Grazie per aver tentato di aiutare, ma ciò che dici è conoscenza standard, come fai notare. Ho specificamente bisogno delle informazioni "che cosa stanno succedendo" per raggiungere questo obiettivo nel mio programma scritto, non usando il software di Microsoft, che è ancora difficile da gestire per un utente banale. Voglio essere in grado di fornire una soluzione a un utente Mac con un'installazione Boot Camp, nel caso in cui debba spostarlo su un altro disco. E come effetto collaterale, aiuterebbe anche qualsiasi altro utente di Windows, poiché le attività sarebbero le stesse.
SuperTempel il

Se stessi provando a farlo ... Dd il disco prima e dopo e farei un confronto binario tra i due. In bocca al lupo.
Essobi

Sono di nuovo davanti a te. Vedi, sono l'autore di iBored, quindi so come fare cose del genere, e credimi, ci ho provato. Il nuovo formato è troppo enigmatico per me, ed è per questo che sto ponendo questa domanda qui.
SuperTempel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.