2015-01-06 17 views
5

Sto cercando di capire in che modo il BIOS di vmware trova l'MBR prima di caricarlo.

In hard disk fisici è facile: l'MBR si trova nel primo settore.
Ma ... cosa succede in VM?
Ho creato 2 VM - Nel primo vmdk (con un sistema basato su Linux installato su di esso) ho trovato l'MBR all'offset 0x2A0000.
Nel secondo file vmdk (con Windows XP installato su di esso), ho trovato l'MBR più di una volta - ma tutti gli offset che ho trovato non potevano essere divisi per 512 (dimensione del settore), il che è piuttosto strano (fino a come so, l'MBR dovrebbe iniziare all'inizio di un settore + la dimensione del settore è 512 byte in vmdk's => L'offset iniziale dell'MBR DEVE dividere per 512. correggimi se ho torto).
Quindi erano probabilmente copie per il backup, immagino .. Inutile dire che @ offset 0x2A0000 in xp .vmdk non era niente di interessante.

Quindi .. come il BIOS di vmware trova l'MBR? dove si trova questo parametro configurabile \ come viene calcolato?

Ulteriori informazioni:
- Entrambi VMDK sono file 1-file-hard-disk (e può crescere fino a 40 GB).
I sistemi che servono li usano solo & (XP usa xp.vmdk e linux usa linux.vmdk, senza VMDK aggiuntivi).

- @Windows VM Ho usato WinHex su \. \ PhysicalDrive0 per ottenere l'MBR.it sembrava ok (firma, ecc.).
- @Linux VM Ho usato il comando "dd if =/dev/sda di = mbr.bin bs = 512 count = 1", quindi ho visto i byte esadecimali per ottenere l'MBR.Io l'ho guardato e sembrava buono (GRUB, firma alla fine, ecc.).
Dopo aver ottenuto gli MBR dalla VM, ho cercato in ciascun file .vmdk corrispondente per l'MBR nel PC host (con un editor esadecimale) e gli offset erano come menzionato sopra.

Qualsiasi aiuto sarebbe apprezzato. Grazie!Come posso trovare il settore MBR in un file VMDK?

risposta

7

Ho visto le persone che hanno visualizzato questa domanda e ancora nessun commento o risposta, quindi ho fatto una piccola ricerca da solo.
Ha ottenuto le seguenti conclusioni (che alla fine risponde alla mia domanda):

1. Quando la creazione di un disco rigido virtuale XXX GB con VMware (file .VMDK) può essere di due tipi: piane o sparsi (che possono anche essere diviso in più di un file .VMDK, ma non ho coperto quelli della mia ricerca).
- flat = tutto lo spazio su disco (XXX GB) viene assegnato una volta al momento della creazione.
. La dimensione del file VMDK sul disco è XXX GB.

- sparse = il file del disco rigido è spendibile (fino a XXX GB).
. Le dimensioni del file VMDK sono piccole all'inizio e crescono quando necessario.

Come ho affermato nella mia domanda nelle informazioni aggiuntive, entrambi i .VMDK erano sparsi.

2.Come menzionato nella domanda, , l'MBR si trova all'inizio del primo settore dell'hard disk fisico e mi sono chiesto dove si trova nel file .VMDK e in che modo VMware lo calcola.
Si scopre che su file .VMDK flat, si trova anche all'inizio del primo settore!
Questa è una prefazione piuttosto semplice quando li guardi .. ma i miei non erano piatti. Quindi, cosa succede in sparse .vmdk's? dove si trova il mbr?

3.sparse di file .vmdk ha una struttura diversa (per la struttura dettagliata, si può leggere VMware's Virtual Disk Format Spec con messa a fuoco a pagina 6 - struct SparseExtentHeader
Impossibile trovare lì la logica di come il MBR \ primo settore è calcolato. , ma per quanto ho visto (spiegato in 5 come sono arrivato) va così:

@ .VMDK offset 0x38 - 0x3F (lungo 8 byte) gdOffset.it memorizza l'offset (****) dei metadati
I primi 4 byte dei metadati sono l'offset successivo (****) a cui saltare.
I successivi 4 byte sono l'offset (****) dell'MBR.
(****) significa offset in settori. per esempio. 1 significa offset 512, 2 significa 1024, ecc.

Per riassumere tutto, appare come segue:
Diciamo "dati memorizzati agli offset 0x38-0x3F (8 byte lungo)" come [(0x38): 8 ].

Poi,
MBR Offset = 512 x [(512 x [(512 x [(0x38): 8]): 4]): 4]

4.I creati 2 nuovi (xp di Windows VM e Linux) con file .VMDK sparsi e questo metodo di calcolo del MBR si è dimostrato anche per entrambi (come potete vedere nelle immagini allegate in 7).

5. Come sono arrivato a questa formula?
Utilizzando SysInternal's process Monitor mentre il filtraggio:
-Process contiene vmware
-Operazione è CreateFile \ ReadFile
-Path contiene < .vmdk percorso di file>

ho avuto ogni singolo .vmdk letto (ed è offset).
Ho cercato dove legge l'offset dell'MBR (nel sistema Linux sapevo che l'offset era 0x2A0000) e cosa aveva già letto in precedenza. Salta agli offset che sembra abbiano intenzione di aiutarmi a capire cosa sta succedendo lì .. e certamente lo hanno fatto :)

6. Quello che non ho spiegato è il motivo per cui l'MBR nel sistema xp nella mia domanda originale era in un offset strano (che non può essere diviso per 512).
Beh, ad essere onesti, non ho una ragione completa, ma ho dimenticato di menzionare che prima dei controlli MBR ho cancellato l'MBR originale da questo sistema e ho acceso la VM. Mi ha chiesto se voglio avviare Windows normalmente, e solo allora è apparso nello strano offset (copiato lì per il backup o qualcosa del genere). La cosa strana qui è che non sono riuscito a trovare questo MBR in offset normale. Ho avuto qualche progresso ma nessuna risposta ferma.
Se qualcuno sa, sentitevi liberi di commentare (:

immagini 7.Attached:
Windows XP MBR finding explanation Linux MBR finding explanation

Problemi correlati