Microsoft Windows LDM


Компания Microsoft впервые включила поддержку объединения дисков в Windows NT. В этом разделе описывается архитектура LDM и методы снятия данных.
Динамические диски
Диспетчер логических дисков (LDM) отвечает за управление логическими томами в Windows 2000 и ХР. LDM поддерживает простые тома (аналоги обычных разделов), объединение дисков, RAID уровня 0 (чередование), RAID уровня 1 (зеркальное копирование) и RAID уровня 5. Технологии RAID уже упоминались ранее в этой главе, а здесь они будут описаны более подробно.
К категории базовых относятся диски, описанные в главах 5 и 6. Базовые диски содержат таблицу разделов DOS или GPT, а каждый раздел является самостоятельным. Базовые диски не могут использоваться в LDM. Динамический диск содержит дополнительные структуры данных для создания разделов, пригодных для формирования логических томов.
Динамический диск содержит две важные области. Область разделов LDM занимает большую часть диска; именно в ней создаются динамические разделы. Последний мегабайт динамического диска выделяется под базу данных LDM. База данных содержит записи, описывающие организацию области разделов и правила создания логических томов.
В первом секторе любого динамического диска в системе IA32 находится таблица разделов DOS. Благодаря ей старые системы узнают о том, что диск используется. Таблица содержит всего одну запись, представляющую весь диск, с типом раздела 0x42. Область раздела LDM и база данных находятся в разделе DOS, как показано на рис. 7.9. Для просмотра таблицы разделов можно воспользоваться программой mmls из пакета The Sleuth Kit: mmls -t dos vdisk.dd DOS Partition Table
Units are in 512-byte sectors
Slot              Start              End              Length              Description
00:                                          0000000000              0000000000              0000000001              Primary Table              (#0)
01:                                          0000000001              0000000062              0000000062              Unallocated
02:              00:00              0000000063              0120101939              0120101877              Win LVM / Secure              FS(0x42)
В системах IA64 (Intel Itanium и т. д.) на динамических дисках создаются разделы GPT для области разделов и базы данных LDM. Для этих разделов предусмотрены специальные типы.

Windows поддерживает только одну дисковую группу, в которую автоматически включаются все динамические диски. Область разделов динамического диска разбивается на динамические разделы, а динамические разделы одного или нескольких дисков группируются для формирования логических томов (рис. 7.10). Очень важно различать термины, используемые компанией Microsoft для динамических дисков и разделов DOS. В схеме разделов DOS Microsoft называет логическими томами разделы, создаваемые внутри расширенных разделов, тогда как в динамических дисках логическими томами называются все разделы, которые могут содержать файловую систему или другие данные.

Рис. 7.10. Логический том LDM формируется из динамических разделов, входящих в дисковую группу


База данных LDM
В базе данных LDM хранятся определения динамических разделов и правила создания логических томов. Компания Microsoft не опубликовала точного описания строения базы данных LDM, но Интернет-группы идентифицировали некоторые внутренние структуры данных (одна из групп, Linux NTFS, доступна по адресу: http://Linux-ntfs.sourceforge.net). Из опубликованных справочных руководств Microsoft [Solomon and Russinovich, 2000] известно, что база данных LDM состоит из четырех основных частей. Приватный заголовок сходен с загрузочным сектором файловой системы. Он описывает уникальные характеристики диска и логического тома. Эта структура содержит уникальный идентификатор диска (GUID) и имя дисковой группы. Windows содержит только одну дисковую группу, имя которой определяется именем компьютера. Далее следует оглавление, состоящее из 16 секторов. По данным Соломона и Руссиновича, оглавление «содержит информацию о строении базы данных», то есть о следующей части LDM.

Область базы данных содержит описания дисков, разделов, компонентов и томов. Для каждого динамического диска (как DOS, так и GPT) в базе данных создается запись диска. Записи разделов описывают структуру разделов на динамических дисках. Записи компонентов описывают процесс объединения разделов. Каждая запись раздела содержит ссылку на используемую ей запись компонента. Записи компонентов существуют для объединения, чередования и зеркального копирования. Наконец, записи томов описывают логические тома, то есть результат применения компонентов к разделам.
Рассмотрим пример с двумя динамическими дисками. Имеется логический том, первая часть которого занимает 15 Мбайт на диске 1, вторая — 10 Мбайт на диске 2, а последняя часть — 20 Мбайт на диске 1 (конечно, эти цифры гораздо меньше тех, которые используются в реальных ситуациях). Структура логического тома показана на рис. 7.10. Программа Microsoft dmdiag (http://www.microsoft.com/ windows2000/techinfo/reskit/tools/existing/dmdiag-o.asp) предназначена для вывода информации о записях в базе данных. Результат ее работы выглядит так:
Disk:              Di ski rid=0.1027 updated=0.1222
assoc:              diskid=6a565b54-b83a-4ebb-95eb-842ede926e88
flags:
Disk:              Disk2 rid=0.1063 updated=0.1112
assoc:              diskid=533fe4ab-0409-4ea6-98b3-9648bbc3bdl2
flags:
Эти две записи относятся к двум физическим дискам. Диску 1 присвоен идентификатор 0.1027, а диску 2 — идентификатор 0.1063.
Group:              hashDgl rid=0.1025 update=0.1028
id:              dgid=d4f40362-7794-429a-a6ad-a6dfc0553cee
diskset:              id=00000000-0000-0000-0000-000000000000
copies:              nconfig=all nlog-all
minors:              gt;= 0
Запись определяет группу дисков и показывает, что имя дисковой группы определяется именем компьютера (hash).
Subdisk:              Diskl-01 гid=0.1109 updated=0.1112
info:              disk=0.1027 offset-0 len=30720 hidden=0
assoc:              piex=0.1107 (column=0 offset=0)
Subdisk:              Diskl-02 rid-0.1121 updated=0.1122
info:              disk=0.1027 offset=0 len=40960 hidden=0
assoc:              piex=0.1107 (column=0 offset=51200)
Эти две записи являются записями разделов для физического диска с именем Diskl (ID:0.1027). Для обоих записей параметр plex со значением 0.1107 определяет запись компонента, используемую для создания логического тома. Первая запись (идентификатор 0.1109) определяет 15-мегабайтный раздел со смещением сектора 0 и размером 30 720 секторов. Вторая запись (идентификатор 0.1121) определяет 20-мегабайтный раздел со смещением 30 720 и размером 40 960 секторов.
Subdisk:              Disk2-01 rid=0.1111 updated=0.1112
info:              disk=0.1063 offset=0 len=20480 hidden=0
assoc:              piex=0.1107 (column=0 offset=30720)
Запись определяет раздел для динамического диска Disk2 (ID:0.1063) с идентификатором 0.1111, смещением 0 секторов и размером 20 480 секторов. Связи

между физическим диском и записями динамических разделов показаны на рис. 7.11. Направление стрелки означает, что запись динамического раздела содержит указатель на физический диск.
Plex:              Volume-01              гid=0.1107 update=0.1124
type:              1ayout=CONCAT
state:              state=ACTIVE
assoc:              vol=0.1105

Рис. 7.11. Связи между физическим диском и записями динамических разделов в базе данных LDM



Рис. 7.12. Связи между записями базы данных LDM (указатели на другие объекты обозначены стрелками)


Приведенный фрагмент является записью компонента объединения дисков (C0NCAT), описывающей способ создания логического тома посредством объединения динамических разделов. Мы видим идентификатор 0.1107, который встречался

в каждой из записей разделов.
Также видно, что он ассоциируется с идентификатором тома 0.1105, описание которого приводится далее.
Volume:              Volumel rid=0.1105 update=0.1124 mountname=F:
info:              len=92160 guid=e40794d0-6e3c-4788-af3d-ff49d2ce769d
type:              parttype=7 usetype=gen
state:              state=ACTIVE
policies:              read=SELECT
flags:              writeback
База данных завершается последним фрагментом, содержащим запись логического тома. В записи указана точка монтирования F:\ и длина 92 160 секторов. Тому присвоен идентификатор 0.1105 и имя Volumel. Связи между записями показаны на рис. 7.12. Учтите, что все диски группы содержат одинаковые записи базы данных.
Итоговая организация логического тома показана на рис. 7.13. Обратите внимание: последовательность разделов в логическом томе не соблюдается.


Диск1

Том1

Диск2

Рис. 7.13. Диск LDM с двумя физическими дисками, тремя динамическими разделами и одним логическим томом


База данных LDM завершается журналом транзакций, то есть протоколом изменений LDM. В случае сбоя питания или отказа оборудования журнал позволяет восстановить диск в работоспособном состоянии.
Снятие данных и анализ
Анализ любого логического тома довольно сложен, особенно при программной реализации, а воссоздание тома в режиме «только для чтения» является отнюдь не тривиальной задачей. Как упоминалось ранее в разделе, посвященном RAID, анализ системы проще всего выполняется при снятии данных с логического тома и применении стандартных средств анализа. Тем не менее в Windows это не всегда возможно, потому что система пытается монтировать диски при загрузке. Снятие смонтированной файловой системы может привести к порче образа, а монтирование способно вызвать модификацию данных. Перемещение дисковых групп LDM между компьютерами также сопряжено с некоторым риском. В Windows в любой момент времени поддерживается только одна дисковая группа, а динамические диски добавляются в локальную группу, если она существует [Microsoft, 2003]. Следовательно, если динамические диски из исходной системы импортируются в систему анализа, использующую динамические диски, они будут включены в локальную группу дисков, а ОС запишет новые данные в базу данных LDM.

Ядро Linux включает поддержку объединения дисков LDM, хотя она и не всегда включается по умолчанию. Если в вашем дистрибутиве объединение дисков отключено, возможно, вам придется перекомпилировать ядро. Если ядро поддерживает LDM, Linux прочитает базу данных и создаст устройства для каждого динамического раздела каждого динамического диска. Например, если загрузить Linux с двумя дисками из предыдущего примера, в системе будут созданы устройства /dev/hdbl, /dev/hdb2 и /dev/hddl. Затем создается файл /etc/raidtab с описанием структуры, чтобы драйвер ядра MD мог создать одно устройство. Если /dev/ hdbl содержит первый раздел, /dev/hddl — второй, a /dev/hdb2 — третий, то файл raidtab выглядит так: raiddev /dev/mdO

raid-level

linear

nr-raid-disks

3

nr-spare-disks

0

persistent -superblock 0

chunk-size

4k

device

/dev/hdbl

raid-disk

0

device

/dev/hddl

raid-disk

1

device

/dev/hdbl

raid-disk

2


В случае «линейных» томов RAID размер фрагмента (chunk-size) задается произвольно, но параметр должен существовать. Программы EnCase (Guidance Software) и ProDiscover (Technology Pathways) умеют импортировать отдельные образы из логических томов Windows и объединять их.
Если используется только объединение дисков, вы можете вручную извлечь разделы и скомбинировать их из дисковых образов. Информацию о строении тома можно получить при помощи программы dmdiag.exe, но программа работает только в Windows и требует, чтобы диски были смонтированы. По этой причине мы воспользуемся другой программой из Linux. Группа Linux NTFS разработала программу Ldminfo (http://Linux-ntfs.sourceforge.net/status.html#ldmtools), которая анализирует записи базы данных LDM динамического диска Windows и выводит подробную информацию с ключом -dump. Программа работает с любыми неструктурированными устройствами или дисковыми образами массива дисков, потому что базы данных на всех дисках содержат одинаковые записи. Она выводит такую же подробную информацию, как и dmdiag.exe, но мы сосредоточимся на информации о структуре тома из предыдущего примера: ldminfo --dump diskl.dd
VOLUME DEFINITIONS:
Volume Size: 0x00016800 (45 MB)
Diski-01              VolumeOffset:              0x00000000              Offset:              0x00000000              Length:              0x00007800
Diskl-01              VolumeOffset:              0x00007800              Offset:              0x00000000              Length:              0x00005000
Di ski-02              VolumeOffset:              0x0000C800              Offset:              0x00007800              Length:              0x0000A000
Из результатов видно,              что том содержит два диска и три раздела. Диск нетруд
но воссоздать, потому что он использует объединение без разбиения данных. Ранее из результатов выполнения mmls для образа диска мы видели, что область разделов начинается в секторе 63. Следовательно, к смещениям в выходных данных

Ldminfo необходимо прибавлять 63, потому что смещения задаются относительно начала области разделов. Чтобы получить данные первого раздела, мы извлекаем 30 720 секторов (0x7800) из области разделов первого диска: dd if=diski.dd skip=63 count=30720 gt; span.dd
Вторая часть дискового массива является первой частью второго диска. Мы присоединим ее содержимое к данным первого диска. Таким образом, следует извлечь первые 20 480 секторов (0x5000) из области разделов второго диска: dd if=disk2.dd skiр=63 count=20480 » span.dd
Последняя часть массива находится в области разделов первого диска. Она также будет присоединена к данным, извлеченным со второго диска. Данные начинаются с сектора 30 720 (0x7800) области разделов; следовательно, нам нужен сектор 30 783 по отношению к началу диска, а его длина составляет 40 960 секторов. dd if=diski.dd skip=30783 count=40960 » span.dd
Полученный образ span.dd обрабатывается как обычный образ файловой системы. Если доступна поддержка LDM уровня ядра, я рекомендую сначала опробовать этот путь, прежде чем браться за ручную обработку. Также учтите, что при разработке многих вспомогательных драйверов сторонних разработчиков и утилит LDM подробные спецификации Microsoft отсутствовали, поэтому правильность их работы не гарантирована.
Библиография Lewis, A.J. «The LVM HOWTO». The Linux Documentation Project, 2002-2004. http://tldp.org/H0WT0/LVM-H0WT0/. Microsoft, «Description of Disk Groups in Windows Disk Management». Microsoft Knowledge Base Article 222189, November 21, 2003. http://support.microsoft.com/ kb/222189. Microsoft. Microsoft Windows XP Professional Resource Kit Documentation, 2004. http://www.microsoft.com/resources/documentation/Windows/XP/aU/reskit/en-us/ prork_overview.asp. Ostergaard, Jakob. The Software-RAID HOWTO». The Linux Documentation Project, June 3, 2004. http://www.tldp.org/H0WT0/Software-RAID-H0WT0.html. Patterson, David A., Garth Gibson and Randy H.Katz. «А Case for Redundant Arrays of Inexpensive Disks (RAID)». ACMSIGMOD International Conference on Management of Data, June 1988. PC Guide. «Redundant Arrays of Inexpensive Disks». April 17,2001. http://www.pc- guide.com/ref/hdd/perf/raid/index.htm. Solomon, David, and Mark Russinovich. Inside Microsoft Windows 2000. 3rd ed. Redmond: Microsoft Press, 2000. Sourceforge.net. «LDM Documentation». Linux NTFS Project, 2002. http://Linux- ntfs. sourceforge.net/ldm/index.html.


<< | >>
Источник: Кэрриэ Б.. Криминалистический анализ файловых систем. 2007

Еще по теме Microsoft Windows LDM:

  1. ОКНО В MICROSOFT
  2. СОЗДАНИЕ НОВЫХ АЛЬЯНСОВ В КОРПОРАЦИИ MICROSOFT
  3. Снятие данных и анализ
  4. Программная реализация RAID
  5. Разделы в DOS
  6. Один маленький шаг
  7. Категория метаданных
  8. Введение
  9. Факторы анализа
  10. Использование томов в UNIX
  11. Алгоритмы выделения
  12. EnCase (Guidance Software)
  13. Факторы анализа
  14. Разделы Apple
  15. Программы анализа
  16. Объединение дисков
  17. Факторы анализа
  18. RAID