» как исправить проблему коллизии подписи диска в windows 10
Как известно, запоминающие устройства являются важной частью компьютерной системы для переноса, сохранения и извлечения файлов данных. И чтобы вы могли различать устройства хранения в вашей компьютерной системе, каждое из устройств хранения помечено уникальным номером, называемым подписью диска для идентификации.
Уникальный идентификатор диска хранится как часть MBR или основной загрузочной записи. Подпись диска используется операционными системами для идентификации и разделения различных устройств хранения данных и жестких дисков в компьютере для доступа к данным.
В наши дни клонирование диска стало обычной практикой при переходе на большие жесткие диски. Диски клонируются, чтобы создать аналогичную копию для совместного использования как исходного диска, так и клонированной копии. Кроме того, для виртуализации физических жестких дисков используется множество инструментов виртуализации для создания виртуального жесткого диска и нескольких клонов виртуальных машин, которые создаются с использованием существующих виртуальных жестких дисков. И поскольку это идентичные копии, есть вероятность, что эти копии могут иметь идентичные подписи дисков. В результате, когда вы одновременно используете оба диска с одинаковыми подписями, вы сталкиваетесь с проблемой конфликта подписей дисков. Такого рода проблемы возникают нечасто, поскольку система Windows на самом деле не позволяет двум дискам работать одновременно, если они имеют одинаковую сигнатуру диска.
Когда вы сталкиваетесь с проблемой столкновения дисков на компьютере с Windows 10, вы можете увидеть следующие сообщения об ошибках:
- Выбор загрузки был неудачным, поскольку требуемое устройство недоступно
- Диск находится в автономном режиме, поскольку имеет конфликт подписи
- Этот диск находится в автономном режиме, поскольку имеет конфликт подписи с другим подключенным диском
Вы можете решить проблему столкновения дисков, изменив сигнатуру диска, чего можно добиться с помощью утилиты diskpart командной строки в Windows PowerShell или командной строке или с помощью утилиты управления дисками Windows.
Чтобы устранить проблему коллизии дисков, вы можете использовать утилиту командной строки под названием diskpart в Windows PowerShell или командную строку для просмотра и изменения подписи или использовать основную загрузочную запись в реестре Windows. Вы также можете использовать утилиту управления дисками Windows для изменения подписи. Просто следуйте приведенным ниже параметрам, чтобы изменить подпись диска в любом случае.
Жесткий диск изнутри: загрузка и таблицы разделов
Навел красоту
по этой статье
:
Какой бы продвинутой ни была операционная система, ее загрузка невозможна без наличия двух секторов на жестком диске, которые содержат код, необходимый для запуска любой операционной системы. Первый сектор называется Master Boot Record (MBR); он всегда располагается по адресу: сектор 1/цилиндр 0/головка1 и является самым первым сектором жесткого диска. Вторым важнейшим сектором является Boot Sector (загрузочный сектор), расположенный в первом секторе каждого тома.
Master Boot Record
Master Boot Record является самой важной структурой диска; этот сектор создается при разбиении диска на разделы. В секторе MBR расположены небольшой код, называемый Master Boot Code, а также сигнатура диска и таблица разделов. В конце сектора MBR располагается двухбайтовая структура, указывающая на конец сектора. Она имеет значение 0x55AA. Сигнатура диска — это уникальное число, расположенное по смещению 0x01B8 и позволяющее операционной системе однозначно определить данный диск.
Код, находящийся в секторе MBR, выполняет следующие действия:
- ищет активный раздел в таблице разделов;
- ищет начальный сектор активного раздела;
- загружает копию загрузочного сектора из активного раздела в память;
- передает управление исполняемому коду из загрузочного сектора.
Если эти функции по какой-то причине не удается завершить, то выдается одно из следующих системных сообщений об ошибке:
- Invalid partition table;
- Error loading operating system;
- Missing operating system.
Отметим, что для гибких дисков не существует понятия MBR. Загрузочным сектором является первый сектор на диске. Также следует помнить, что каждый жесткий диск содержит сектор MBR, но загрузочный код используется только на дисках, имеющих активный первичный раздел.
Таблица разделов
Таблица разделов — это 64-байтовая структура, используемая для определения типа и местоположения разделов на жестком диске. Содержимое данной структуры унифицировано и не зависит от операционной системы. Информация о каждом разделе занимает 16 байт — таким образом, на диске может быть не более четырех разделов.
Информация о каждом разделе начинается с определенного смещения от начала сектора, , как показано в табл. 1.
табл. 1.
На
рис. 1
показано примерное содержимое таблицы разделов для диска с двумя разделами. Информация о несуществующих разделах представлена в виде нулей.
В
табл. 2
показаны значения полей в записи о разделе. Приведенные примерные значения относятся к первому разделу (см.
рис. 1
) . Значения Byte Offset соответствуют первому разделу в таблице разделов.
табл. 2.
После того как мы ознакомились с устройством записи о разделе, более подробно рассмотрим некоторые из полей этой записи.
Поле Boot Indicator
Первый элемент таблицы разделов, поле Boot Indicator, указывает, является ли том активным разделом. Напоминаем, что только первичный раздел диска может быть активным. Имеется возможность установки различных операционных систем и различных файловых систем на различных томах. Используя утилиты типа FDISK (MS-DOS), Disk Management (Windows 2000) или утилиты сторонних производителей, можно активизировать первичный раздел и установить соответствующее значение данного поля.
Поле System ID
Это поле содержит идентификатор системы и указывает, какая файловая система — FAT16, FAT32 или NTFS — использовалась для форматирования тома, а также позволяет узнать некоторые характеристики файловой системы. Кроме того, данное поле показывает, существует ли на диске расширенный раздел (extended partition). Возможные значения поля System ID показаны в табл. 3.
табл. 3.
Отметим, что под управлением MS-DOS доступны только тома с полем System ID, которое равно 0x01, 0x04, 0x05 или 0x06. Но тома с другим System ID этого поля могут быть удалены с помощью утилиты FDISK.
Поля Cylinder, Head и Sector
Поля Starting Cylinder, Ending Cylinder, Starting Head, Ending Head, Starting Sector и Ending Sector (общее название — CHS) являются дополнительными элементами таблицы разделов. Загрузочный код использует значения этих полей для нахождения загрузочного сектора и его активизации. Поля Starting CHS неактивных разделов указывают на загрузочные сектора первичных разделов и на расширенный загрузочный сектор первого логического диска в расширенном разделе.
На рис. 2 показаны Master Boot Record (содержащий код, таблицу разделов и сигнатуру) и загрузочные сектора для диска с четырьмя разделами.
Поле Ending Cylinder в таблице разделов имеет размер 10 бит и позволяет описывать цилиндры с номерами от 0 до 1023. Поля Starting Head и Ending Head имеют размер 1 бит и могут содержать номера головок от 0 до 255. Так как поля Starting Sector и Ending Sector занимают по 6 бит, они могут содержать значения от 0 до 63. Поскольку нумерация секторов начинается с 1 (а не с 0, как для других полей), то максимальное число секторов на дорожке равно 63.
При низкоуровневом форматировании для всех дисков задается стандартный размер сектора 512 байт, поэтому максимальный размер диска, описываемый в таблице разделов, может быть вычислен следующим образом:
Используя максимально допустимые значения этих величин, мы получаем:
Таким образом, без использования расширений INT 13h, известных под названием
Logical Block Addressing
(LBA), размер активного первичного раздела не может превышать 7,8 Гбайт независимо от используемой файловой системы.
Максимальный размер тома под FAT16 зависит от геометрии диска и максимальных значений в таблице разделов. Возможные значения при использовании и отсутствии LBA показаны в табл. 4. Число цилиндров в обоих случаях равно 1024 (0-1023). В том случае, когда первичный раздел или логическое устройство занимает область далее 1023-го цилиндра, все поля таблицы разделов будут иметь максимально допустимые значения.
табл. 4.
Чтобы обойти описанное выше ограничение в 7,8 Гбайт, в Windows 2000 игнорируются значения полей Starting Sector и Ending Sector — вместо этого используются значения полей Relative Sectors и Total Sectors.
Поля Relative Sectors и Total Sectors
Поле Relative Sectors содержит смещение от начала диска до начала тома, выраженное в числе секторов. Поле Total Sectors указывает общее число секторов в томе.
Используя значения двух этих полей (которые вместе являются 32-битовым числом), мы получаем дополнительные 8 бит для хранения общего числа секторов по сравнению с описанной выше схемой CHS. В этом случае число секторов может быть представлено как 232. При использовании стандартного размера сектора (512 байт) и 32-битового представления числа секторов максимальный объем раздела ограничивается числом 2 Тбайт (или 2 199 023 255 552 байт). Такая схема используется только в Windows 2000 с файловыми системами NTFS и FAT32.
Отметим, что при создании разделов под управлением Windows 2000 корректные данные заносятся и в поля Starting Cylinder, Ending Cylinder, Starting Head, Ending Head, Starting Sector и Ending Sector. Это позволяет обеспечить совместимость с MS-DOS, Windows 95 и Windows 98, а также с функциями INT 13h, используемыми BIOS при загрузке компьютера.
Расширенная загрузочная запись
Расширенная загрузочная запись (Extended Boot Record, EBR) состоит из расширенной таблицы разделов и сигнатуры — двухбайтовой структуры, имеющей значение 0x55AA. Расширенная загрузочная запись существует для каждого логического устройства в расширенном разделе. Она содержит информацию о первой стороне первого цилиндра для каждого логического устройства. Загрузочный сектор логического диска обычно располагается в относительных секторах с номером 32 либо 63. Если на диске нет расширенного раздела, то нет расширенной загрузочной записи и нет логических устройств.
Первый элемент расширенной таблицы разделов для первого логического устройства указывает на его загрузочный сектор, второй элемент — на EBR следующего логического устройства. Если следующего логического устройства не существует, то и второй элемент не используется — он содержит набор нулей. Третий и четвертый элементы расширенной таблицы разделов не используются.
На рис. 3 показано, как устроена расширенная загрузочная запись. Показаны три логических устройства в расширенном разделе.
За исключением последнего логического устройства в расширенном разделе (см.
рис. 3
), формат расширенной таблицы разделов, описанный в
табл. 5
, повторяется для каждого логического устройства: первый элемент описывает загрузочный сектор логического устройства, второй элемент указывает на следующую расширенную загрузочную запись. Для последнего логического устройства элементы со второго по четвертый не используются.
табл. 5.
Поля каждого элемента в расширенной таблице разделов аналогичны полям обычной таблицы разделов, описанной выше.
Поле Relative Sectors в расширенной таблице разделов указывает в байтах смещение от начала расширенного раздела до первого сектора логического устройства. Число в поле Total Sectors позволяет узнать число секторов, отведенных под логическое устройство. Значение поля Total Sectors равно числу секторов от начала загрузочного сектора до конца логического раздела.
Ввиду исключительной важности информации, хранимой в секторах MBR и EBR, рекомендуется периодически проверять диск с помощью соответствующих утилит и создавать резервные копии данных.
Boot Sector
Загрузочный сектор, расположенный в секторе 1 каждого тома, является структурой, обеспечивающей запуск компьютера. В этом секторе содержатся исполняемый код и данные, которые требует этот код, включая информацию о файловой системе, используемой на данном томе. Загрузочный сектор создается при форматировании тома. В конце загрузочного сектора размещается двухбайтовая структура, называемая маркером конца сектора. Эта структура всегда содержит значение 0x55AA.
На компьютерах, работающих под управлением Windows 2000, загрузочный сектор активного раздела загружается в память и вызывает загрузчик операционной системы — NTLDR, который выполняет все необходимые действия по загрузке Windows 2000.
В Windows 2000 загрузочный сектор содержит следующие элементы:
Отметим, что загрузочные сектора для NTFS, FAT16 и FAT32 отформатированы иным образом.
Структура BPB содержит физические параметры тома, расширенная структура BPB начинается сразу же после стандартной BPB. Длина структуры BPB и содержащаяся в ней информация зависят от типа загрузочного сектора — NTFS, FAT16 или FAT32.
Информация, хранимая в BPB и расширенной структуре BPB, используется драйверами устройств для чтения и конфигурации томов.
Сразу же за расширенной структурой BPB следует загрузочный код.
Процесс загрузки
Процесс загрузки компьютера состоит из следующих основных шагов:
- При включении питания выполняется проверочный тест BIOS и процессора — POST.
- BIOS ищет загрузочное устройство (обычно это диск).
- BIOS загружает первый физический сектор с загрузочного диска в память и передает управление по тому адресу, куда загружен этот сектор.
Если загрузочным устройством является жесткий диск, то BIOS загружает MBR. Располагаемый в MBR код загружает загрузочный сектор активного раздела и передает управление по тому адресу, куда загружен этот сектор. На компьютерах с Windows 2000 исполняемый код в загрузочном секторе находит файл NTLDR, загружает его в память и передает ему управление.
Если в дисководе A находится диск, то BIOS загружает первый сектор (загрузочный сектор) этого диска в память. Если диск является загрузочным (содержит базовые файлы операционной системы), загрузочный сектор загружается в память и использует код для передачи управления файлу IO.SYS — базовому файлу операционной системы MS-DOS. Если диск не является загрузочным, исполняемый код в загрузочном секторе выдает следующее сообщение:
- Non-System disk or disk error
- Replace and press any key when ready
Начальный процесс загрузки не зависит от формата диска и от операционной системы. Уникальные характеристики операционной и файловой систем используются уже после того, как начинается выполнение кода из загрузочного сектора.
Виды загрузочных секторов
Как мы уже знаем, MBR передает управление загрузочному сектору. Поэтому первые три байта данного сектора должны содержать допустимую инструкцию для центрального процессора. Этой инструкцией является инструкция перехода, перенаправляющая выполнение кода. За инструкцией JMP следует 8-байтовый идентификатор производителя (OEM ID) — строка, описывающая название и номер версии операционной системы, использовавшейся для форматирования тома.
Для сохранения совместимости с MS-DOS Windows 2000 записывает идентификатор «MSDOS5.0» для файловых систем FAT16 и FAT32. Для файловой системы NTFS идентификатор содержит символы «NTFS».
Windows 95 использует идентификатор «MSWIN4.0», а Windows 95 OSR2 и Windows 98 — идентификатор «MSWIN4.1».
Сразу же за идентификатором производителя следует структура данных, называемая BIOS Parameter Block (BPB). В ней содержится информация, необходимая для обнаружения файла NTLDR. Поскольку BPB обычно располагается по одному и тому же смещению, то стандартные параметры легко обнаруживаются. Так как инструкция JMP обходит структуру BPB, ее размер может быть увеличен в будущем, если здесь потребуется хранить какую-либо дополнительную информацию.
Теперь давайте рассмотрим, как выглядят загрузочные сектора для трех основных файловых систем — FAT16, FAT32 и NTFS.
Загрузочный сектор FAT16
В табл. 6 приведено описание загрузочного сектора для файловой системы FAT16.
табл. 6.
На конкретном примере показано содержимое загрузочного сектора FAT16. Здесь можно выделить три секции:
- байты 0x00-0x0A содержат инструкцию JMP и OEM ID (выделены шрифтом);
- байты 0x0B-0x3D содержат BPB и расширенный BPB;
- остальные байты содержат код загрузки и маркер конца сектора (выделены шрифтом).
В двух следующих таблицах показано содержимое BPB (табл. 7) и расширенного BPB (табл. 8) для FAT16. Приведенные значения соответствуют загрузочному сектору, показанному на рис. 4.
Смещение
|
Длина
|
Значение
|
Описание
0x0B| 2 байт| 0x0002| Число байт в секторе — размер сектора. Допустимы следующие значения: 512, 1024, 2048 и 4096. Для большинства дисков значение этого поля равно 512
0x0D| 1 байт| 0x40| Число секторов в кластере. Так как FAT16 поддерживает ограниченное число кластеров (до 65 536), тома большего объема требуют использования большего числа секторов в кластере. Значение этого поля по умолчанию зависит от размера тома. Допустимы следующие значения: 1, 2, 4, 8, 16, 32, 64 и 128. Значения, приводящие к увеличению размера кластера более 32 Кбайт (количество байт в секторе, умноженное на число секторов в кластере), могут служить источником ошибок
0x0E| 2 байт| 0x0100| Зарезервированные сектора — число секторов перед первой таблицей FAT, включая загрузочный сектор. Значение этого поля всегда равно 1
0x10| 1 байт| 0x02| Число копий таблиц FAT для данного тома. Значение этого поля всегда равно 2
0x11| 2 байт| 0x0002| Общее число 32-байтовых имен файлов и каталогов, которые могут храниться в корневом каталоге тома. Обычно значение этого поля равно 512. Один элемент всегда используется для хранения метки тома, поэтому максимальное число файлов и каталогов не превосходит 511
0x13| 2 байт| 0x0000| Число секторов в томе, выраженное 16-битовым значением. Для томов, имеющих более 65 536 секторов, это поле не используется и его значение равно 0
0x15| 1 байт| 0xF8| Тип носителя. Значение 0xF8 указывает на жесткий диск, 0xF0 — на флоппи-диск высокой плотности. Данное поле не используется в Windows 2000
0x16| 2 байт| 0xFC00| Число секторов в каждой копии FAT. Значение этого поля, число копий FAT и число зарезервированных секторов используются для вычисления местонахождения корневого каталога. Зная максимальное число элементов корневого каталога, можно также узнать, где начинаются пользовательские данные
0x18| 2 байт| 0x3F00| Число секторов в дорожке. Используется для низкоуровневого форматирования дисков
0x1A| 2 байт| 0x4000| Число головок. Используется для низкоуровневого форматирования дисков
0x1C| 4 байт| 0x3F000000| Число “скрытых” секторов — число секторов перед загрузочным сектором. Используется во время загрузки для вычисления абсолютного смещения корневого каталога и данных
0x20| 4 байт| 0x01F03E00| Число секторов в томе, выраженное 32-битовым значением. Используется для томов, имеющих более 65 536 секторов
табл. 7.
табл. 8.
Загрузочный сектор FAT32
Загрузочный сектор FAT32 имеет много общего с загрузочным сектором FAT16, но BPB содержит дополнительные поля, а те поля, которые используются в FAT16, находятся по другим адресам. Таким образом, диски, отформатированные под FAT32, не могут быть прочитаны операционными системами, несовместимыми с FAT32.
В табл. 9 показано содержимое загрузочного сектора для файловой системы FAT32.
табл. 9.
Здесь можно выделить три секции:
- байты 0x00-0x0A содержат инструкцию JMP и OEM ID (выделены шрифтом);
- байты 0x0B-0x59 содержат BPB и расширенный BPB;
- остальные байты содержат код загрузки и маркер конца сектора (выделены шрифтом).
Далее показано содержимое (табл. 10) BPB и расширенного BPB (табл. 11) для FAT32. Приведенные значения соответствуют загрузочному сектору, показанному на рис. 5.
Смещение
|
Длина
|
Значение
|
Описание
0x0B| 2 байт| 0x0002| Число байт в секторе — размер сектора. Допустимы следующие значения: 512, 1024, 2048 и 4096. Для большинства дисков значение этого поля равно 512
0x0D| 1 байт| 0x40| Число секторов в кластере. Так как FAT32 поддерживает ограниченное число кластеров (до 4 294 967 296), тома очень большого объема требуют использования большего числа секторов в кластере. Значение этого поля по умолчанию зависит от размера тома. Допустимы следующие значения: 1, 2, 4, 8, 16, 32, 64 и 128. В Windows 2000 для FAT32 поддерживаются тома максимальным объемом до 32 Гбайт. Тома большего объема, созданные с помощью Windows 95 OSR2 и Windows 98, доступны из Windows 2000
0x0E| 2 байта| 0x0200| Зарезервированные сектора — число секторов перед первой таблицей FAT, включая загрузочный сектор. Значение этого поля для FAT32 обычно равно 32
0x10| 1 байт| 0x02| Число копий таблиц FAT для данного тома. Значение этого поля всегда равно 2
0x11| 2 байт| 0x0000| Общее число 32-байтовых имен файлов и каталогов, которые могут храниться в корневом каталоге тома (только для FAT12/FAT16). Для томов FAT32 значение этого поля должно быть равно 0
0x13| 2 байт| 0x0000| Число секторов в томе, выраженное 16-битовым значением (только для FAT12/FAT16). Для томов FAT32 значение этого поля должно быть равно 0
0x15| 1 байт| 0xF8| Тип носителя. Значение 0xF8 указывает на жесткий диск, 0xF0 — на флоппи-диск высокой плотности. Данное поле не используется в Windows 2000
0x16| 2 байт| 0x0000| Число секторов в каждой копии FAT (только для FAT12/FAT16). Для томов FAT32 значение этого поля должно быть равно 0
0x18| 2 байт| 0x3F00| Число секторов в дорожке. Используется для низкоуровневого форматирования дисков
0x1A| 2 байт| 0xFF00| Число головок. Используется для низкоуровневого форматирования дисков
0x1C| 4 байт| 0xEE39D700| Число «скрытых» секторов — число секторов перед загрузочным сектором. Используется во время загрузки для вычисления абсолютного смещения корневого каталога и данных
0x20| 4 байт| 0x7F324E00| Число секторов в томе, выраженное 32-битовым значением. Используется для томов, имеющих более 65 536 секторов
0x24| 4 байт| 0x83130000| Число секторов в FAT (только для FAT32)
0x28| 2 байт| 0x0000| Расширенные флаги (только для FAT32). Отдельные биты этого слова имеют следующее назначение: биты 0-3 — число активных FAT; биты 4-6 — зарезервированы; бит 7 — равен 0, если выполняется «зеркалирование» FAT; равен 1, если активна только одна FAT; биты 8-15 — зарезервированы
0x2A| 2 байт| 0x0000| Версия файловой системы (только для FAT32)
0x2C| 4 байт| 0x02000000| Номер кластера для первого кластера корневого каталога (только для FAT32). Обычно значение этого поля равно 2
0x34| 2 байт| 0x0600| Номер сектора с резервной копией загрузочного сектора (только для FAT32). Обычно значение этого поля равно 6
0x36| 12 байт| 0x000000000000000000000000| Зарезервировано (только для FAT32)
табл. 10.
табл. 11.
Загрузочный сектор NTFS
Загрузочный код NTFS занимает более 426 байт, поэтому при форматировании NTFS-тома первые 16 секторов отводятся под загрузочный сектор и код загрузки. В табл. 12 показано содержимое загрузочного сектора для файловой системы NTFS.
табл. 12.
Для томов NTFS поля, следующие за BPB, представляют собой расширенный блок BPB. Содержащиеся здесь данные помогают NTLDR найти во время загрузки таблицу MFT. В отличие от FAT16 и FAT32 MFT не располагается в каком-то фиксированном месте — ее местоположение может изменяться, например при обнаружении дефектных секторов. Если MFT не может быть найдена, Windows 2000 предполагает, что диск неотформатирован.
На рис. 6 показан загрузочный сектор тома NTFS, созданного средствами Windows 2000.
Здесь можно выделить три секции:
- байты 0x00-0x0A содержат инструкцию JMP и OEM ID (выделены шрифтом);
- байты 0x0B-0x53 содержат BPB и расширенный BPB;
- остальные байты содержат код загрузки и маркер конца сектора (выделены шрифтом).
В
табл. 13
представлены поля BPB и расширенного BPB для томов NTFS. Поля со смещениями 0x0B, 0x0D, 0x15, 0x18, 0x1A и 0x1C идентичны полям для томов FAT16 и FAT32. Приведенные значения соответствуют загрузочному сектору, показанному на
рис. 6
.
табл. 13.
§
Навел красоту
по этой статье
:
Какой бы продвинутой ни была операционная система, ее загрузка невозможна без наличия двух секторов на жестком диске, которые содержат код, необходимый для запуска любой операционной системы. Первый сектор называется Master Boot Record (MBR); он всегда располагается по адресу: сектор 1/цилиндр 0/головка1 и является самым первым сектором жесткого диска. Вторым важнейшим сектором является Boot Sector (загрузочный сектор), расположенный в первом секторе каждого тома.
Master Boot Record
Master Boot Record является самой важной структурой диска; этот сектор создается при разбиении диска на разделы. В секторе MBR расположены небольшой код, называемый Master Boot Code, а также сигнатура диска и таблица разделов. В конце сектора MBR располагается двухбайтовая структура, указывающая на конец сектора. Она имеет значение 0x55AA. Сигнатура диска — это уникальное число, расположенное по смещению 0x01B8 и позволяющее операционной системе однозначно определить данный диск.
Код, находящийся в секторе MBR, выполняет следующие действия:
- ищет активный раздел в таблице разделов;
- ищет начальный сектор активного раздела;
- загружает копию загрузочного сектора из активного раздела в память;
- передает управление исполняемому коду из загрузочного сектора.
Если эти функции по какой-то причине не удается завершить, то выдается одно из следующих системных сообщений об ошибке:
- Invalid partition table;
- Error loading operating system;
- Missing operating system.
Отметим, что для гибких дисков не существует понятия MBR. Загрузочным сектором является первый сектор на диске. Также следует помнить, что каждый жесткий диск содержит сектор MBR, но загрузочный код используется только на дисках, имеющих активный первичный раздел.
Таблица разделов
Таблица разделов — это 64-байтовая структура, используемая для определения типа и местоположения разделов на жестком диске. Содержимое данной структуры унифицировано и не зависит от операционной системы. Информация о каждом разделе занимает 16 байт — таким образом, на диске может быть не более четырех разделов.
Информация о каждом разделе начинается с определенного смещения от начала сектора, , как показано в табл. 1.
табл. 1.
На
рис. 1
показано примерное содержимое таблицы разделов для диска с двумя разделами. Информация о несуществующих разделах представлена в виде нулей.
В
табл. 2
показаны значения полей в записи о разделе. Приведенные примерные значения относятся к первому разделу (см.
рис. 1
) . Значения Byte Offset соответствуют первому разделу в таблице разделов.
табл. 2.
После того как мы ознакомились с устройством записи о разделе, более подробно рассмотрим некоторые из полей этой записи.
Поле Boot Indicator
Первый элемент таблицы разделов, поле Boot Indicator, указывает, является ли том активным разделом. Напоминаем, что только первичный раздел диска может быть активным. Имеется возможность установки различных операционных систем и различных файловых систем на различных томах. Используя утилиты типа FDISK (MS-DOS), Disk Management (Windows 2000) или утилиты сторонних производителей, можно активизировать первичный раздел и установить соответствующее значение данного поля.
Поле System ID
Это поле содержит идентификатор системы и указывает, какая файловая система — FAT16, FAT32 или NTFS — использовалась для форматирования тома, а также позволяет узнать некоторые характеристики файловой системы. Кроме того, данное поле показывает, существует ли на диске расширенный раздел (extended partition). Возможные значения поля System ID показаны в табл. 3.
табл. 3.
Отметим, что под управлением MS-DOS доступны только тома с полем System ID, которое равно 0x01, 0x04, 0x05 или 0x06. Но тома с другим System ID этого поля могут быть удалены с помощью утилиты FDISK.
Поля Cylinder, Head и Sector
Поля Starting Cylinder, Ending Cylinder, Starting Head, Ending Head, Starting Sector и Ending Sector (общее название — CHS) являются дополнительными элементами таблицы разделов. Загрузочный код использует значения этих полей для нахождения загрузочного сектора и его активизации. Поля Starting CHS неактивных разделов указывают на загрузочные сектора первичных разделов и на расширенный загрузочный сектор первого логического диска в расширенном разделе.
На рис. 2 показаны Master Boot Record (содержащий код, таблицу разделов и сигнатуру) и загрузочные сектора для диска с четырьмя разделами.
Поле Ending Cylinder в таблице разделов имеет размер 10 бит и позволяет описывать цилиндры с номерами от 0 до 1023. Поля Starting Head и Ending Head имеют размер 1 бит и могут содержать номера головок от 0 до 255. Так как поля Starting Sector и Ending Sector занимают по 6 бит, они могут содержать значения от 0 до 63. Поскольку нумерация секторов начинается с 1 (а не с 0, как для других полей), то максимальное число секторов на дорожке равно 63.
При низкоуровневом форматировании для всех дисков задается стандартный размер сектора 512 байт, поэтому максимальный размер диска, описываемый в таблице разделов, может быть вычислен следующим образом:
Используя максимально допустимые значения этих величин, мы получаем:
Таким образом, без использования расширений INT 13h, известных под названием
Logical Block Addressing
(LBA), размер активного первичного раздела не может превышать 7,8 Гбайт независимо от используемой файловой системы.
Максимальный размер тома под FAT16 зависит от геометрии диска и максимальных значений в таблице разделов. Возможные значения при использовании и отсутствии LBA показаны в табл. 4. Число цилиндров в обоих случаях равно 1024 (0-1023). В том случае, когда первичный раздел или логическое устройство занимает область далее 1023-го цилиндра, все поля таблицы разделов будут иметь максимально допустимые значения.
табл. 4.
Чтобы обойти описанное выше ограничение в 7,8 Гбайт, в Windows 2000 игнорируются значения полей Starting Sector и Ending Sector — вместо этого используются значения полей Relative Sectors и Total Sectors.
Поля Relative Sectors и Total Sectors
Поле Relative Sectors содержит смещение от начала диска до начала тома, выраженное в числе секторов. Поле Total Sectors указывает общее число секторов в томе.
Используя значения двух этих полей (которые вместе являются 32-битовым числом), мы получаем дополнительные 8 бит для хранения общего числа секторов по сравнению с описанной выше схемой CHS. В этом случае число секторов может быть представлено как 232. При использовании стандартного размера сектора (512 байт) и 32-битового представления числа секторов максимальный объем раздела ограничивается числом 2 Тбайт (или 2 199 023 255 552 байт). Такая схема используется только в Windows 2000 с файловыми системами NTFS и FAT32.
Отметим, что при создании разделов под управлением Windows 2000 корректные данные заносятся и в поля Starting Cylinder, Ending Cylinder, Starting Head, Ending Head, Starting Sector и Ending Sector. Это позволяет обеспечить совместимость с MS-DOS, Windows 95 и Windows 98, а также с функциями INT 13h, используемыми BIOS при загрузке компьютера.
Расширенная загрузочная запись
Расширенная загрузочная запись (Extended Boot Record, EBR) состоит из расширенной таблицы разделов и сигнатуры — двухбайтовой структуры, имеющей значение 0x55AA. Расширенная загрузочная запись существует для каждого логического устройства в расширенном разделе. Она содержит информацию о первой стороне первого цилиндра для каждого логического устройства. Загрузочный сектор логического диска обычно располагается в относительных секторах с номером 32 либо 63. Если на диске нет расширенного раздела, то нет расширенной загрузочной записи и нет логических устройств.
Первый элемент расширенной таблицы разделов для первого логического устройства указывает на его загрузочный сектор, второй элемент — на EBR следующего логического устройства. Если следующего логического устройства не существует, то и второй элемент не используется — он содержит набор нулей. Третий и четвертый элементы расширенной таблицы разделов не используются.
На рис. 3 показано, как устроена расширенная загрузочная запись. Показаны три логических устройства в расширенном разделе.
За исключением последнего логического устройства в расширенном разделе (см.
рис. 3
), формат расширенной таблицы разделов, описанный в
табл. 5
, повторяется для каждого логического устройства: первый элемент описывает загрузочный сектор логического устройства, второй элемент указывает на следующую расширенную загрузочную запись. Для последнего логического устройства элементы со второго по четвертый не используются.
табл. 5.
Поля каждого элемента в расширенной таблице разделов аналогичны полям обычной таблицы разделов, описанной выше.
Поле Relative Sectors в расширенной таблице разделов указывает в байтах смещение от начала расширенного раздела до первого сектора логического устройства. Число в поле Total Sectors позволяет узнать число секторов, отведенных под логическое устройство. Значение поля Total Sectors равно числу секторов от начала загрузочного сектора до конца логического раздела.
Ввиду исключительной важности информации, хранимой в секторах MBR и EBR, рекомендуется периодически проверять диск с помощью соответствующих утилит и создавать резервные копии данных.
Boot Sector
Загрузочный сектор, расположенный в секторе 1 каждого тома, является структурой, обеспечивающей запуск компьютера. В этом секторе содержатся исполняемый код и данные, которые требует этот код, включая информацию о файловой системе, используемой на данном томе. Загрузочный сектор создается при форматировании тома. В конце загрузочного сектора размещается двухбайтовая структура, называемая маркером конца сектора. Эта структура всегда содержит значение 0x55AA.
На компьютерах, работающих под управлением Windows 2000, загрузочный сектор активного раздела загружается в память и вызывает загрузчик операционной системы — NTLDR, который выполняет все необходимые действия по загрузке Windows 2000.
В Windows 2000 загрузочный сектор содержит следующие элементы:
Отметим, что загрузочные сектора для NTFS, FAT16 и FAT32 отформатированы иным образом.
Структура BPB содержит физические параметры тома, расширенная структура BPB начинается сразу же после стандартной BPB. Длина структуры BPB и содержащаяся в ней информация зависят от типа загрузочного сектора — NTFS, FAT16 или FAT32.
Информация, хранимая в BPB и расширенной структуре BPB, используется драйверами устройств для чтения и конфигурации томов.
Сразу же за расширенной структурой BPB следует загрузочный код.
Процесс загрузки
Процесс загрузки компьютера состоит из следующих основных шагов:
- При включении питания выполняется проверочный тест BIOS и процессора — POST.
- BIOS ищет загрузочное устройство (обычно это диск).
- BIOS загружает первый физический сектор с загрузочного диска в память и передает управление по тому адресу, куда загружен этот сектор.
Если загрузочным устройством является жесткий диск, то BIOS загружает MBR. Располагаемый в MBR код загружает загрузочный сектор активного раздела и передает управление по тому адресу, куда загружен этот сектор. На компьютерах с Windows 2000 исполняемый код в загрузочном секторе находит файл NTLDR, загружает его в память и передает ему управление.
Если в дисководе A находится диск, то BIOS загружает первый сектор (загрузочный сектор) этого диска в память. Если диск является загрузочным (содержит базовые файлы операционной системы), загрузочный сектор загружается в память и использует код для передачи управления файлу IO.SYS — базовому файлу операционной системы MS-DOS. Если диск не является загрузочным, исполняемый код в загрузочном секторе выдает следующее сообщение:
- Non-System disk or disk error
- Replace and press any key when ready
Начальный процесс загрузки не зависит от формата диска и от операционной системы. Уникальные характеристики операционной и файловой систем используются уже после того, как начинается выполнение кода из загрузочного сектора.
Виды загрузочных секторов
Как мы уже знаем, MBR передает управление загрузочному сектору. Поэтому первые три байта данного сектора должны содержать допустимую инструкцию для центрального процессора. Этой инструкцией является инструкция перехода, перенаправляющая выполнение кода. За инструкцией JMP следует 8-байтовый идентификатор производителя (OEM ID) — строка, описывающая название и номер версии операционной системы, использовавшейся для форматирования тома.
Для сохранения совместимости с MS-DOS Windows 2000 записывает идентификатор «MSDOS5.0» для файловых систем FAT16 и FAT32. Для файловой системы NTFS идентификатор содержит символы «NTFS».
Windows 95 использует идентификатор «MSWIN4.0», а Windows 95 OSR2 и Windows 98 — идентификатор «MSWIN4.1».
Сразу же за идентификатором производителя следует структура данных, называемая BIOS Parameter Block (BPB). В ней содержится информация, необходимая для обнаружения файла NTLDR. Поскольку BPB обычно располагается по одному и тому же смещению, то стандартные параметры легко обнаруживаются. Так как инструкция JMP обходит структуру BPB, ее размер может быть увеличен в будущем, если здесь потребуется хранить какую-либо дополнительную информацию.
Теперь давайте рассмотрим, как выглядят загрузочные сектора для трех основных файловых систем — FAT16, FAT32 и NTFS.
Загрузочный сектор FAT16
В табл. 6 приведено описание загрузочного сектора для файловой системы FAT16.
табл. 6.
На конкретном примере показано содержимое загрузочного сектора FAT16. Здесь можно выделить три секции:
- байты 0x00-0x0A содержат инструкцию JMP и OEM ID (выделены шрифтом);
- байты 0x0B-0x3D содержат BPB и расширенный BPB;
- остальные байты содержат код загрузки и маркер конца сектора (выделены шрифтом).
В двух следующих таблицах показано содержимое BPB (табл. 7) и расширенного BPB (табл. 8) для FAT16. Приведенные значения соответствуют загрузочному сектору, показанному на рис. 4.
Смещение
|
Длина
|
Значение
|
Описание
0x0B| 2 байт| 0x0002| Число байт в секторе — размер сектора. Допустимы следующие значения: 512, 1024, 2048 и 4096. Для большинства дисков значение этого поля равно 512
0x0D| 1 байт| 0x40| Число секторов в кластере. Так как FAT16 поддерживает ограниченное число кластеров (до 65 536), тома большего объема требуют использования большего числа секторов в кластере. Значение этого поля по умолчанию зависит от размера тома. Допустимы следующие значения: 1, 2, 4, 8, 16, 32, 64 и 128. Значения, приводящие к увеличению размера кластера более 32 Кбайт (количество байт в секторе, умноженное на число секторов в кластере), могут служить источником ошибок
0x0E| 2 байт| 0x0100| Зарезервированные сектора — число секторов перед первой таблицей FAT, включая загрузочный сектор. Значение этого поля всегда равно 1
0x10| 1 байт| 0x02| Число копий таблиц FAT для данного тома. Значение этого поля всегда равно 2
0x11| 2 байт| 0x0002| Общее число 32-байтовых имен файлов и каталогов, которые могут храниться в корневом каталоге тома. Обычно значение этого поля равно 512. Один элемент всегда используется для хранения метки тома, поэтому максимальное число файлов и каталогов не превосходит 511
0x13| 2 байт| 0x0000| Число секторов в томе, выраженное 16-битовым значением. Для томов, имеющих более 65 536 секторов, это поле не используется и его значение равно 0
0x15| 1 байт| 0xF8| Тип носителя. Значение 0xF8 указывает на жесткий диск, 0xF0 — на флоппи-диск высокой плотности. Данное поле не используется в Windows 2000
0x16| 2 байт| 0xFC00| Число секторов в каждой копии FAT. Значение этого поля, число копий FAT и число зарезервированных секторов используются для вычисления местонахождения корневого каталога. Зная максимальное число элементов корневого каталога, можно также узнать, где начинаются пользовательские данные
0x18| 2 байт| 0x3F00| Число секторов в дорожке. Используется для низкоуровневого форматирования дисков
0x1A| 2 байт| 0x4000| Число головок. Используется для низкоуровневого форматирования дисков
0x1C| 4 байт| 0x3F000000| Число “скрытых” секторов — число секторов перед загрузочным сектором. Используется во время загрузки для вычисления абсолютного смещения корневого каталога и данных
0x20| 4 байт| 0x01F03E00| Число секторов в томе, выраженное 32-битовым значением. Используется для томов, имеющих более 65 536 секторов
табл. 7.
табл. 8.
Загрузочный сектор FAT32
Загрузочный сектор FAT32 имеет много общего с загрузочным сектором FAT16, но BPB содержит дополнительные поля, а те поля, которые используются в FAT16, находятся по другим адресам. Таким образом, диски, отформатированные под FAT32, не могут быть прочитаны операционными системами, несовместимыми с FAT32.
В табл. 9 показано содержимое загрузочного сектора для файловой системы FAT32.
табл. 9.
Здесь можно выделить три секции:
- байты 0x00-0x0A содержат инструкцию JMP и OEM ID (выделены шрифтом);
- байты 0x0B-0x59 содержат BPB и расширенный BPB;
- остальные байты содержат код загрузки и маркер конца сектора (выделены шрифтом).
Далее показано содержимое (табл. 10) BPB и расширенного BPB (табл. 11) для FAT32. Приведенные значения соответствуют загрузочному сектору, показанному на рис. 5.
Смещение
|
Длина
|
Значение
|
Описание
0x0B| 2 байт| 0x0002| Число байт в секторе — размер сектора. Допустимы следующие значения: 512, 1024, 2048 и 4096. Для большинства дисков значение этого поля равно 512
0x0D| 1 байт| 0x40| Число секторов в кластере. Так как FAT32 поддерживает ограниченное число кластеров (до 4 294 967 296), тома очень большого объема требуют использования большего числа секторов в кластере. Значение этого поля по умолчанию зависит от размера тома. Допустимы следующие значения: 1, 2, 4, 8, 16, 32, 64 и 128. В Windows 2000 для FAT32 поддерживаются тома максимальным объемом до 32 Гбайт. Тома большего объема, созданные с помощью Windows 95 OSR2 и Windows 98, доступны из Windows 2000
0x0E| 2 байта| 0x0200| Зарезервированные сектора — число секторов перед первой таблицей FAT, включая загрузочный сектор. Значение этого поля для FAT32 обычно равно 32
0x10| 1 байт| 0x02| Число копий таблиц FAT для данного тома. Значение этого поля всегда равно 2
0x11| 2 байт| 0x0000| Общее число 32-байтовых имен файлов и каталогов, которые могут храниться в корневом каталоге тома (только для FAT12/FAT16). Для томов FAT32 значение этого поля должно быть равно 0
0x13| 2 байт| 0x0000| Число секторов в томе, выраженное 16-битовым значением (только для FAT12/FAT16). Для томов FAT32 значение этого поля должно быть равно 0
0x15| 1 байт| 0xF8| Тип носителя. Значение 0xF8 указывает на жесткий диск, 0xF0 — на флоппи-диск высокой плотности. Данное поле не используется в Windows 2000
0x16| 2 байт| 0x0000| Число секторов в каждой копии FAT (только для FAT12/FAT16). Для томов FAT32 значение этого поля должно быть равно 0
0x18| 2 байт| 0x3F00| Число секторов в дорожке. Используется для низкоуровневого форматирования дисков
0x1A| 2 байт| 0xFF00| Число головок. Используется для низкоуровневого форматирования дисков
0x1C| 4 байт| 0xEE39D700| Число «скрытых» секторов — число секторов перед загрузочным сектором. Используется во время загрузки для вычисления абсолютного смещения корневого каталога и данных
0x20| 4 байт| 0x7F324E00| Число секторов в томе, выраженное 32-битовым значением. Используется для томов, имеющих более 65 536 секторов
0x24| 4 байт| 0x83130000| Число секторов в FAT (только для FAT32)
0x28| 2 байт| 0x0000| Расширенные флаги (только для FAT32). Отдельные биты этого слова имеют следующее назначение: биты 0-3 — число активных FAT; биты 4-6 — зарезервированы; бит 7 — равен 0, если выполняется «зеркалирование» FAT; равен 1, если активна только одна FAT; биты 8-15 — зарезервированы
0x2A| 2 байт| 0x0000| Версия файловой системы (только для FAT32)
0x2C| 4 байт| 0x02000000| Номер кластера для первого кластера корневого каталога (только для FAT32). Обычно значение этого поля равно 2
0x34| 2 байт| 0x0600| Номер сектора с резервной копией загрузочного сектора (только для FAT32). Обычно значение этого поля равно 6
0x36| 12 байт| 0x000000000000000000000000| Зарезервировано (только для FAT32)
табл. 10.
табл. 11.
Загрузочный сектор NTFS
Загрузочный код NTFS занимает более 426 байт, поэтому при форматировании NTFS-тома первые 16 секторов отводятся под загрузочный сектор и код загрузки. В табл. 12 показано содержимое загрузочного сектора для файловой системы NTFS.
табл. 12.
Для томов NTFS поля, следующие за BPB, представляют собой расширенный блок BPB. Содержащиеся здесь данные помогают NTLDR найти во время загрузки таблицу MFT. В отличие от FAT16 и FAT32 MFT не располагается в каком-то фиксированном месте — ее местоположение может изменяться, например при обнаружении дефектных секторов. Если MFT не может быть найдена, Windows 2000 предполагает, что диск неотформатирован.
На рис. 6 показан загрузочный сектор тома NTFS, созданного средствами Windows 2000.
Здесь можно выделить три секции:
- байты 0x00-0x0A содержат инструкцию JMP и OEM ID (выделены шрифтом);
- байты 0x0B-0x53 содержат BPB и расширенный BPB;
- остальные байты содержат код загрузки и маркер конца сектора (выделены шрифтом).
В
табл. 13
представлены поля BPB и расширенного BPB для томов NTFS. Поля со смещениями 0x0B, 0x0D, 0x15, 0x18, 0x1A и 0x1C идентичны полям для томов FAT16 и FAT32. Приведенные значения соответствуют загрузочному сектору, показанному на
рис. 6
.
табл. 13.
Как восстанавливают файлы по сигнатурам
Рассмотрим алгоритм восстановления данных на примере все того же формата jpeg – он наиболее удобен для понимания. Для примера смоделируем ситуацию случайного форматирования флэшки. Для начала я заполнил все сектора нашей подопытной флэшки нулями, чтобы гарантировать, что на ней не останется никаких данных от предыдущих файловых систем.
Я сделал это “для чистоты эксперимента”, в реальной жизни все несколько сложнее, но об этом позже. Теперь все сектора флэшки содержат только нули, то есть на ней нет совсем никакой информации, включая файловую систему и даже таблица разделов отсутствует. Такая флэшка, если вставить ее в USB разъем компьютера, то операционная система предложит ее отформатировать:

А если открыть ее в оснастке “Управление дисками”, то мы увидим, что на ней нет файловой системы:

Компьютер воспринимает ее файловую систему как RAW, то есть “сырые данные”, а проще говоря, – их отсутствие в нашем случае.
Теперь отформатируем флэшку в файловую систему NTFS и запишем на нее файлы jpeg:

Я создал на флэше одну папку с именем “Осень 2020” и записал в нее 129 файлов jpeg в среднем качестве: каждый файл занимает приблизительно 4-5 Мб дискового пространства. Если теперь еще раз отформатировать эту флэшку, то она будет отображаться в проводнике как пустой диск:

Мы смоделировали ситуацию случайного форматирования флэшки. Займемся восстановлением данных с нее. Вообще-то алгоритм восстановления данных по сигнатурам – самый простой из существующих, и он реализован в очень многих программах автоматического восстановления данных, в том числе бесплатных, но профессиональные лаборатории, конечно используют соответствующее их статусу оборудование и программное обеспечение.
После создания задачи восстановления данных в комплексе PC-3000 мы увидим такую картину:

Во время последнего форматирования была создана новая файловая система NTFS, которая содержит служебные файлы, созданные ей самой. Эти файлы не отображаются в проводнике Windows, но они показаны в программе восстановления данных. Однако данных предыдущей файловой системы, конечно не видно. Проведем сканирование нашей флэшки поиском по сигнатурам:

Как видите, найдены все файлы, которые были на флэшке до форматирования: 129 файлов с расширением jpeg. Как программа находит файлы по сигнатурам? Она просто сканирует всю флэшку, начиная с нулевого сектора и ищет в начале каждого сектора соответствующую шестнадцатеричную последовательность.
В нашем случае – это сигнатура jpeg файла FF D8 FF. Найдя такую последовательность в начале сектора алгоритм считает, что все, что следует дальше – это jpeg файл. Но нужно еще определить, где он заканчивается. В случае jpeg это не трудно – все jpeg файлы всегда заканчиваются последовательностью FF D9, в чем легко убедиться, если открыть такой файл в шестнадцатеричном виде и посмотреть на два его последних байта:

Такую последовательность программа считает окончанием текущего файла. Осталось только сохранить в памяти смещение, по которому находится начало файла и его размер и можно двигаться дальше в поисках следующего.
Итак, все файлы найдены и теперь их можно сохранить на диск (разумеется не на тот же, с которого мы восстанавливаем данные). После сохранения, зайдя в папку с восстановленными файлами, мы видим, что восстановление прошло корректно:

Но здесь мы обнаружим одну особенность: файлы имеют другие названия, а главное они все сложены в одну папку. Почему? Потому, что информация об именах файлов, каталогах в которых они хранились (и множество других атрибутов файлов), хранится только в файловой системе.
Стоит отметить, что jpeg – это, пожалуй, один из самых простых форматов для восстановления по сигнатурам, именно поэтому я взял его в качестве примера. Алгоритм восстановления файлов других форматов сложнее и имеет в каждом случае свои особенности: например, многие форматы файлов не имеют признака окончания файла.
Тогда для определения последнего сектора файла используется либо начало следующего файла, либо размер определяется по метаданным, которые содержатся в самом файле. Более сложные алгоритмы восстановления данных учитывают все эти нюансы, которые у каждого типа файлов свои, их описание выходит за рамки этой статьи.
Итак, восстановить данные по сигнатурам несложно, это умеют делать многие программы автоматического восстановления, но в некоторых случаях не помогает даже такой метод, а в некоторых случаях такой метод хоть и восстанавливает данные, но без информации об их размещении он не имеет смысла. Рассмотрим эти случаи.



