Extragerea datelor din virtualbox-uri virtuale, #!

Într-o seară, noaptea târziu, a trebuit să scot un fișier de la Virtualbox-ul virtual al mașinii oprit pe calculatorul meu de lucru. De la distanță a porni mașina virtuală și mai conectat la acesta nu a funcționat, așa că am decis să încerc să obțineți secțiunea dorită a VDI și montați-l. Situația este puțin complicată de faptul că hard disk virtual, a conținut, deși doar o singură partiție rădăcină, dar a fost extinderea în mod dinamic, ceea ce înseamnă că blocurile sistemului de fișiere sunt aranjate în ordine cronologică, și nu în cel care așteaptă un driver de sistem de fișiere.







Din fericire, puteți converti cu ușurință vdi din format dinamic în format static utilizând vboxmanage, un utilitar multi-scop inclus în pachetul virtualbox:

Acum avem un fișier temp.vdi, în interiorul căruia există o imagine a sistemului de fișiere necesar; pentru a extrage corect, trebuie să calculați deplasarea imaginii în raport cu începutul fișierului. La jumătate găsite la cerere «mount Linux vdi» articole sunt recomandate în acest scop vditool utilitate, destinat de fapt, pentru a testa funcționalitatea discurilor virtuale interne în VirtualBox. Anterior vditool binare pot fi descărcate separat de pe site-ul virtualbox.org, dar acum este acolo, din motive evidente nu (oricine poate compila-te: vditool.cpp)

Noi, ca întotdeauna, vom merge în altă direcție și vom folosi mijloace improvizate. Primii 512 octeți de fișier nostru VDI - antetul, care pot fi sortate folosind, de exemplu, că o descriere structură manuală sau vdi direct antet în sursa VirtualBox. Din aceste surse rezultă că imaginea este etichetă după cum urmează:






512 octeți: antet
4 * N + X: o hartă de blocuri megabyte, aici N este numărul de megaocteți pe hard disk-ul virtual și X este alinierea numărului rezultat la cea mai apropiată limită superioară de 512 octeți
512 + 4 * N + aliniere: offset de date

Cunoscând dimensiunea exactă a discului virtual, puteți calcula cu ușurință offsetul manual:

(Puteți afla UUID-ul discului dorit din ieșirea comenzii hhds din lista vboxmanage). Aici, dimensiunea blocului de hartă a blocurilor este egală cu 512 este 16384, iar decalajul dintre date este 16896.
Sau puteți trage offset-ul direct din antetul vdi. De exemplu, aici este începutul discului meu virtual virtual de patru ori:

Caracterele aldine identifică cei patru octeți ai offsetData la decalajul de 0 × 0158. Puteți să le căutați vizual, amintindu-vă de ordinul mic-endian-byte (în acest caz, valoarea dorită este 0 × 00004200), dar puteți utiliza o comandă simplă:

În orice caz, verificarea încă o dată nu va face niciodată rău.

Să vedem ce se întâmplă la această compensare. Imediat putem presupune că există începutul imaginii hard disk-ului, rezultă că primii 512 octeți conțin mbr. Să verificăm:

Unitate hard disk secțiunea 2 cuprinde: o dimensiune principală megabyte 3859, începând cu 63 de sectoare (sectorul 1 - 512 bytes) și 235 megaocteți avansate retrase în conformitate cu Programul de instalare Debian swap (aceasta este o surpriză pentru virtualke). Pentru a șterge conștiința, verificăm titlul primei secțiuni:

Asta este! Rămâne să se ridice. Acum câțiva ani, ar fi avut un 7903917 extract suplimentar toate sectoarele într-un singur fișier și mount-l, dar acum puteți pur și simplu să specificați abaterea de la începutul fișierului ca opțiune mount (restul partiției extinse, și un schimb în cadrul acesteia vor fi ignorate):

Sarcina este rezolvată, toate sunt gratuite.







Articole similare

Trimiteți-le prietenilor: