Как найти сектор MBR в файле VMDK?
Я пытаюсь понять, как BIOS VMware находит MBR, прежде чем он загружает его.
В физических жестких дисках это просто - MBR находится в первом секторе.
Но.. что происходит в ВМ?
Я создал 2 ВМ - в первом vmdk (с установленной на нем системой на основе linux) я нашел MBR со смещением 0x2A0000.
Во втором файле vmdk (с установленной на нем Windows XP) я обнаружил MBR более одного раза - но все найденные смещения нельзя было разделить на 512 (размер сектора), что довольно странно (насколько я знаю, MBR должен начинаться с начала сектора + размер сектора равен 512 байтов в vmdk's => Начальное смещение MBR ДОЛЖНО делиться на 512. поправьте меня, если я ошибаюсь).
Так что, вероятно, они были копиями для резервного копирования. Излишне говорить, что @ offset 0x2A0000 в xp .vmdk не был чем-то интересным.
Итак... как BIOS vmware находит MBR? где находится этот настраиваемый параметр \ как он рассчитывается?
Дополнительная информация:
- Оба VMDK являются файлами с 1 файлом на жестком диске (и могут расти до 40 ГБ).
Системы, которые они обслуживают, используют их и только их (XP использует xp .vmdk, а linux использует linux.vmdk, без дополнительных VMDK).
- @Windows VM Я использовал WinHex на \.\PhysicalDrive0, чтобы MBR.it выглядел нормально (подпись и т. Д.).
- @Linux VM Я использовал команду "dd if=/dev/sda of=mbr.bin bs=512 count=1", затем просмотрел шестнадцатеричные байты, чтобы получить MBR. Я посмотрел на него, и оно выглядело нормально (GRUB, подпись в конце и т. д.).
После получения MBR от виртуальных машин я искал в каждом соответствующем файле.vmdk MBR на хост-компьютере (с шестнадцатеричным редактором), и смещения были такими, как я упоминал выше.
Любая помощь будет оценена. Спасибо!
1 ответ
Видел людей, просматривающих этот вопрос, и до сих пор без комментариев или ответов, так что я провел небольшое исследование сам.
Получил следующие выводы (что в итоге отвечает на мой вопрос):
1.При создании виртуального жесткого диска размером XXX ГБ с VMware (файл.VMDK) он может быть одного из двух типов: плоский или разреженный (их также можно разделить на несколько файлов.VMDK, но я не рассматривал их в мое исследование).
- flat = все пространство на жестком диске (XXX ГБ) выделяется один раз во время создания.
Размер файла.VMDK на диске составляет XXX ГБ.
- sparse = файл на жестком диске является расходным (до XXX ГБ).
Размер файла.VMDK в начале небольшой, а при необходимости увеличивается.
Как я сказал в своем вопросе в дополнительной информации, оба.VMDK были редкими.
2. Как уже упоминалось в этом вопросе, MBR находится в начале первого сектора физического жесткого диска, и мне было интересно, где он находится в файле.VMDK и как VMware рассчитывает его.
Оказывается, что на плоском файле.VMDK он также расположен в начале первого сектора!
Это довольно прямое предисловие при взгляде на них... но мое не было плоским. Итак, что происходит в разреженных.vmdk? где сидит мбр?
3.sparse.vmdk файл имеет другую структуру (для более подробной структуры вы можете прочитать Спецификацию формата виртуального диска VMware с акцентом на структуру - SparseExtentHeader).
Не смог найти там логику того, как рассчитывается MBR \ первый сектор, но, насколько я видел (объяснил в 5, как я к нему пришел), это выглядит так:
@.VMDK смещение 0x38 - 0x3F (длиной 8 байт). GdOffset.it хранит смещение (****) метаданных.
Первые 4 байта метаданных являются следующим смещением (****) для перехода.
Там следующие 4 байта являются смещением (****) MBR.
(****) означает смещение в секторах. например, 1 означает смещение 512, 2 означает 1024 и т. д.
Подводя итог всему, это выглядит так:
Скажем, "данные хранятся со смещением 0x38-0x3F (длиной 8 байт)" как [(0x38):8].
Затем,
Смещение MBR = 512 X [(512 X [(512 X [(0x38): 8]): 4]): 4]
4. Я создал 2 новые виртуальные машины (Windows XP и Linux) с разреженными.VMDK, и этот метод вычисления MBR также показал себя для них обоих (как вы можете видеть на прилагаемых изображениях на 7).
5. Как я попал к этой формуле?
Использование монитора процессов SysInternal во время фильтрации:
-Процесс содержит VMware
-Действие - CreateFile \ ReadFile
-Path содержит <путь к файлу.vmdk>
Я получил каждое чтение.vmdk (и это смещение).
Я посмотрел, где он читает смещение MBR (в системе Linux я знал, что смещение было 0x2A0000), и то, что он уже читал ранее. Перепрыгнул на смещения, которые выглядели так, как будто они помогут мне понять, что там происходит.. и они, конечно, сделали:)
6. Что я не объяснил, так это то, почему MBR в системе xp в моем первоначальном вопросе находился в странном смещении (которое нельзя разделить на 512).
Ну, если честно, у меня нет полной причины, но я забыл упомянуть, что перед проверкой MBR я удалил исходную MBR из этой системы и запитал виртуальную машину. Он спросил меня, хочу ли я запустить Windows нормально, и только тогда он появился со странным смещением (скопировал его туда для резервного копирования или чего-то в этом роде). Странно то, что я не смог найти этот MBR в нормальном смещении. У меня был некоторый прогресс, но нет твердого ответа.
Если кто-то знает, не стесняйтесь комментировать (:
7. Прикрепленные изображения: