2015-01-06 9 views
5

VM웨어가 MBR을로드하기 전에 VM웨어가 MBR을 찾는 방법을 이해하려고합니다.

물리적 인 하드 디스크에는 MBR이 첫 번째 섹터에 있습니다.
하지만 .. VM에서 어떻게됩니까?

저는 2 개의 VM을 만들었습니다 - 리눅스 기반 시스템이 설치된 첫 번째 vmdk에서 오프셋 0x2A0000의 MBR을 발견했습니다.
Windows XP가 설치된 두 번째 vmdk 파일에서 MBR이 두 번 이상 발견되었습니다. 그러나 발견 된 모든 오프셋을 512 (섹터 크기)로 나눌 수 없었습니다. MBR은 섹터의 시작 부분에서 시작해야합니다. 섹터 크기는 512 바이트입니다. MBR의 시작 오프셋은 이어야합니다.은 512로 나눕니다. 내가 틀렸다면 나를 수정하십시오.)
그래서 그들은 아마도 내가 추측하는 백업을위한 복사본 일 것입니다. xp .vmdk의 @ offset 0x2A0000은 아무런 재미가 없었습니다.

그래서 .. 어떻게 VM웨어의 BIOS가 MBR을 찾았습니까? 이 구성 가능한 매개 변수는 어디에 위치해 있습니까 \ 계산 방법은 무엇입니까?

추가 정보 :
- 두 VMDK는 모두 1- 파일 하드 디스크 파일이며 40GB까지 확장 될 수 있습니다.
그들이 제공하는 시스템은 & 만 사용합니다 (XP는 xp.vmdk를 사용하고 linux는 추가 VMDK없이 linux.vmdk를 사용합니다).

- @Windows VM \. \ PhysicalDrive0에서 WinHex를 사용하여 MBR.it을 확인 (ok, sign ... 등)했습니다.
- @Linux VM MBR을 얻기 위해 16 진수 바이트를 본 다음 "dd if =/dev/sda of = mbr.bin bs = 512 count = 1"명령을 사용했습니다. (GRUB, 끝에 서명 등).
VM에서 MBR을 가져온 후 각 해당 .vmdk 파일에서 호스트 PC의 MBR (16 진수 편집기 사용)을 검색했고 위에서 설명한대로 오프셋이있었습니다.

도움을 주시면 감사하겠습니다. 감사!VMDK 파일에서 MBR 섹터를 어떻게 찾을 수 있습니까?

답변

7

이 질문을 보는 사람들은 아직 의견이나 답변이 없으므로 약간의 연구를 직접했습니다. 그들은 또한 수 (평면 또는 스파 스 : VM웨어 (개의 .vmdk 파일)과 함께 XXX GB 가상 하드 디스크를 만드는

1.When는 두 가지 유형 중 하나 일 수 있습니다
는 (결국 내 질문에 대답하는) 다음과 같은 결론을 얻었다 하나 이상의 .VMDK 파일로 분할되었지만, 필자의 연구에서는이를 다루지 않았다.)
- 플랫 = 모든 하드 디스크 공간 (XXX GB)은 생성시 한 번 할당됩니다.
디스크의 .VMDK 파일 크기가 XXX GB입니다.

- 스파 스 = 하드 디스크 파일은 소모품 (최대 XXXGB)입니다.
.VMDK 파일 크기는 처음에는 작으며 필요할 때 커집니다.

추가 정보에 대한 질문에 언급했듯이 .VMDK는 모두 스파 스입니다.

2.질문에서 언급 한 것처럼 MBR은 실제 하드 디스크의 첫 번째 섹터의 시작 부분에 위치하며, .VMDK 파일의 위치와 VMware의 계산 방법에 대해 궁금합니다.
플랫 .VMDK 파일의 은 첫 번째 섹터의 시작 부분에도 위치합니다!
저들을 볼 때 꽤 똑 바른 서언입니다.하지만 내 것이 평평하지 않았습니다. 그래서, 스파 스 .vmdk에서 어떻게됩니까? mbr은 어디에 앉나요?

3.sparse하여 .vmdk 파일이 상세 구조에 다른 구조를 (이, 당신은 6 페이지에 초점을 맞춘 VMware's Virtual Disk Format Spec를 읽을 수 있습니다 - 구조체 SparseExtentHeader을
을 거기에 MBR이 \ 첫 번째 섹터 계산 방법의 논리를 찾을 수 없습니다. 하지만 내가 본 것까지 (5 절에서 설명했다.)

@ .VMDK 오프셋 0x38 - 0x3F (8 바이트 길이)에 gdOffset.it에 오프셋 (****)이 저장된다.
메타 데이터의 처음 4 바이트는 점프 할 다음 오프셋 (****)입니다.
다음 4 바이트 은 MBR의 오프셋 (****)입니다.
(****)은 섹터의 오프셋을 의미합니다. 예 : 1은 오프셋 512를 의미하고 2는 1024를 의미합니다.
'0x38-0x3F (8 바이트 길이)의 오프셋에 저장된 데이터를'(0x38) : 8이라고 가정 해 봅시다. ].는

는 4.I이 새로운 VM의 (윈도우 XP를 작성

다음,
MBR은 = 512 X [4 (: 8]) : 4] 512 X [(512 X [(0x38로를))] 오프셋 리눅스)와 스파 스 .VMDK 의이 MBR 계산 방법도 둘 다 자신을 증명했다. (7에서 첨부 된 이미지에서 볼 수 있듯이).

5. 내가이 공식에 어떻게 접근 했습니까? 필터링 동안
SysInternal's process Monitor 사용 :
- 프로세스는 VM웨어에게
운전 동작이 포함되어 CreateFile에 \ ReadFile을
-Path는 내가 읽은 모든 단일하여 .vmdk있어 <하여 .vmdk 파일 경로>

을 포함 (그리고 그것의 오프셋).
나는 (오프셋이 0x2A0000이라는 리눅스 시스템에서) MBR의 오프셋을 어디에서 읽었는지, 그리고 이전에 이미 읽었던 부분을 보았다. 그들이 무슨 일이 일어나고 있는지를 알 수있게 도와주는 것처럼 보였던 오프셋으로 점프했습니다. 그리고 그들은 분명히했습니다 :).

6. 내가 원래 설명했던 xp 시스템의 MBR이 왜 이상한 오프셋 (512로 나눌 수 없다).
글쎄, 솔직히 말해서, 나는 완전한 이유가 없지만 MBR 검사 전에이 시스템에서 원본 MBR을 삭제하고 VM에 전원을 공급한다고 언급하는 것을 잊었다. 그것은 내가 정상적으로 윈도우를 시작하고 싶다면 나에게 물었고 그때 만 이상한 오프셋 (백업이나 다른 것으로 거기에 복사 됨)에 나타났습니다. 이상한 점은 정상적인 오프셋에서이 MBR을 찾을 수 없다는 것입니다. 나는 진전이 있었지만 확고한 대답은하지 못했습니다.
누군가가 알고 있다면, 의견을 주시기 바랍니다 (:

7.Attached 이미지 :
Windows XP MBR finding explanation Linux MBR finding explanation