2015-01-06 12 views
5

Tôi đang cố gắng hiểu cách bmware bios tìm MBR trước khi tải nó.

Trong đĩa cứng vật lý thật dễ dàng - MBR nằm ở khu vực đầu tiên.
Nhưng .. điều gì xảy ra trong máy ảo?

Tôi đã tạo 2 máy ảo - Trong vmdk đầu tiên (với hệ thống dựa trên Linux được cài đặt trên đó) tôi đã tìm thấy MBR ở mức bù 0x2A0000.
Trong tập tin vmdk thứ hai (với Windows XP được cài đặt trên nó), tôi tìm thấy MBR nhiều hơn một lần - nhưng tất cả các khoảng trống tôi tìm thấy không thể chia cho 512 (kích thước sector), đó là kinda lạ (như xa như tôi biết, MBR nên bắt đầu vào đầu một sector + sector có kích thước là 512 byte trong vmdk's => Giá trị bù trừ bắt đầu của MBR PHẢI chia cho 512. sửa tôi nếu tôi sai).
Vì vậy, chúng có lẽ là bản sao để sao lưu tôi đoán .. Không cần phải nói rằng @ offset 0x2A0000 trong xp .vmdk không có gì thú vị.

Vì vậy, cách BIOS của vmware tìm thấy MBR như thế nào? thông số có thể cấu hình này nằm ở đâu \ nó được tính như thế nào?

Thông tin bổ sung:
- Cả hai VMDK đều là tệp 1 đĩa cứng (và có thể phát triển đến 40GB).
Các hệ thống họ chỉ sử dụng chúng & chỉ chúng (XP sử dụng xp.vmdk và linux sử dụng linux.vmdk, không có VMDK bổ sung).

- @Windows VM Tôi đã sử dụng WinHex trên \. \ PhysicalDrive0 để nhận MBR.it trông ok (chữ ký, v.v.).
- @Linux VM Tôi đã sử dụng lệnh "dd if =/dev/sda = = mbr.bin bs = 512 count = 1", sau đó xem các byte hex để nhận MBR.I nhìn vào nó và nó trông ổn (GRUB, chữ ký ở cuối, vv).
Sau khi nhận được MBR từ máy ảo, tôi đã tìm kiếm trong mỗi tệp .vmdk tương ứng cho MBR trong máy chủ (với trình chỉnh sửa hex) và phần bù như tôi đã đề cập ở trên.

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn!Làm thế nào tôi có thể tìm thấy khu vực MBR trong một tập tin VMDK?

Trả lời

7

Đã thấy mọi người xem câu hỏi này và vẫn không có nhận xét hoặc câu trả lời, vì vậy tôi đã tự nghiên cứu một chút.
Có các kết luận sau (cuối cùng trả lời câu hỏi của tôi):

1.Khi tạo một đĩa cứng ảo GB GB với tệp VMware (.VMDK) có thể là một trong hai loại: phẳng hoặc thưa thớt được chia nhỏ thành nhiều tệp .VMDK, nhưng tôi đã không đề cập đến những điều đó trong nghiên cứu của mình).
- phẳng = tất cả không gian đĩa cứng (XXX GB) được cấp phát một lần vào thời gian tạo.
. Kích thước tệp VMDK trên đĩa là XXX GB.

- thưa thớt = tệp đĩa cứng có thể sử dụng được (tối đa XXX GB).
. Kích thước tệp VMDK nhỏ ở đầu và phát triển khi cần.

Như tôi đã nêu trong câu hỏi của mình trong thông tin bổ sung, cả hai .VMDK đều là thưa thớt.

2.Như đã đề cập trong câu hỏi, MBR nằm ở đầu khu vực đầu tiên của đĩa cứng vật lý và tôi tự hỏi nó nằm ở đâu trong tệp .VMDK và cách VMware tính toán nó.
Nó chỉ ra rằng trên tập tin .VMDK phẳng, nó cũng nằm ở đầu của khu vực đầu tiên!
Điều đó khá thẳng thắn khi nhìn vào chúng .. nhưng tôi không bằng phẳng. Vì vậy, những gì xảy ra trong thưa thớt .vmdk của? Mbr ngồi ở đâu?

3.sparse .vmdk tệp có cấu trúc khác (đối với cấu trúc chi tiết, bạn có thể đọc VMware's Virtual Disk Format Spec với tiêu điểm trên trang 6 - struct SparseExtentHeader.
Không thể tìm thấy ở đó logic về cách tính toán khu vực đầu tiên của MBR , nhưng như xa như tôi đã thấy (giải thích trong 5 làm thế nào tôi đã nhận nó) nó đi như thế này:

@ .VMDK offset 0x38 - 0x3F (8 byte dài) ngồi gdOffset.it lưu trữ bù đắp (****) 4 byte đầu tiên của siêu dữ liệu là giá trị bù trừ tiếp theo (****) để nhảy tới.
Ở đó, 4 byte tiếp theo là giá trị bù trừ (****) của MBR.
(****) có nghĩa là bù đắp trong các lĩnh vực. ví dụ. 1 có nghĩa là bù đắp 512, 2 có nghĩa là 1024, v.v.

Để tóm tắt tất cả, có vẻ như sau:
Giả sử 'dữ liệu được lưu trữ tại offset 0x38-0x3F (8 byte long)' như [(0x38): 8 ].

Sau đó,
MBR offset = 512 X [(512 X [(512 X [(0x38): 8]): 4]): 4]

4.I tạo 2 mới (Windows xp VM và Linux) với số lượng lớn .VMDK và phương pháp tính MBR này cũng đã tự chứng minh cho cả hai (như bạn có thể thấy trong hình ảnh đính kèm ở 7).

5. Làm thế nào tôi có được công thức này?
Sử dụng SysInternal's process Monitor khi lọc:
-Process chứa vmware
-Operation được CreateFile \ ReadFile
-Path chứa < đường dẫn file vmdk>

tôi mỗi vmdk đơn đọc (và nó bù đắp).
Tôi nhìn nơi nó đọc bù đắp của MBR (trong hệ thống Linux tôi biết bù đắp là 0x2A0000), và những gì nó đã đọc trước đây. Chuyển sang offsets mà trông giống như họ sẽ giúp tôi tìm những gì đang xảy ra ở đó .. và họ chắc chắn đã làm :)

6. Điều tôi không giải thích là tại sao MBR trong hệ thống xp trong câu hỏi ban đầu của tôi là bù trừ lạ (không thể chia cho 512).
Vâng, thành thật mà nói, tôi không có lý do đầy đủ, nhưng tôi quên đề cập rằng trước khi MBR kiểm tra tôi đã xóa MBR gốc từ hệ thống này và hỗ trợ VM. Nó hỏi tôi nếu tôi muốn bắt đầu cửa sổ bình thường, và chỉ sau đó nó xuất hiện trong bù đắp lạ (sao chép nó vào đó để sao lưu hoặc một cái gì đó) .Điều lạ ở đây là tôi không thể tìm thấy MBR này trong bù đắp bình thường. Tôi đã có một số tiến bộ nhưng không có câu trả lời chắc chắn.
Nếu ai đó biết được, cảm thấy tự do để bình luận (:

hình ảnh 7.Attached:
Windows XP MBR finding explanation Linux MBR finding explanation

Các vấn đề liên quan