Определение параметров RAID

При обсуждении процесса восстановления данных с RAID мы полагали, что знаем его параметры. Однако бывают случаи, когда параметры воссоздаваемого RAID неизвестны. Как их определить? Параметры RAID, которые были установлены по умолчанию, можно узнать у производителя дискового массива, однако в процессе его эксплуатации они могли быть изменены. Может R-Studio помочь в этом случае? Да, для этого следует проанализировать данные компонент RAID при помощи встроенного Текстового/шестнадцатиричного редактора. В данной статье будет рассмотрен этот процесс на примере простого NTFS RAID 5.

Чтобы понять нижеизложенный материал необходимо иметь по крайней мере базовые знания структур данных RAID и файловых систем. Определенную информацию об этом можно получить на следующих веб-сайтах:
RAIDs: http://en.wikipedia.org/wiki/RAID
NTFS basics: http://en.wikipedia.org/wiki/NTFS
NTFS in depth: http://technet.microsoft.com/en-us/library/cc758691.aspx

Итак, попробуем найти неизвестные параметры простого тома RAID 5

Пусть нам известны следующие параметры RAID:
1. Число дисков: Три
2. Файловая Система: NTFS (созданная в Windows XP/2003, далее используется стандартная Главная Загрузочная Запись (стартовый блок MBR))
3. Тип: Обычный том

Необходимо определить:
1. Порядок диска
2. Размер блока
3. Порядок блока
4. Смещение диска

Диски, образующие RAID, являются созанными в R-Studio файлами-образами:
Disk1.arc
Disk2.arc
Disk3.arc
Finding_RAID_Parameters_Rec1.png
Кликните по изображению чтобы его увеличить
Файлы-образы компонент RAID, открытые в R-Studio

Обратите внимание: несмотря на то, что R-Studio нашла объект Disk1 на Disk2.arc, это вовсе не означает, что именно он является первым диском RAID.

Определение Главной Загрузочной Записи
Во-первых следует определить MBR, чтобы найти смещение RAID
1. Последовательно откройте все три файла-образа в Текстовом/шестнадцатиричном редакторе.
2. Не включайте режим Разрешить Запись (enable write), чтобы избежать случайного повреждения данных на редактируемых объектах!
3. Запишите сигнатуру диска Windows для каждого объекта, чтобы в дальнейшем знать, какое окно редактора какому объекту соответствует.
4. Выполните поиск стартового блока MBR. Для этого в диалоговом окне Search (Поиск) введите 33 C0 8E D0 BC (в большинстве случаев это стандартный стартовый блок MBR) в поле HEX; после этого установите радиокнопку From start position (С начальной позиции) и введите 0 в поле Search in offset (Искать в смещении).
5. Нажмите OK (Да) чтобы начать поиск.
Finding_RAID_Parameters_2.png
Данные диалогового окна Search (Поиск) для начала поиска Главной Загрузочной Записи (MBR)

Результаты поиска:
Finding_RAID_Parameters_Rec2.png
Кликните по изображению чтобы его увеличить
Disk1.arc, открытый в Текстовом/шестнадцатиричном редакторе.

Finding_RAID_Parameters_Rec3.png
Кликните по изображению чтобы его увеличить
Disk2.arc, открытый в Текстовом/шестнадцатиричном редакторе. Найден шаблон MBR.

Finding_RAID_Parameters_Rec4.png
Кликните по изображению чтобы его увеличить
Disk3.arc, открытый в Текстовом/шестнадцатиричном редакторе. Найден шаблон MBR.

Из рисунков следует, что шаблон MBR найден в Текстовом/шестнадцатиричном редакторе по адресу 00 на Disk2.arc и Disk3.arc (на Disk1.arc мы видим одни нули). Это означает, что смещение равно 0 и Disk1.arc не может быть первым диском в RAID.

При помощи редактора были корректно распознаны шаблоны на Disk2 и Disk3, являющиеся кодом главного инициализирующего загрузчика (master bootstrap loader code). В нашем случае два диска содержат одинаковые данные MBR в одном месте.

NДалее необходимо определить загрузочный сектор NTFS.
Посмотрим значение поля Sectors preceding partition (Сектора предшествующие разделу) в панели Templates (Шаблоны)
Finding_RAID_Parameters_Rec5.png
Кликните по изображению чтобы его увеличить
Панель Templates (Шаблоны) для Disk2 и Disk3

В нашем случае сектор предшествующий разделу - это сектор 16,065.

Если данная величина больше 63, то мы должны разделить ее на N-1, где N - число дисков (в нашем случае N = 3), в результате чего мы получаем значение 8,032. Это приблизительная позиция, с которой следует начать поиск загрузочного сектора NTFS. Начинать поиск надо с этой позиции, чтобы не найти загрузочных секторов прежних NTFS разделов.

Перейдите в поле Sectors (Секторы) в Редакторе, чтобы произвести поиск шаблона загрузочного сектора NTFS.
Finding_RAID_Parameters_Rec6.png
Кликните по изображению чтобы его увеличить
Поле поиска Sectors (Секторы) в Тестовом/шестнадцатиричном редакторе


В диалоговом окне Search (Поиск) введите EB 52 90 4E 54 46 53 20 20 20 20 (загрузочный сектор NTFS всегда начинается с этих байтов) в поле HEX, установите радиокнопку From current position (С текущей позиции) и введите 0 в поле Search at offset (Искать в смещении).
Finding_RAID_Parameters_6.png
Кликните по изображению чтобы его увеличить
Данные диалогового окна Search (Поиск) для начала поиска загрузочного сектора NTFS

Данный шаблон найден в Редакторе в секторе 8064 на Disk2 и Disk3.

Теперь выберем шаблон Boot sector NTFS (Загрузочный сектор NTFS) в панели Templates (Шаблоны).
Finding_RAID_Parameters_Rec7.png
Кликните по изображению чтобы его увеличить
Disk2.arc, открытый в Текстовом/шестнадцатиричном редакторе. Найден шаблон загрузочного сектора NTFS. Тот же шаблон найден на Disk3.arc.

Мы нашли следующие параметры
Bytes per sector (Байтов в секторе): 512
Sectors per cluster (Секторов в кластере): 8
Logical Cluster Number for the file $MFT (Логический Номер Кластера для файла $MFT): 786432

Ранее найденные параметры:
Смещение RAID: 0

Далее нам нужно определить MFT (главную файловую таблицу) на диске:

1. Попробуем найти примерное смещение MFT с начала RAID:
Смещение MFT с начала раздела в секторах = Логический Номер Кластера файла $MFT * Секторов в кластере+смещение RAID = 786,432*8+0 = 6,291,456
Если смещение RAID не 0, то его необходимо прибавить к результату вышеприведенного уравнения.
Начало MFT на первом диске = Смещение MFT с начала раздела в секторах/(N-1) = 6,291,456/2 = 3,145,728

2. Начнем поиск точного начала MFT с позиции примерно на 2000 секторов меньше данной величины. Например, с сектора 3,140,000.
В диалоговом окне Search (Поиск) введите "FILE" в поле ANSI, установите радиокнопку From current position (С текущей позиции) и ведите 0 в поле Search at offset (Искать в смещении).
Finding_RAID_Parameters_8.png
Кликните по изображению чтобы его увеличить
Шаблон найден в секторе 10,241,463 на Disk2 и в секторе 3,153,792 на Disk3.

Finding_RAID_Parameters_Rec8.png
Кликните по изображению чтобы его увеличить
Первый сектор файловой записи на Disk3. Начало блока данных.

Важно отметить следующее: сигнатура FILE заканчивается значением 0, что означает, что индекс файловой записи не был перезаписан значением fixup. Если бы она заканчивалась значением * (FILE*), то в дальнейшем нам пришлось бы изменить наш поиск.

Шаблон $.M.F.T. (HEX 24 00 4D 00 46 00 54) показывает, что это корректное начало MFT.
Так как сектор 3,153,792 ближе к найденному нами примерному смещению MFT 3,145,728, чем к сектору 10,241,463, то это позволяет допустить, что Disk3 является первым диском RAID.

Далее нам надо учесть, что файловая запись в MFT занимает два сектора и при успешной записи данных на RAID 5 один блок данных записывается на один диск, потом следующий блок данных на следующий диск, далее блок четности на третий диск. Пример такой схемы приведен в следующей таблице ...

Первый диск RAID Второй диск RAID Третий диск RAID
PD 1 2
3 PD 4
5 6 PD
... где числа означают порядок, в котором блоки данных записываются на соответствующие диски, а PD означает блок "четности данных".
(Данная таблица приведена как пример, в общем случае порядок блока может быть произвольным.)

В нашем случае это означает, что индекс файловой записи в MFT будет увеличиваться на единицу с каждым блоком данных. Далее MFT будет располагаться на следующем диске, где индекс файловой записи будет увеличиваться на единицу с каждым соответствующим блоком данных, далее на третьем диске, содержащим блок четности. И так далее.

Так что для нахождения размера блока мы посмотрим на индекс файловой записи на данном блоке и найдем место, в котором он перестают увеличиваться на единицу. Это место будет означать конец блока данных. После этого просмотрим другие диски и найдем тот диск и место, где индекс файловой записи в MFT опять начинает увеличиваться на единицу. Далее аналогично просмотрим следующий диск и т.д.

Такой поиск может быть выполнен путем прокручивания текста в Редакторе через два сектора.

На Disk 3 блок данных заканчивается в секторе 3,153,919 с индексом файловой записи 3F 00.

Finding_RAID_Parameters_Rec9.png
Кликните по изображению чтобы его увеличить
Последняя файловая запись на Disk3. Блок данных заканчивается в следующем секторе (3,153,919).

Посмотрев на другие диски мы увидим, что данная MFT продолжается на Disk 1 в секторе 3,153,792 с индексом файловой записи 40 00 и заканчивается в секторе: 3,153,919 с индексом файловой записи 7F 00. И так далее.

Finding_RAID_Parameters_Rec10.png
Кликните по изображению чтобы его увеличить
Файловая запись продолжается на Disk1. Начало блока данных.

Finding_RAID_Parameters_Rec11.png
Кликните по изображению чтобы его увеличить
Последняя файловая запись на Disk1. Блок данных заканчивается в следующем секторе (3,153,919)

Окончательный результат представлен в следующей таблице:
Disk1 Disk2 Disk3
Сектор: 3,153,792 Запись: 40 00
Сектор: 3,153,918 Запись: 7F 00
Сектор: 3,153,919 Конец stripe блока
Сектор: 3,153,792 Нет записей
Сектор: 3,153,918 Нет записей
Сектор: 3,153,919 Конец stripe блока
Сектор: 3,153,792 Запись: 00 00
Сектор: 3,153,918 Запись: 3F 00
Сектор: 3,153,919 Конец stripe блока
Сектор: 3,153,920 Запись: Нет записей
Сектор: 3,154,046 Запись: Нет записей
Сектор: 3,154,047 Конец stripe блока
Сектор: 3,153,920 Запись: C0 00
Сектор: Сектор: 3,154,046 Запись: FF 00
Сектор: 3,154,047 Конец stripe блока
Сектор: 3,153,920 Запись: 80 00
Сектор: 3,154,046 Запись: BF 00
Сектор: 3,154,047 Конец stripe блока
Сектор: 3,154,048 Запись: 00 01
Сектор: 3,154,174 Запись: 3F 01
Сектор: 3,154,175 Конец stripe блока
Сектор: 3,154,048 Запись: 40 01
Сектор: Сектор: 3,154,174 Запись: 7F 01
Сектор: 3,154,175 Конец stripe блока
Сектор: 3,154,048 Запись: Нет записей
Сектор: 3,154,174 Запись: Нет записей
Сектор: 3,154,175 Конец stripe блока
Нет записей означает, что данный блок является блоком четности

Finding_RAID_Parameters_Rec12.png
Кликните по изображению чтобы его увеличить
Пример сектора блока четности

Из вышеприведенной таблицы мы сможем определить следующие параметры:

Порядок дисков:
Первый диск RAID - Disk3.arc
Второй диск RAID - Disk1.arc
Третий диск RAID - Disk2.arc

Смещение: 0
Размер stripe блоков: 128 секторов или 65,536Б (64КБ)
Порядок stripe блоков: (PD означает Четность Данных)

Первый диск RAID Второй диск RAID Третий диск RAID
1 2 PD
3 PD 4
PD 5 6

Теперь мы можем создать такой RAID в R-Studio:
Finding_RAID_Parameters_Rec13.png
Кликните по изображению чтобы его увеличить
Объект RAID 5, созданный в R-Studio

При помощи R-Studio на RAID найден объект с файловой системой (Partition 1)

Дважды щелкнем мышью по данному объекту, чтобы просмотреть его файлы:
Finding_RAID_Parameters_Rec14.png
Кликните по изображению чтобы его увеличить
Структура Папок/Файлов, найденная при помощи R-Studio

Если при помощи R-Studio можно просмотреть структуру папок/файлов, то это хороший знак. Чтобы окончательно убедиться в том, что мы создали RAID с корректными параметрами, следует просмотреть файл. Размер просматриваемого файла должен превышать размер блока * (Число дисков -1). В нашем случае это 128КБ.
Finding_RAID_Parameters_Rec15.png
Кликните по изображению чтобы его увеличить
Просмотр файла Picture 236.jpg

Просмотр файла дал положительный результат - следовательно, мы создали RAID с корректными параметрами.

© Copyright 2000-2016 R-Tools Technology Inc.