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ì.
\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.